Linux 内核目录结构一 u-boot 目录结构


一 Linux 内核目录结构

(1)arch 目录 :存放架构相关的代码
arch/arm/boot/compressed 存放的是内核的自解压代码
arch/arm/kernel/head.S Linux 内核的开始代码

-----------------------------
|解压代码|压缩的Linux 内核|
-----------------------------


arch/arm/boot/dts(device tree source) 存放的是开发板相关的设备树文件(硬件信息)
arch/arm/configs 存放的SOC芯片相关的内核配置文件
make exynos_defconfig(导入默认配置)或Kconfig文件,决定了配置菜单里有那些内容

(2)driver 目录: 设备驱动代码
(3)net 目录: 网络协议栈的实现代码

(4)Makefile 文件 (指定平台信息和交叉开发工具链)

(5).config文件里的内容是宏开关,决定了用Makefile进行编译时有那些驱动会编译进内核

开发平台:

[1]CPU 核
ARM cortex-A9 armv7指令集

[2]SOC
Samsung exynos4412 4个cortex-a9核

[3]board
fs4412 -------->参照三星的母板(bootloader linux android)进行设计

一 u-boot 目录结构

1.uboot源码中board 存放是特定开发板相关的代码,一般以芯片厂家的名字命名
origen是三星基于exynos4412做一块开发板

board/samsung/origen/lowlevel_init.S 系统时钟初始化代码(就是将原始的晶振进行倍频)
board/samsung/origen/mem_setup.S 内存初始化代码


2.arch 都是跟cpu架构相关的代码,例如:arm ,x86 ,mips ,ppc
arch/arm/cpu/armv7/start.S 这个是uboot首先执行的代码
arch/arm/cpu/u-boot.lds 这个是连接脚本文件(告诉编译在连接生成可执行文件的时候,一些段存放位置) ,

Linux一个可执行文件
objcopy
| |
|elf 头 | ----------> 给Linux使用
|-------|
|.data |
|-------|
|.bss |
|-------|
|.ro |
|-------|
|.txt |


.data :
已经初始化的全局变量和static修饰的局部变量

.bss :
未初始化的全局变量和static修饰的局部变量

.ro :
字符串常量

.txt :
机器码

注意:
.data , .ro , .txt 会影响最终文件的大小


3.include 存放的是uboot相关代码需要头文件
include/configs/origen.h

origen开发板对应的头文件,它决定了origen所需要的一些代码的宏开关
它也是开发板配置头文件,开发板所需要的代码宏开关和相关的宏定义的
参数都应该在此文件中定义

在makefile文件中
#ifdef SAMSUNG_XXXX
.......
#endif

#ifdef TI_XXX
.....
#endif
....

4.net uboot支持的一些网络协议
ping(icmp) tftp arp(根据ip地址获取目标主机mark地址(网卡地址)) rarp


5.lib 多有平台通用的代码
string.c 实现了字符串相关操作的代码

6.common uboot支持的命令实现代码

7.driver uboot支持的一些硬件驱动代码 ,有网卡驱动


8.boards.cfg
u-boot 支持的板子的配置信息,u-boot编译系统就是根据此配置文件,来识别当前板子的信息

相关