0.本文中所有文件都来源于讯为itop4412视频教程
- 编译环境
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
- 编译命令
进入解压源码得到的“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,才能编译成功
- 生成的镜像
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
4.设备树的烧写
先烧写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
重启进入文件系统,控制台打印出如下错误…可见存储介质编号不一致,系统无法启动
修改配置文件
arch/arm/configs/iTop-4412_scp_defconfig
vim打开,查找
/mmcblk
修改mmcblk0p2修改后
编译->烧写->启动—>>>一直打印出tty的错误,
因为三星使用的是ttySACx的tty驱动,所以 可以将名为ttyx的驱动在vim etc/init.d/rcS中全部屏蔽掉.
屏蔽后,重新编译生成img镜像:
make_ext4fs -s -l 314572800 -a root -L Linux system.img system
编译->烧写->重启->发现新的问题,文件系统上,无法新建文件夹,文件系统为只读
修改 arch/arm/configs/iTop-4412_scp_defconfig,
文件中搜索root .在root=/dev/mmcblk1p2 后面添加 rw,表示文件系统可读可写,否则只能读,就不能新建文件夹和文件.
执行编译脚本 ->再次烧写.
开机启动后,看到自动建立了/mnt/disk文件夹 ,
这个文件夹是在启动脚本中建立的,
它的建立,说明文件系统可以正常写入了