没有合适的资源?快使用搜索试试~ 我知道了~
这个笔记是我自己写的,从下载一个内核怎么建立一个工程(文件的取舍)到这个内核是怎么挂接根文件系统,怎么执行第一个应用程序。这一路的分析.很详细!
资源推荐
资源详情
资源评论
内核:
一、内核启动流程分析之编译体验
1、打补丁:
cd linux-2.6.22.6
patch -p1 < ../linux-2.6.22.6_jz2440.patch
2、配置:三种方法
a, make menuconfig
b, 使用默认配置,在上面修改: 在arch/arm/configs 下
在arch/arm/configs找到相似的配置文件xxxx_defconfig
make xxxx_deconfig // 结果会生成一个.config 文件
make menuconfig (就会根据上面的配置文件出一个菜单,就可以选择修改配置项)
c, 使用厂家提供的配置文件:
cp config_厂家 .config
make menuconfig
例如:config_ok文件就是厂家的配置文件
3、编译:
a,make
b,make uImage //生成uImage 就是有个头部的内核文件
二、内核启动流程分析之配置
1、配置:
配置结果 : 生成一个.config 文件
make uImage 时有那些事情发生?
a, 由.config文件创建生成了一个autoconf.h文件 (最源代码使用,定义的是一个宏)
b, 由.config文件创建生成了一个auto.conf文件 (子目录下的Makefile文件使用,定义一个宏是Y/M)
例如:
.config 文件中有很多的配置项
配置项: CONFIG_DM9000 = Y/M
a, C源码中会有 CONFIG_DM9000 (是一个宏)
b, 子目录Makefile drivers/net/Makefile文件里有:obj -$(CONFIG_DM9000)+=dm9000.o
c, include/config/auto.conf 文件也有定义 Y/M (就是用于b中的Makefile) //在make 的时候由.config 生成
d, include/linux/autoconfi.h文件 定义为 1 (就是用于a中的C源码) //在make 的时候由.config 生成
注: c 和 d 文件都是make uImage的时候由.config文件生成的。
2、讲一下内核子目录下的Makefile文件
格式: obj -y +=xxx.o
obj -m +=yyy.o
obj -$(CONFIG_DM9000)+=dm9000.o (CONFIG_DM9000就是在生成的auto.conf文件中定义(Y/M))
三、内核启动流程分析之Makefile
1、子目录的Makefile:
例如 有a.c b.c两个源码文件
a, 编译到内核去: obj -y += a.o b.o
b, 编译成一个模块(ko文件) : obj-m += ab.o
ab-objs := a.o b.o
2、架构下的Makefile
由于顶层Makefile里没有uImage,所以在这里搜索uImage
zImage Image xipImage bootpImage uImage: vmlinux //uImage 依赖于vmlinux uImage = 头部 + 真正的内核
而vmlinux在顶层的目录下:
3、顶层的Makefile
make uImage 的时候就是查到uImage 搜索uImage 但是没有在顶层Makefile里,那就是在架构下的Makefile里
如果直接 make 的话 all: vmlinux 也会是依赖于vmlinux
vmlinux 依赖于:
vmlinux: $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) $(kallsyms.o) FORCE
b, 子目录Makefile drivers/net/Makefile文件里有:obj -$(CONFIG_DM9000)+=dm9000.o
c, include/config/auto.conf 文件也有定义 Y/M (就是用于b中的Makefile) //在make 的时候由.config 生成
d, include/linux/autoconfi.h文件 定义为 1 (就是用于a中的C源码) //在make 的时候由.config 生成
注: c 和 d 文件都是make uImage的时候由.config文件生成的。
2、讲一下内核子目录下的Makefile文件
格式: obj -y +=xxx.o
obj -m +=yyy.o
obj -$(CONFIG_DM9000)+=dm9000.o (CONFIG_DM9000就是在生成的auto.conf文件中定义(Y/M))
三、内核启动流程分析之Makefile
1、子目录的Makefile:
例如 有a.c b.c两个源码文件
a, 编译到内核去: obj -y += a.o b.o
b, 编译成一个模块(ko文件) : obj-m += ab.o
ab-objs := a.o b.o
2、架构下的Makefile
由于顶层Makefile里没有uImage,所以在这里搜索uImage
zImage Image xipImage bootpImage uImage: vmlinux //uImage 依赖于vmlinux uImage = 头部 + 真正的内核
而vmlinux在顶层的目录下:
3、顶层的Makefile
make uImage 的时候就是查到uImage 搜索uImage 但是没有在顶层Makefile里,那就是在架构下的Makefile里
如果直接 make 的话 all: vmlinux 也会是依赖于vmlinux
vmlinux 依赖于:
vmlinux: $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) $(kallsyms.o) FORCE
剩余8页未读,继续阅读
资源评论
Tom_殇子
- 粉丝: 30
- 资源: 56
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功