【内核笔记】Linux内核开发移植

Ø Linux内核源代码主要包含以下子目录:
Ø arch
与体系结构相关的代码。对应于每个支持的体系结构,有一个相应的子
目录如x86、arm等与之对应,相应目录下有对应的芯片与之对应
Ø drivers
设备驱动代码,占整个内核代码量的一半以上,里面的每个子目录对应
一类驱动程序,如:
block:块设备、char:字符设备、net:网络设备等
Ø fs
文件系统代码,每个支持的文件系统有相应的子目录,如cramfs,
yaffs,jffs2等
Ø include
这里包括编译内核所需的大部分头文件
Ø 与平台无关的头文件放在include/linux子目录下
Ø 各类驱动或功能部件的头文件(/media、/mtd、/net等)
Ø 与体系相关的头文件
arch/arm/include/
Ø 与平台相关的头文件路径
arch/arm/mach-s5p6818/include/mach
Ø lib
与体系结构无关的内核库代码,与系统调用相关
与体系结构相关的内核库代码在arch/arm/lib下
Ø init
内核初始化代码,其中的main.c中的start_kernel函数是系统引
导起来后运行的第1个函数,这是研究内核工作过程的起点
Ø ipc
内核进程间通信代码
Ø mm
与体系结构无关的内存管理代码
与处理器体系结构相关的代码在
arch/arm/mm下
Ø kernel
内核管理的核心代码,此目录下的文件实现了大多数linux系统的内核函
数,体系结构相关的代码在arch/arm/kernel
Ø net
网络部分代码,其每个目录对应于网络的一个方面
Ø scripts
存放一些脚本文件,如配置内核时用到的make menuconfig命令等
Ø Documentation
内核相关文档,关于内核各部分的通用解释和注释
Ø crypto
常用加密及散列算法,和一些压缩及CRC校验算法

镜像的格式及产生过程
Image 直接生成并且无头部未压缩的内核,一般用于PC机
zImage Image的压缩版,嵌入式系‘’统中常用
uImage u-boot专用,加了个标签头
xipImage: 片上执行的未压缩内核
1 、vmlinux是由以下内核代码生成的非压缩镜像
(arch/arm/kernel/head.s、kernel/、mm/、fs/、ipc/、crypto/、lib/、
drivers/、net/等等)
2 、Image是使用objcopy工具对vmlinux进行二进制化处理得到的镜

3 、arch/arm/boot/compressed/vmlinux由压缩的Image和
compressed/head.S、misc.c等文件组成
4 、zImage是由compressed/vmlinux使用objcopy工具二进制化得到
5 、再对zImage加上头部就成为了uImage
boot.img 是使用一种文件系统打包工具制作的,相当
于把各种非必须文件打包在一起成为一整个文件,然
后被烧写进设备

内核的配置与编译
make menuconfig
Ø Kconfig :对应内核模块的配置菜单
Ø Makefile :对应内核模块的编译选项

将自己开发的内核代码加入到Linux内核中,需要
有3个步骤:

  1. 把自己编写的代码放到内核中合适的位置
  2. 把自己开发的功能增加到Linux内核的配置选项中,使
    用户能够选中这项功能并编译
  3. 构建或修改Makefile,根据用户的选择,将相应的代码
    编译到最终生成的Linux内核中去

猜你喜欢

转载自blog.csdn.net/Flywithdawn/article/details/108792653