全志H3主线U-Boot及Linux编译
写这篇文章的目的:
一个月前买了块香橙派One,现在又入手了块香橙派Pc plus,结果当初的编译流程有点记不清楚了,编译又耽误了一个下午的时间,看来还是要总结一下。
在这篇文章里,使用的U-boot版本为2020-04。
使用的Linux内核版本为5.3.5+(可能不是主线内核,因为是从香橙派Github上下载的5.3.5,所以和主线的内核会有稍微的区别)。
负责交叉编译的主机系统为Ubuntu 18.04。
用到的交叉编译链为arm-linux-gnueabihf- 7.2.1以及4.9。
1.设置交叉编译链环境
解压下载的交叉编译链至你想要的地方,然后设置并且更新PATH,输入arm-linux-gnueabihf-gcc -v显示版本进入下一步。
2.编译U-boot-2020-04
注意:主线U-boot要求交叉编译链大于6.0,所以在一开始我准备了7.2.1的交叉编译链。
注意:5.4版本有bug
在U-boot的目录下输入:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- orangepi_pc_plus_defconfig
生成 orangepi_pc_plus的一些配置文件
接着输入:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
如果你的CPU是8核16线程,为了加快编译速度可以输入,其他CPU类比推理一下
make -j16 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
等待编译结束…
会生成以下文件
u-boot-sunxi-with-spl.bin
u-boot.bin
u-boot-dtb.bin等
初学者看到这些文件会比较蒙蔽,先说一下u-boot-sunxi-with-spl.bin是我们需要的U-boot程序
接着稍微解释一下这些文件的区别:
首先U-boot代表的是U-boot的意思,这个没毛病。。
spl代表的是U-boot的创造者为芯片启动提供的自己的解决方案,不同厂商的处理器内部的RAM大小,有的厂商芯片内部RAM比较大,能直接一步到位将外部的boot程序烧进内部RAM对处理器进行设置;而有的厂商内部RAM比较小,不能一步到位将外部的boot程序烧进RAM,而是分多步,先拷贝最重要的boot程序进去设置,再到主存里完成剩余的设置。面对不同厂商自己不同boot方案,U-boot采用了spl来完成对绝大部分的芯片进行兼容。大概意思是这样的,可能不太准确。
u-boot-sunxi-with-spl.bin就是再U-boot的主程序最前面加上spl的程序。
U-boot编译结束,进入下一步内核编译
3.主线内核编译
将交叉编译器切换至4.9,当然也可以不切换,之所以使用4.9的原因是4.9稳定。
主线编译分为三步:
1.编译内核;
2.编译设备树文件;
3.编译模块(不在内核内的)
1.编译内核:
和U-boot编译类似,
进入内核主线目录下输入
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- sun8iw7p1smp_defconfig
生成配置文件
接着输入:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
CPU高级的记得加上-j
编译完成后在 /home/mainline/mainline_kernel/arch/arm/boot
zImage,这是我们内核目标文件,还需要处理一下,先不管。
接着输入:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs
编译设备树
目标文件在/home/mainline/mainline_kernel/arch/arm/boot/dts下
sun8i-h3-orangepi-pc-plus.dtb文件
再输入
mkdir output
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=/home/mainline/mainline_kernel/output modules_install
在output文件夹下得到一系列模块文件,先不管
至此编译流程结束,再简单处理一下即可烧入至SD中启动香橙派PC_Plus。
第一次写博客,操作不熟悉,看的不爽望原谅,接下来会写如何U-boot启动内核和内核的一些配置及坑
4.补充问题及解决方法
安装交叉编译器:
apt-get install gcc-arm-linux-gnueabihf
recipe for target 'scripts/basic/fixdep' failed
apt-get install
Python.h: No such file or directory
sudo apt-get install python3-dev