Linux内核分析第三周学习总结
2016-03-13 13:17
525 查看
Linux内核源码简介
arch/
该目录中包含和硬件体系结构相关的代码,每种平台占一个相应的目录。和32位PC相关的代码存放在x86目录下。
每种平台至少包含3个子目录:kernel(存放支持体系结构特有的特征实现)、lib(存放体系结构特有的对通用函数的实现)、mm(存放体系结构特有的内存管理程序的实现),除了这3个子目录之外,大多数体系结构在必要的情况下还有一个boot子目录,包含了在这种硬件平台上启动内核所使用的部分或全部平台特有代码。
init/
内核启动相关代码 -> main.cLinux内核启动初始化的起点就位于main.c中的函数start_kernel,相当于普通程序的main函数。
kernel/
存放linux内核最核心的代码,用于实现系统的核心模块,包括进程管理、进程调度器、中断处理、系统时钟管理、同步机制等。该目录中的代码实现这些核心模块的主体框架,独立于具体的平台和系统架构。
核心模块与平台相关的代码放在arch/中。
构造一个简单的Linux系统
跟踪分析Linux内核的启动过程使用实验楼的虚拟机打开shell
cd LinuxKernel/
qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img
内核启动完成后进入menu程序(《软件工程C编码实践篇》的课程项目),支持三个命令help、version和quit,您也可以添加更多的命令,对选修过《软件工程C编码实践篇》的童鞋应该是a piece of cake.
![](https://oscdn.geek-share.com/Uploads/Images/Content/202002/07/6541c85d10d59c08560034ca9aa6bf25.png)
使用gdb跟踪调试内核
qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S # 关于-s和-S选项的说明:
-S freeze CPU at startup (use ’c’ to start execution)
-s shorthand for -gdb tcp::1234 若不想使用1234端口,则可以使用-gdb tcp:xxxx来取代-s选项
另开一个shell窗口
gdb
(gdb)file linux-3.18.6/vmlinux # 在gdb界面中targe remote之前加载符号表
(gdb)target remote:1234 # 建立gdb和gdbserver之间的连接,按c 让qemu上的Linux继续运行
(gdb)break start_kernel # 断点的设置可以在target remote之前,也可以在之后
![](https://oscdn.geek-share.com/Uploads/Images/Content/202002/07/fa158bef11eada1bb8121efdb9e22bd0.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202002/07/e4a813ecff3e504d6115a1f033cf4b9b.png)
总结
init/main.c ->stat_kernel是linux内核的入口。
参考资料
http://mooc.study.163.com/learn/USTC-1000029000?tid=2001214000#/learn/content?type=detail&id=2001400011&cid=2001388025http://www.cnblogs.com/hyq20135317/p/5260671.html#3377323
相关文章推荐
- 第三节 构造一个简单的Linux系统MenuOS
- FILE的缓冲模式
- TLPI--->Linux趣事之一
- linux下gdb调试器使用学习-02
- Linux 设备驱动开发 —— Tasklets 机制浅析
- linux文本处理-grep
- centos7关闭防火墙(转)
- 共享库查找顺序
- Linux/UNIX套接字连接
- linux系统下的软件管理(转)
- linux 第三周
- 【翻译自mos文章】Linux的/var/log/messages是空的(0k),messages.0, messages.1也是空的
- CentOS6.5 64位下源码安装PostgreSQL9.5.1
- linux的用户、组和权限管理
- linux磁盘分区、文件系统创建与挂载
- .Net程序员学习Linux最简单的方法
- Linux内核分析——跟踪分析Linux内核的启动过程
- 20135316王剑桥Linux内核学习笔记第三周
- crontab——Linux 下的定时任务
- mac自带的sed和linux不一致, 需要安装gnu-sed