linux内核移植
linux内核源码获取
linux 内核源码下载 https://www.kernel.org/
linux 内核版本命名 主版本号.次版本号.修订版本
linux 内核版本选择(和uboot类似)
支持对应的硬件平台
相对成熟的版本(资料多)
稳定版本(次版本号为偶数的版本一般都是稳定版)
linux内核源码结构
arch: 与CPU架构相关的源代码 block:磁盘设备的支持
crypto:加密相 firmware:固件
drivers:设备驱动 fs:文件系统
include:头文件 init:内核初始化
ipc:进程间通信 kernel:内核核心调度机制等
lib:库 mm:内存管理
net:网络协议 scripts:工具、脚本等
security:安全 usr:打包与压缩
virt:虚拟 tools: 工具
COPYING: 版权 CREDITS: 内核贡献者
README: 说明文档 Documentation: 帮助文档
Makefile: 编译管理 samples: 示例
linux内核的配置
指定处理器架构及编译工具
在Linux内核源码顶层目录下的Makefile中指定(ARCH、CROSS_COMPILE)
导入当前处理器的默认配置
make <soc_name>_defconfig
注1:soc_name为当前使用的处理器的名字
注2:内核源码的arch/arm/configs下对各个厂商的soc都有一个默认配置文件
执行该命令后就会将对应的配置文件中的信息导入到源码顶层目录下的.config
修改配置
默认配置只能保证内核拥有最基本的功能,我们需要根据自己的实际需求对内核做进一步的配置
make menuconfig
[ ] 有两种状态
输入Y,显示“*”,内核中该功能被选中,相关代码会被编译进内核
输入N,显示“ ”,内核中该功能不被选中,相关代码不会被编译进内核
< > 有三种状态
输入Y,显示“*”,内核中该功能被选中,相关代码会被编译进内核
输入N,显示“ ”,内核中该功能不被选中,相关代码不会被编译进内核
输入M,显示“M”,内核中该功能被选为模块(被编译为独立的模块)
linux内核的编译(以下命令均在内核源码的顶层目录下执行)
make -j8 uImage 多线程编译内核(编译选为“*”的选项到内核),推荐最多为CPU物理核心总数的两倍
make modules 编译内核模块(编译选为“M”的选项为独立模块)
make dtbs 编译设备树(将设备树源文件dts编译为二进制文件dtb)
make clean 删除编译过程中产生的中间文件
make distclean 删除编译过程中产生的中间文件,以及配置文件 ,
开始移植linux 内核
1.修改顶层Makefile,指定交叉编译器
$ vi Makefile
ARCH ?= $(SUBARCH)
CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%)
修改为以下内容(注意后边不要有多余空格),然后保存退出
ARCH ?= arm
CROSS_COMPILE ?= arm-none-linux-gnueabi-
2.指定使用的处理器
$ make s3c2410_defconfig
显示以上信息表示配置成功
make menuconfig错误解决方法
(32条消息) make menuconfig错误_make menuconfig报错_Flynnsin的博客-CSDN博客
(32条消息) Linux编译_五星好市民zm的博客-CSDN博客
3.进入内核配置界面
$ make menuconfig
方向键 可选择不同的选项
Enter 键进入子菜单
Y 键选中某项功能
N 键去除某项功能
M 键将该功能编译成内核模块
Esc 按两次退出界面
? 为帮助选项
/ 键为搜索选项
配置完成后通过方向键选择‘Save’保存即可,然后选择‘Exit’退出该配置界面
4.编译内核(该过程可能需要二十分钟左右)
$ make -j8 uImage
编译成功在源码的 arch/arm/boot/ 目录下生成了 uImage 镜像
(32条消息) 嵌入式系统移植【7】——Linux内核移植-CSDN博客