配置:
1.打补丁:patch -pn < xxx.patch;-pn中的n指第几层目录
2.配置:包括3种做法,第一种make menuconfig,一个个修改,显然如果修改的地方多,比较费时费力;第二种找到默认的配置文件,make xxx_defconfig,然后再make menuconfig;第三种是使用厂家的config文件,将该config文件修改为.config,然后放到内核目录中,cp 厂家_config .config ,然后make menuconfig
3.编译:uboot启动内核时,需要 头部信息+内核,所以编译时 make uImage就是编译内核并在内核头部加上信息
4.找config文件,用命令find -name "*config*"
5,找在哪个文件中有某个字符串,用grep "CONFIG_DM9000" * -nwR
6.查看autoconf.h种看到configxxx都被宏定义为1,所以在c文件中看到configxxx的宏就知道代表1
7.config = y或config =m在c文件中体现不出来,那就在Makefile中找
8.在Makefile中如果看到obj-y = xxx.o,表示该.o文件将会被编译进内核,如果看到obj-m=xxx.o,表示该.o文件会编译成一个模块
9.make uimage时,.config生成autoconf.h,同时生成auto.conf,auto.conf供Makefile的子目录使用,比如定义了obj-$(dm9000)=xxx.o,就会将xxx.o以y或以m的形式编进内核
10.在c源码中看到CONFIG_DM9000这个宏,这个宏在哪里定义,在头文件中定义,那么就在include/linux/autoconf.h中定义了
11.obj-m+=yyy.o 需要yyy.c,yyy.c会被编译成yyy.ko
12..config生成了include/config/auto.conf和include/linux/autoconf.h
13.a.c b.c如何编译成一个模块呢?
obj-m += ab.o
ab-objs := a.o b.o a.o由a.c生成,b.o由b.c生成
14.要看Makefile的具体生成过程,可以看document下的kbuild文件
15.make uImage 先找到uImage这个字符串的位置,再顺藤摸瓜的找下去
16.uImage就是头部+vmlinux,也就是头部加真正的内核
17.head-y如果在Makefile中找不到,就到/arch/arm/Makefile中找
18.
init-y :=init/
init-y := $(patsubst %/,%/built-in.o,$(init-y)) 这两行代码就会变成$(init-y) := init/built-in.o
19.make uImage v=1 ;v=1的意思是打印出更详细的信息
20.阅读linux内核代码,可以从arch/arm/kernel/head.S和arch/arm/kernel/vmlinux.lds入手