11. Linux内核的烧录

11.1. USB烧写Linux内核(EMMC/NAND通用)

11.1.1. 环境搭建

首先下载mfgtool工具 详细可参考 烧写环境的搭建 中的 USB方式烧写的搭建 搭建好环境

11.1.2. 烧写一个镜像

烧写完毕后通过USB OTG连接电脑会存在一个BOOT分区如图

未找到图片bootfq

然后将我们在上一章编译的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.1. 环境搭建

详细可参考 烧写环境的搭建 中的 TFTP网络系统的搭建 搭建好环境

11.4.2. 启动板子进入uboot中

上电快速按回车进入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

未找到图片pingzhuji

然后将我们编译的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 查看当前内核信息

未找到图片neihe