Linux源代码结构简析-嵌入式操作系统总结
这是什么
嵌入式操作系统课程的课后作业[131110526]
1. 下载最新的Linux内核源码,并对其目录结构(含子目录)进行分析:
(1)目录含义、子目录含义、众多.c、.h、makefile文件、配置文件等进行解析;
(2)建议以表格的形式来整理
2.下载最新的支持嵌入式Linux内核的根文件系统(源码),并对其目录结构(含子目录)进行分析
3.Busybox是什么?有什么功能?怎么用
参考资料
- 关于Linux源代码的目录结构说明
- 如何解压tar.xz
- 通过fork函数创建进程的跟踪,分析linux内核进程的创建
- Makefile经典教程
- JFFS2 文件系统及新特性介绍
- 嵌入式根文件系统的移植和制作详解
- BusyBox 简化嵌入式 Linux 系统

源代码目录结构整理
| 目录 | 说明 |
|---|---|
| scripts | 存放了用来配置内核的脚本和应用程序源码 |
| Lib | gnuzip加压缩算法、字符串和内存操作等相关函数 |
| Mm | 和体系结构无关的内存管理代码 |
| Include | linux源代码目录树中绝大部分头文件 |
| Init | 系统核心初始化代码,内核初始化入口函数 start_kernel就是在该目录下的文件main.c内实现的 |
| Kernel | 该 目录存放的是linux内核的最核心代码,用于实现系统的核心模块,这些模块包括进程管理、进程调度器、中断处理、系统时钟管理、同步机制等。该目录中的 代码实现了这些核心模块的主体框架,独立于具体的平台和系统架构。核心模块与平台相关代码存放在目录arch中。 |
| Arch | 每个子目录都与某种体系结构对应,用于存放系统结构相关代码,向平台无关的系统核心模块提供所需的功能接口 |
| drivers | 显卡、网卡、SCSI适配器、PCI总线、USB总线和其他任何Linux支持的外围设备或总线的驱动程序 |
| fs | 虚拟文件系统(VFS,Virtual File System)的代码,和各个不同文件系统的代码都在这个目录中。 |
操作步骤
以下操作截屏于我的centos主机上
-
下载linux内核
![]()
-
解压源码
![]()
-
展开根目录
![]()
-
展开arch目录
![]()
-
查看Makefile
![]()
-
查看include/linux/syscalls.h
![]()
-
查看kernel下的fork.c(部分)
![]()
-
fork.c 共2128行
![]()
-
查看do_fork函数
![]()
-
do_fork函数调用copy_process函数
![]()
-
copy_process函数
![]()
-
copy_process函数调用dup_tasl_struct函数
![]()
-
dup_tasl_struct函数
![]()
-
查看/arch/i386/kernel/Process.c行数
![]()
嵌入式源程序
-
查找s3c24xx系列源码路径
![]()
![]()
-
查看/arm/kernel路径下的文件
![]()
-
查看arm下的Makefile
![]()
-
查看arm下的setup.c
![]()
-
查看memory.h
![]()
![]()
-
查看mach-s3c2410.c源代码
![]()
-
查看irq-pm.c
![]()
![]()
-
查看jffs2源代码目录
![]()
![]()
Busybox简介
BusyBox 是很多标准 Linux工具的一个单个可执行实现。BusyBox 包含了一些简单的工具,例如 cat 和 echo,还包含了一些更大、更复杂的工具,例如 grep、find、mount 以及 telnet(不过它的选项比传统的版本要少);有些人将 BusyBox 称为 Linux 工具里的瑞士军刀。BusyBox 是为构建内存有限的嵌入式系统和基于软盘系统的一个优秀工具。BusyBox 通过将很多必需的工具放入一个可执行程序,并让它们可以共享代码中相同的部分,从而对它们的大小进行了很大程度的缩减,BusyBox 对于嵌入式系统来说是一个非常有用的工具。
-
已获取busybox源代码
![]()
-
查看解压缩的文件
![]()
-
查看根路径下的INSTALL说明文档
![]()
-
查看README了解Busybox是什么
![]()
-
make defconfig之前
![]()
-
make defconfig
![]()
-
make defconfig后产生三个文件
![]()
-
make报错
![]()
-
尝试解决错误(通过修改make defconfig 产生的.config文件,来禁用部分特性)...
![]()
-
再次遇到错误
![]()
-
参考别人的解决方案http://blog.csdn.net/sdcxyz/article/details/22161913
![]()
-
仍然无法解决,然后我去官网下了个编译好了的二进制 ==
![]()
-
使用busybox尝试执行执行ls -l,ifconfig,vim,cat等命令
![]()
![]()
![]()
Contact me by email : hit_lacus@126.com










































浙公网安备 33010602011771号