【Linux系统移植】NXP 官方开发板 kernel内核 编译与烧录
1、下载NXP 官方 I.MX6ULL EVK 开发板的kernel:linux-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz22、使用 FileZilla Client 将 uboot拷贝到ubuntu3、解压tar -xjvf linux-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2解压出来的文件:4、安装库(1...
1、下载
NXP 官方 I.MX6ULL EVK 开发板的kernel :linux-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2
2、使用 FileZilla Client 将 uboot拷贝到ubuntu
3、解压
tar -xjvf linux-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2
解压出来的文件:
sudo apt-get install lzop
(2)uboot 或 Linux 内核可以通过输入“make menuconfig”来打开图形化配置界面,menuconfig 是一套图形化的配置工具,需要 ncurses 库支持,使用以下命令安装 ncurses 库:
sudo apt-get install build-essential
sudo apt-get install libncurses5-dev
5、编译kernel
(1)新建mx6ull_iot_emmc.sh 的 shell 脚本文件
vim mx6ull_iot_emmc.sh
(2)写入以下内容。shell 脚本要求第一行必须是“#!/bin/bash”或者“#!/bin/sh”。
#!/bin/sh
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx_v7_mfg_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j12
(2)给脚本文件可执行权限
chmod 777 mx6ull_iot_emmc.sh
(3)执行脚本文件
./mx6ull_iot_emmc.sh
(4)编译过程中弹出图形配置界面,按两下 ESC 键可退出
(5)编译成功
(6)可以修改顶层Makefile,使用以下命令编译:
“make distclean”:清理工程
“make imx_v7_defconfig”:配置工程
“make menuconfig”:配置图形界面
“make -j12”:编译
如图:
6、烧录并启动kernel
(1)开发板终端设置uboot 中环境变量 bootargs
setenv bootargs 'console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw'
saveenv
(2)将 zImage 和 imx6ull-14x14-evk.dtb 复制到 Ubuntu 中的 tftp 目录下
cp arch/arm/boot/zImage /home/pjw/linux/tftpboot/
cp arch/arm/boot/dts/imx6ull-14x14-evk.dtb /home/pjw/linux/tftpboot/
(3)开发板终端使用以下命令下载启动内核
tftp 80800000 zImage
tftp 83000000 imx6ull-14x14-evk.dtb
bootz 80800000 – 83000000
(4)如图,内核启动成功:
(5)如果没有烧录文件系统,会提示以下错误:
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
即提示内核崩溃,因为 VFS(虚拟文件系统)不能挂载根文件系统,因为根文件系统目录不存在。即使根文件系统目录存在,如果根文件系统目录里面是空的依旧会提示内核崩溃。这个就是根文件系统缺失导致的内核崩溃,但是内核是启动了的,只是根文件系统不存在而已。
之前boot环境变量设置 console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw
- console 设置 linux 终端,串口 1 的设备文件是/dev/ttymxc0
- 115200 设置串口的波特率
- root=/dev/mmcblk1p2 根文件系统存放在 mmcblk1 设备的分区 2 ,即EMMC 的分区 2 。
- rootwait 表示等待 mmc 设备初始化完成以后再挂载,否则的话 mmc 设备还没初始化完成就挂载根文件系统会出错的。
- rw 表示根文件系统是可以读写的,不加 rw 的话可能无法在根文件系统中进行写操作,只能进行读操作。
编译过程遇到的错误问题解决:
错误一:
gcc: error: unrecognized argument in option ‘-mabi=aapcs-linux’
gcc: note: valid arguments to ‘-mabi=’ are: ms sysv
gcc: error: unrecognized command line option ‘-mlittle-endian’
gcc: error: unrecognized command line option ‘-mno-thumb-interwork’
gcc: error: unrecognized command line option ‘-mfpu=vfp’
scripts/Makefile.build:258: recipe for target 'scripts/mod/empty.o' failed
make[2]: *** [scripts/mod/empty.o] Error 1
make[2]: *** 正在等待未完成的任务....***
*** Can't find default configuration "arch/x86/configs/imx_v7_mfg_defconfig"!
***
scripts/kconfig/Makefile:105: recipe for target 'imx_v7_mfg_defconfig' failed
make[1]: *** [imx_v7_mfg_defconfig] Error 1
Makefile:541: recipe for target 'imx_v7_mfg_defconfig' failed
make: *** [imx_v7_mfg_defconfig] Error 2解决:
使用了默认的 ubuntu自带的gcc编译 ,或者是修改Makefile时没有保存成功。
错误二:
HOSTCC scripts/kconfig/mconf.o
In file included from scripts/kconfig/mconf.c:23:0:
scripts/kconfig/lxdialog/dialog.h:38:20: fatal error: curses.h: 没有那个文件或目录
compilation terminated.
scripts/Makefile.host:108: recipe for target 'scripts/kconfig/mconf.o' failed
make[1]: *** [scripts/kconfig/mconf.o] Error 1
Makefile:541: recipe for target 'menuconfig' failed
make: *** [menuconfig] Error 2
scripts/kconfig/conf --silentoldconfig Kconfig解决:
uboot 或 Linux 内核可以通过输入“ make menuconfig ”来打开图形化配置界面, menuconfig 是一套图形化的配置工具,需要 ncurses 库支持,使用以下命令安装 ncurses 库:sudo apt-get install libncurses5-dev
错误三:
recipe for target ‘arch/arm/boot/compressed/piggy.lzo’ failed解决:
使用以下命令安装 lzop 库。sudo apt-get install lzop
更多推荐
所有评论(0)