内核移植
半导体厂商会从Linux内核官网下载某个版本,将其移植到自己的CPU上linux内核移植,测试成功后才会将其开放给该半导体厂商的CPU开发者。开发者下载其提供的Linux内核,之后将其移植到自己的产品上。
1.NXP官方开发板Linux内核编译测试
编译内核之前须要先在ubuntu上安装lzop库,另外红帽子linux下载,图形化配置工具还须要ncurses库支持,安装为:
sudo apt-get install lzop
sudo apt-get install build-essential
sudo apt-get install libncurses5-dev
在Ubuntu中新建一个文件夹linux内核移植,之后将linux内核压缩包拷贝到文件夹中并解压,解压为:
tar -vxf linux-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2
NXP官方原版Linux源码早已放在了开发板光碟中,路径为:1、例程源码->4、NXP官方原版Uboot和Linux->linux-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2,可以使用“mv”对其重命名,我这里将其重命名为“linux-imx-rel_imx_4.1.15_2.1.0_ga_alientek”,命令如下:
mv linux-imx-rel_imx_4.1.15_2.1.0_ga linux-imx-rel_imx_4.1.15_2.1.0_ga_alientek
1.1配置并编译Linux内核
编译Linux内核之前要先配置Linux内核。每位板子都有其对应的默认配置文件,这种配置文件保存在“arch/arm/configs”目录中。imx_v7_defconfig和imx_v7_mfg_defconfig都可以作为NXP官方开发板IMX6ULLEVK的默认配置文件,而且通常都使用前者,由于前者编译下来的zImage可以通过NXP官方提供的MfgTool工具进行烧录
步入到Ubuntu中的Linux源码根目录下,执行如下命令:
#编译之前先清理
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
#配置Linux内核
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx_v7_mfg_defconfig
#编译Linux内核
make -j4
编译完成后,我们会得到两个重要文件:
1.2Linux内核启动测试
将生成的zImage和imx6ull-14x14-evk.dtb这两个文件下载到IMX6ULL-ALPHA开发板上进行测试。
首先检测uboot中的环境变量bootargs
console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw
将上一小节编译下来的zImage和imx6ull-14x14-evk.dtb复制到Ubuntu中的tftp目录下美国linux主机,由于我们要在uboot中使用tftp命令将其下载到开发板中,
cp arch/arm/boot/zImage ../../../tftpboot/
cp arch/arm/boot/dts/imx6ull-14x14-evk.dtb ../../../tftpboot/
拷贝完成之后就可以测试了,启动开发板,步入uboot命令行模式,之后输入如下命令将zImage和imx6ull-14x14-evk.dtb下载到开发板中并启动:
tftp 80800000 zImage
tftp 83000000 imx6ull-14x14-evk.dtb
bootz 80800000 - 83000000
启动运行
bootz 80800000 - 83000000
1.3根文件缺位错误
Linux内核启动之后是须要根文件系统的,根文件系统存在那里是由uboot的bootargs环境变量指定,bootargs会传递给Linux内核作为命令行参数。
root=/dev/mmcblk1p2,也就是说根文件系统储存在/dev/mmcblk1p2中,也就是EMMC的分区2中。这是由于正点原子的EMMC版本开发板出厂的时侯早已EMMC的分区2中烧录好了根文件系统,所以设置root=/dev/mmcblk1p2。
假如我们没有根文件系统,启动以后会报错
Kernelpanic-notsyncing:VFS:Unabletomountrootfsonunknown-block(0,0)
就是提示内核崩溃,由于VFS(虚拟文件系统)不能挂载根文件系统,由于根文件系统目录不存在。
本文原创地址://gulass.cn/ngfkfblnhbyc.html编辑:刘遄,审核员:暂无