linux4.11内核设备编译时出现的问题(参考博客并更改的)
AllWinnerH3 linux4.11版本的bsp下载:
https://pan.baidu.com/s/1mhU4a8K 密码: b375
H3-linux4.11_bsp目录就是所需的源码及编译工具.
下载后, 先安装tools目录里的dtc工具. 解包dtc-master.zip, 执行”make && make install”即可.
1 配置gcc-linaro-7.2.1交叉编译器。因新版的uboot需要大于6.x版本以上的编译器才可以。
配置好后才可以编译uboot及内核源码.
2 编译uboot:
解包u-boot源码后,进入源码目录:(在root用户下进行编译,否则可能会出错)
1 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- orangepi_lite_defconfig //配置uboot
2 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- //编译
此处编译可能会出现错误,缺少一个pathon.h头文件,错误如下图,
解决办法:输入命令 yum install python-devel
3
4 sudo dd if=./spl/sunxi-spl.bin of=/dev/sdb bs=1k seek=8 //烧写bl1到sd卡
5 sudo dd if=./u-boot.bin of=/dev/sdb bs=1k seek=40 //烧写uboot.bin到sd卡里
//烧写后,正常情况下应可用sd卡启动板,可通过uart接收到板上uboot的输出信息.
3 编译内核:
解包linux内核源码后,进入内核源码目录下操作:
1 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- sunxi_defconfig //配置内核
2 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage -j4 //编译出内核镜像
3 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs //编译出设备树文件
4
5 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules //编译出驱动模块
//完成后,就可以把设备树文件,内核镜像,文件系统放在sd卡分区里.
文件系统可沿用前面所做的文件系统,或者重编busybox制作文件系统也可.
//我这里是所有所需文件及文件系统都放在sd卡的第一个分区(ext4格式)里, 挂载在/run/media/jk/linux/
//也可以将下面的文件都放到fat32分区里。
1 /复制编译出来的设备树文件到sd卡分区里,并重命名为orangepi_lite.dtb
2 sudo cp arch/arm/boot/dts/sun8i-h3-orangepi-lite.dtb /run/media/jk/linux/orangepi_lite.dtb
3
4 //复制内核镜像到sd卡分区里
5 sudo cp arch/arm/boot/zImage /run/media/jk/linux/zImage
6
7 //把编译出来的驱动模块安装到sd卡分区里
8 sudo make ARCH=arm modules_install INSTALL_MOD_PATH=/run/media/jk/linux
以上步骤完成后, 即可把sd卡接板上启动系统. 进入uboot后,还需要设置好环境变量:
1 //设置uboot启动后自动引导系统(下面两个根据自己文件的存放位置选择相应的命令,第一个文件放在ext4中,第二个放在fat32)
2 setenv bootcmd "ext4load mmc 0:1 0x46000000 zImage; ext4load mmc 0:1 0x47000000 orangepi_lite.dtb; bootz 0x46000000 0:0 0x47000000"
3 setenv bootcmd "fatload mmc 0:2 0x46000000 zImage; fatload mmc 0:2 0x47000000 orangepi_lite.dtb; bootz 0x46000000 0:0 0x47000000"
4
5 //设置内核启动参数.这里需要注意sd卡在uboot上是第0个设备,但在linux内核里变成了第2个设备(可在内核的log看到).
6 setenv bootargs "root=/dev/mmcblk2p1 rw console=ttyS0,115200n8"
保存环境变量:
saveenv
重启系统:
reset
以上步骤完成后,应就可以进入文件系统了.