11. Linux内核的烧录¶
11.1. USB烧写Linux内核(EMMC/NAND通用)¶
11.1.2. 烧写一个镜像¶
烧写完毕后通过USB OTG连接电脑会存在一个BOOT分区如图
然后将我们在上一章编译的zImage拷贝到BOOT\kernel目录下,将zImage更名为vmlinuz-4.19.35-imx6
然后再建立个软件连接
1 2 | ln -s /lib/modules/4.19.35-imx6 /lib/modules/4.19.35+
reboot
|
注意: -4.19.35-imx6 为版本后缀,我这里使用的是4.19.35举例,往后可以更改为相应的版本后缀
11.2. DEB包烧写Linux内核(SD卡/EMMC/NAND通用)¶
- 将编译出来的 build_image/linux-image-4.19.35-imx6_1.xxxstable_armhf.deb
内核安装包拷贝到开发板上面,使用
dpkg
命令即可替换板子上的内核,如下所示。1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
#查看当前的内核 root@npi:~# dpkg -l | grep imx ii kobs-ng-for-imx6ull 0.1.1 armhf NandFlash Tools rc linux-image-4.19.35-imx6 2.2LubanCat armhf Linux kernel, version 4.19.35-imx6 #卸载当前内核 sudo dpkg -r linux-image-4.19.35-imx6 #若使用dpkg安装内核deb包提示错误,删除/boot/kernel目录下所有文件 sudo rm /boot/kernel/* #安装新内核 sudo dpkg -i linux-image-4.19.35-imx6_1stable_armhf.deb #打印消息如下 root@npi:/home/debian# sudo dpkg -i linux-image-4.19.35-imx6_1stable_armhf.deb Selecting previously unselected package linux-image-4.19.35-imx6. (Reading database . 12162 files and directories currently installed.) Preparing to unpack linux-image-4.19.35-imx6_1stable_armhf.deb ... Unpacking linux-image-4.19.35-imx6 (1stable) ... Setting up linux-image-4.19.35-imx6 (1stable) ... update-initramfs: Generating /boot/initrd.img-4.19.35-imx6 zz-uenv_txt: Updating /boot/uEnv.txt [uname_r=4.19.35-imx6]
通过 cat /proc/version 命令查看内核版本,可通过编译主机以及编译时间判断内核是否替换成功, 如下
1 2
root@npi:~# cat /proc/version Linux version 4.19.35-imx6 (root@zhan) (gcc version 7.5.0 (Ubuntu/Linaro 7.5.0-3ubuntu1~18.04)) #1stable SMP PREEMPT Tue Apr 20 10:25:18 UTC 2021
提示
若编译失败请尝试使用 sudo make mrproper 清除编译信息再次尝试, 多次编译失败请重新下载内核源码后再试。
11.3. 直接替换Linux内核(SD卡/EMMC/NAND通用)¶
将编译出来的 ebf_linux_kernel/arch/arm/boot/zImage 的拷到板子上,重命名为vmlinuz-4.19.35-imx6并替换/boot/kernel/vmlinuz-4.19.35-imx6
然后再建立个软件连接,原因是直接编译内核的版本号少了后缀,不能匹配当前/lib/modules/的驱动模块,加了软连接将旧版本的驱动模块软连接到新版本,即可匹配。
1 2 | ln -s /lib/modules/4.19.35-imx6 /lib/modules/4.19.35+
reboot
|
注意: -4.19.35-imx6 为版本后缀,我这里使用的是4.19.35举例,往后可以更改为相应的版本后缀
11.4. TFTP烧写Linux内核(SD/EMMC/NAND通用,一般用于测试)¶
11.4.2. 启动板子进入uboot中¶
上电快速按回车进入Uboot
1 2 3 4 5 6 | setenv gatewayip '192.168.103.254'
setenv netmask '255.255.255.0'
setenv ipaddr '192.168.103.142'
setenv serverip '192.168.103.243'
setenv ethaddr '32:34:46:78:9A:DC'
saveenv
|
注意
这里的 192.168.103 为局域网IP前缀(局域网的网络地址),要根据你网络情况填写
这里的 192.168.103.243 为TFTP服务器的IP,要根据你网络情况填写
这里的 192.168.103.142 为板子的IP,要设置为一个未被使用的IP,要根据你网络情况填写
这里的 255.255.255.0 为子网掩码,一般为255.255.255.0,如不对请联系你们网络管理员
我们试一下开发板能否ping通到主机 ping 192.168.103.243
然后将我们编译的zImage放到nfs目录下
SD卡和EMMC板的在uboot下运行如下代码
1 2 3 4 | run args_mmc_old;
tftp 0x80800000 zImage;
load mmc 1:2 0x83000000 /usr/lib/linux-image-4.19.35-imx6/imx6ull-mmc-npi.dtb;
bootz 0x80800000 - 0x83000000;
|
NAND板的在uboot下运行如下代码
1 2 3 4 5 6 7 | ubi part rootfs;
ubifsmount ubi0;
ubifsload 0x84000000 /lib/firmware/fatboot.img;
tftp 0x80800000 zImage;
ubifsload 0x83000000 /usr/lib/linux-image-4.19.35-imx6/imx6ull-nand-npi.dtb;
load ramblock 0:1 0x88000000 /kernel/initrd.img-4.19.35-imx6;
bootz 0x80800000 0x88000000:${filesize} 0x83000000;
|
启动后执行 cat /proc/version 查看当前内核信息