1、介绍
学习嵌入式linux,工作中少不了添加各种功能、模块,这时就需要从新编译源码。
按照书本上或者网络上的教程来编译往往会遇到各种各样的问题,先总结一下配置编译linux的流程,以防止将来忘记,加深记忆。
2、配置内核
进入linux内核源码顶层目录输入:
make ARCH=arm menuconfig
进入配置界面,根据需求选择功能。(Y选择、空格清空、M编译为module)
配置结束后一定在配置界面末尾选中“Save an Alternate Configuration File”,最后退出选择yes保存。
3、编译内核
内核配置结束后,输出make命令即可开始编译内核。如果没有修改 Makefile 文件并指定ARCH 和 CROSS_COMPILE 参数,则须在命令行中指定:
make ARCH=arm CROSS_COMPILE=arm-linux-
这里我的arm gcc版本是3.4.1,这里踩了个大坑,原来我的arm gcc是4.5.2的编译源码就会报错:
WARNING: modpost: Found 5 section mismatch(es).
To see full details build your kernel with:
'make CONFIG_DEBUG_SECTION_MISMATCH=y'
GEN .version
CHK include/generated/compile.h
UPD include/generated/compile.h
CC init/version.o
LD init/built-in.o
LD .tmp_vmlinux1
drivers/built-in.o: In function `flexcan_mb_bottom':
hid-quirks.c:(.text+0x7951c): undefined reference to `__bswapsi2'
drivers/built-in.o: In function `flexcan_mbm_isr':
hid-quirks.c:(.text+0x79800): undefined reference to `__bswapsi2'
drivers/built-in.o: In function `flexcan_mbm_xmit':
hid-quirks.c:(.text+0x79ac4): undefined reference to `__bswapsi2'
make: *** [.tmp_vmlinux1] 错误 1
arm gcc换成4.4.1的也一样报错,最后查到arm gcc 3.4.1和linux2.6.35.3才是绝配。
这里编译可以加上“-jN”多核编译,加快速度,这里我是虚拟机单核的故未加。
4、生成uImage
编译结束后要生成uImage,书本上网络上多种生成uImage方法,最简单的就是make后面加上uImage:
make ARCH=arm CROSS_COMPILE=arm-linux- uImage
5、编译内核模块
如果内核中有配置为<M>的模块或者驱动,需要在编译内核后再通过 make modules 命
令编译这些模块或者驱动:
make ARCH=arm CROSS_COMPILE=arm-linux- modules
编译得到.ko结尾的模块文件。
6、内核模块整合
编译完内核模块后,执行modules_install后,可将编译得到的全部模块安装到某一目录下,并且还会生成模块的依赖关系文件。
Make ARCH=arm CROSS_COMPILE=arm-linux- INSTALL_MOD_PATH=/home/vmuser/桌面/module_111 modules_install
这里在module_111文件夹下生成2.6.35.3-571-gcca29a0文件夹,复制这个文件夹到开发板/lib/modules文件夹下,覆盖原文件夹或先删除源文件夹。
这一步很重要,执行这一步可以免去内核加载模块的时候出现的各种问题。
7、iMX283烧录uImage
采用USB烧录,因为我原有就是linux系统故不擦除NAND Flash。
USB固件烧写软件用飞思卡尔官方提供的MfgTool。
首先备份原有目录下的uImage,MfgTool 1.6.2.055-ZLG140813\Profiles\MX28 Linux Update\OS Firmware\files\uImage 为uImage_back。
复制生成的uImage到此MfgTool 1.6.2.055-ZLG140813\Profiles\MX28 Linux Update\OS Firmware\files目录下。
(1)把 EasyARM-i.MX283A 设置为 USB 启动方式( 使用短路器短接 JP4 和 JP6
跳线,保持 JP1、 JP2、 JP3 和 JP5 跳线的断开);
(2)使用 MiscroUSB 线缆连接 EasyARM-i.MX283A 的 USB OTG 接口和主机。
打开MfgTool.exe,带PC识别后点击主菜单中的 Options→Configuration…菜单项,打开 MfgTool 的配置界面。
[图片上传不上]
按照图中选择:
[图片上传不上]
点击开始,待状态窗口显示操作完成后拔掉电源,恢复原样。
文档上说该软件不支持Windows 8,回去试一试Windows10是否能用。
8、总结
上述为iMX283平台配置内核、编译内核、编译模块、烧写内核的全过程。