1、linux内核 ubuntu redhat
内核 发行版本
2、linux内核的目录结构
体系结构相关目录
arch
arch/arm:
mach-xxx : 开发板的相关信息注册目录
plat-xxx : SOC的描述信息
其余目录 : cpu核心的描述信息
体系结构无关目录
其他目录
block : 块设备的调度算法
crypto : 加密算法
Documentation : 文档
drivers : 内核中所有驱动程序,驱动子系统的目录
fs : 内核支持的文件系统
include : 平台无关的头文件
3、简单的编译配置
选
选哪些目录编译
体系结构相关目录的哪些目录,mach-xxx
选哪些文件编译
dm9000.c net100.c
依靠Makefile来选择配置
***************************************
obj-y : 所有在obj-y的变量里定义的,都编译进内核
obj-y += abc.o abc.c就编译了
obj-y += aaa/ 进入aaa目录里,读aaa目录里的Makefile
obj-$(CONFIG_XXX) += a.o
obj-m :所有在obj-m的变量里定义的,都以模块方式编译出内核(聚内核)
obj- obj-n : 不编译
***************************************
怎么选:
定义一个文件,该文件里存放CONFIG_XXXXX的变量集合
内核提供了每一个mach的参考配置文件:
在哪里找: 在每一个体系结构相关目录下有一个configs目录
arch/arm/configs/ arch/mips/configs/
这些目录里面有xxxx_defconfig的文件
公布给谁:
公布给顶层目录的Makefile去找到,顶层目录的Makefile默认查找顶层目录里的.config文件
cp arch/arm/configs/s5pc100_defconfig .config
只是体系相关的信息
让内核自己引入体系结构无关的配置
make menuconfig : 内核提供的一个图形化得配置方法
4、开发FSC100的内核
1、配置交叉编译器
vi Makefile 找CROSS_COMPILE
******************************************
ARCH ?= arm
CROSS_COMPILE ?= arm-none-linux-gnueabi-
*******************************************
2、拷贝参考配置文件变成.config
拷贝提供的参考配置文件
cp bakconfig .config
2.2 make menuconfig
检查
System Type---》ARM system type (Samsung S5PC100)
3、编译
make = make zImage + make modules
编译内核 编译模块
make zImage
5、内核的编译的过程
CC .o -----> LD vmlinux -----> OBJCOPY arch/arm/boot/Image
GZIP arch/arm/boot/compressed/piggy.gzip
CC arch/arm/boot/compressed/misc.o
CC arch/arm/boot/compressed/decompress.o
LD arch/arm/boot/compressed/vmlinux
OBJCOPY arch/arm/boot/zImage
Image : 内核的文件 : 测试这个能启动?
zImage : 自解压的压缩内核文件
uImage : uboot下的启动内核文件 bootm这个命令解析的
6、配置的细节
make menuconfig 帮我们写.config文件--->作用哪些文件是否编译
---> : 代表一个菜单,可以进去
Kconfig的文件来解析的
menu : 菜单名称 endmenu
source : 等价于include 包含下一个Kconfig
config : 配置选项
config FS1309 ; make menuconfig后对CONFIG_FS1309进行选择,创建一个宏名
bool "Hello world" ; bool : 可以选择y和n的选项
; tristate : y n m
help
++++++++++++++++++++++++++
arch/arm/Kconfig ---
led 测试:
在内核启动后,用cat /proc/devices 查看设备信息
??? led
创建设备节点
mknod /dev/led c 252 0
7、Makefile的分析
顶层Makefile,间接包含了体系结构相关Makefile
ARCH ?=
SRCARCH := $(ARCH)
include $(srctree)/arch/$(SRCARCH)/Makefile
*分析体系结构下的Makefile
# Build vmlinux
# vmlinux
# ^
# |
# +-< $(vmlinux-init)
# | +--< init/version.o + more
# |
# +--< $(vmlinux-main)
# | +--< driver/built-in.o mm/built-in.o + more
# |
# +-< kallsyms.o (see description in CONFIG_KALLSYMS section)
vmlinux-init := $(head-y) $(init-y)
* head-y : = xxx
体系结构相关的Makefile:
head-y := arch/arm/kernel/head$(MMUEXT).o arch/arm/kernel/init_task.o
textofs-y := 0x00008000
阅读(502) | 评论(0) | 转发(0) |