Chinaunix首页 | 论坛 | 博客
  • 博客访问: 588399
  • 博文数量: 165
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1554
  • 用 户 组: 普通用户
  • 注册时间: 2013-10-23 22:57
个人简介

我本仁慈,奈何苍天不许

文章分类

全部博文(165)

文章存档

2018年(1)

2016年(33)

2015年(5)

2014年(34)

2013年(92)

分类: LINUX

2013-12-17 15:01:43

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
 
 
 
 
 
 
 
阅读(466) | 评论(0) | 转发(0) |
0

上一篇:内核中头文件分类

下一篇:Bootloader笔记

给主人留下些什么吧!~~