一、内核编译的步骤
编译步骤: (linux 内核源码的顶层目录下操作 )1. 拷贝默认配置到 .config cp config_mini2440_td35 .config2. make menuconfig 内核配置 make menuconfig3. make uImage make uImage
二、编译过程遇到的问题
1、在 make uImage编译时报错:
Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at kernel/timeconst.pl line 373.
/home/linux/linux-2.6.32.2/kernel/Makefile:129: recipe for target 'kernel/timeconst.h' failed
make[1]: *** [kernel/timeconst.h] Error 255
Makefile:878: recipe for target 'kernel' failed
make: *** [kernel] Error 2
修改
2、修改入口地址
通过tftp下载到开发板后,内核还不能正常启动
原因:
加载地址 Load Address:0x30008000
入口地址 Entry Point:要改成0x30008040
因为:uImage前64字节是头文件,要偏移64字节
3、 Image zImage uImage
Image 可以直接使用的内核镜映像zImage 一段解压程序 + Image 的压缩文件uImage 64 字节的头信息+ zImage
改成下图
修改方法
再重新编译
三、向内核中加入新文件
向内核中新加文件(以向 drivers/char 下新加 test.c 文件为例)1. 在 drivers/char 目录下创建并编辑文件 test.c2. 修改同层目录下 Makefile ,新增一句obj-$(CONFIG_TEST) += test.o3. 修改同层目录下的 Kconfig ,新增一个配置选项config TESTbool “ this is a test ”default yhelphahaha, have big use, donot delelte!4. make menuconfig5. make uImage
四、加入新的目录
1、创建一个新的目录,在该目录下写一个新的Kconfig
Kconfig的格式
2、在该目录的上一级目录的Kconfig里加入
五、补充知识
1、在 Linux 内核编译过程中,
cp config_mini2440_td35 .config
命令的作用是将一个预先配置好的内核配置文件config_mini2440_td35
复制到当前目录下的.config
文件中。2、make menuconfig 可视化的配置菜单(内核活地图)配置完成后,可以保存更改,这些更改将反映在当前目录下的
.config
文件中。3、更改Kconfig的配置后,make menuconfig菜单也会被更改(Kconfig 定义make menuconfig中的选项)
4、
.config ( 存放 make menuconfig 的配置结果 )CONFIG_BT = yCONFIG_WIFI = nMakefile ( 使用 .config 中的变量 )obj-$(CONFIG_BT) += bt.oobj-$(CONFIG_WIFI) += wifi.o
b
相对跳转
短跳转
pc += 100
ldr
绝对跳转 长跳转
pc = 200
地址相关代码: 加载地址和链接地址需要保持一致
地址无关代码: