0.本文中所有文件都来源于讯为itop4412视频教程

  1. 编译环境
    1.1 Ubuntu12.04.2 (讯为提供),基于itop4412_scp_elite开发板
    1.2 安装设备树编译器:apt-get install device-tree-compiler
    1.3 uboot及内核的源码和编译器
    源码文件 itop4412_kernel_4_14_2_bsp-20190225.tar.gz
    编译器gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12.tar.gz
    1.4 编译器安装和环境变量
    编译器拷贝到“/usr/local/arm/”目录下,然后解压
    //设置环境变量并更新:
cd 
vim .bashrc     
shift + g   
//添加编译器目录,到环境变量
export PATH=$PATH:/usr/local/arm/gcc-4.6.2-glibc-2.13-linaro- multilib-2011.12/fsl-linaro-toolchain/bin
//保存,退出, 然后更新环境变量
source .bashrc    
echo $PATH
  1. 进入解压源码得到的“itop4412_kernel_4_14_2_bsp”目录下
    uboot、kernel和设备树一起编译的命令:

编译命令

./build_all.sh
  • 通过查看 上述编译脚本,可以了解到:

u-boot-2017.11/u-boot/ 下./build.sh脚本单独编译uboot
linux-4.14.2_iTop-4412_scp 下./build_kernel.sh脚本单独编译内核
build_kernel.sh编译脚本中可知:iTop-4412_scp_defconfig 是默认的编译配置文件(.config)
arch/arm/configs/iTop-4412_scp_defconfig
如果修改内核配置文件,需要覆盖掉iTop-4412_scp_defconfig,才能编译成功

  1. 生成的镜像
    uboot镜像:
    u-boot-2017.11/u-boot/u-boot-iTOP-4412.bin
    内核镜像:
    linux-4.14.2_iTop-4412_scp/arch/arm/boot/uImage
    设备树镜像:
    linux-4.14.2_iTop-4412_scp/arch/arm/boot/dts/exynos4412-itop-elite.dtb

.设备树的烧写
先烧写UBOOT

u-boot-iTOP-4412.bin

使它支持具有设备树功能到Linux系统,
进入fastboot,键入烧写命令:

fastboot.exe flash bootloader u-boot-iTOP-4412.bin

fastboot reboot

再次进入UBOOT,此时UBOOT已经支持设备树,进入fastboot 模式,UBOOT进入fastboot 模式:

fastboot 0

此过程如果连接不上,需要重新安装驱动(可以借助驱动人生)
上位机烧写命令:

fastboot.exe flash kernel uImage
fastboot.exe flash dtb exynos4412-itop-elite.dtb
fastboot.exe flash system system.img

烧写成功后,两端的控制台都会显示OK

5.斩杀BUG

重启进入文件系统,控制台打印出如下错误…可见存储介质编号不一致,系统无法启动

android 11 设备树目录_设备树

修改配置文件

arch/arm/configs/iTop-4412_scp_defconfig

vim打开,查找

/mmcblk

修改mmcblk0p2

android 11 设备树目录_文件系统_02

修改后

android 11 设备树目录_文件系统_03

编译->烧写->启动—>>>一直打印出tty的错误,

android 11 设备树目录_文件系统_04

因为三星使用的是ttySACx的tty驱动,所以 可以将名为ttyx的驱动在vim etc/init.d/rcS中全部屏蔽掉.

android 11 设备树目录_文件系统_05


屏蔽后,重新编译生成img镜像:

make_ext4fs -s -l 314572800 -a root -L Linux system.img system

编译->烧写->重启->发现新的问题,文件系统上,无法新建文件夹,文件系统为只读

修改 arch/arm/configs/iTop-4412_scp_defconfig,

文件中搜索root .

android 11 设备树目录_设备树_06

在root=/dev/mmcblk1p2 后面添加 rw,表示文件系统可读可写,否则只能读,就不能新建文件夹和文件.

执行编译脚本 ->再次烧写.

开机启动后,看到自动建立了/mnt/disk文件夹 ,

android 11 设备树目录_设备树_07


这个文件夹是在启动脚本中建立的,

它的建立,说明文件系统可以正常写入了