linux4.11内核设备编译时出现的问题(参考博客并更改的)
阅读原文时间:2023年07月10日阅读:1

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用户下进行编译,否则可能会出错)

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- orangepi_lite_defconfig //配置uboot
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- //编译
  此处编译可能会出现错误,缺少一个pathon.h头文件,错误如下图,
  解决办法:输入命令  yum install python-devel

sudo dd if=./spl/sunxi-spl.bin of=/dev/sdb bs=1k seek= //烧写bl1到sd卡
sudo dd if=./u-boot.bin of=/dev/sdb bs=1k seek= //烧写uboot.bin到sd卡里

//烧写后,正常情况下应可用sd卡启动板,可通过uart接收到板上uboot的输出信息.

3 编译内核:
解包linux内核源码后,进入内核源码目录下操作:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- sunxi_defconfig //配置内核
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage -j4 //编译出内核镜像
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs //编译出设备树文件

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules //编译出驱动模块

//完成后,就可以把设备树文件,内核镜像,文件系统放在sd卡分区里.
文件系统可沿用前面所做的文件系统,或者重编busybox制作文件系统也可.

//我这里是所有所需文件及文件系统都放在sd卡的第一个分区(ext4格式)里, 挂载在/run/media/jk/linux/

//也可以将下面的文件都放到fat32分区里。

/复制编译出来的设备树文件到sd卡分区里,并重命名为orangepi_lite.dtb
sudo cp arch/arm/boot/dts/sun8i-h3-orangepi-lite.dtb /run/media/jk/linux/orangepi_lite.dtb

//复制内核镜像到sd卡分区里
sudo cp arch/arm/boot/zImage /run/media/jk/linux/zImage

//把编译出来的驱动模块安装到sd卡分区里
sudo make ARCH=arm modules_install INSTALL_MOD_PATH=/run/media/jk/linux

以上步骤完成后, 即可把sd卡接板上启动系统. 进入uboot后,还需要设置好环境变量:

//设置uboot启动后自动引导系统(下面两个根据自己文件的存放位置选择相应的命令,第一个文件放在ext4中,第二个放在fat32)
setenv bootcmd "ext4load mmc 0:1 0x46000000 zImage; ext4load mmc 0:1 0x47000000 orangepi_lite.dtb; bootz 0x46000000 0:0 0x47000000"
setenv bootcmd "fatload mmc 0:2 0x46000000 zImage; fatload mmc 0:2 0x47000000 orangepi_lite.dtb; bootz 0x46000000 0:0 0x47000000"

//设置内核启动参数.这里需要注意sd卡在uboot上是第0个设备,但在linux内核里变成了第2个设备(可在内核的log看到).
setenv bootargs "root=/dev/mmcblk2p1 rw console=ttyS0,115200n8"
  保存环境变量:
  saveenv
  重启系统:
  reset

以上步骤完成后,应就可以进入文件系统了.