Linux Kernel Development
Linux Kernel Development
获取内核源码
- 直接去kernel.org下载即可
- 各个版本的国内内核地址
- 更早期的linux早期内核版本, use git checkout v0.01 get 0.01 version use git log获取版本相关信息
- 这里需要注意,other resources里面的资源也可以看看,挺好的
- 右下角的feed建议订阅一下,罗马不是一天建成的
- 也可以通过git拉下来,git会带有丰富的历史记录
目录结构
我的另一篇文档介绍了,这里不再赘述
编译内核
这里需要使用busybox等工具,具体可以看b站视频和对应文档 我这里以我的环境(Debian10)为例操作下
下载源码并进入目录
|
|
设置体系结构
export ARCH=x86
make config
liuliancao@liuliancao:~$ sudo apt-get install flex bison -y
make menuconfig
liuliancao@liuliancao:~/projects/linux-5.12.4$ make menuconfig 选中General setup–>Initial RAM filesystem and RAM disk 选中Device Drivers–>Block service–>Ram block device support并修改Default Ram Disk size为65536 选中是Y,退出是ESC,ESC
make
liuliancao@liuliancao:~/projects/linux-5.12.4$ sudo apt-get install -y libelf-dev libelf-dev liuliancao@liuliancao:~/projects/linux-5.12.4$ make liuliancao@liuliancao:~/projects/linux-5.12.4$ ls -lh arch/x86_64/boot/bzImage lrwxrwxrwx 1 liuliancao liuliancao 22 8月 25 09:42 arch/x86_64/boot/bzImage -> ../../x86/boot/bzImage liuliancao@liuliancao:~/projects/linux-5.12.4$ ls -lh arch/x86/boot/bzImage -rw-r–r– 1 liuliancao liuliancao 9.0M 8月 25 09:42 arch/x86/boot/bzImage
安装busybox
请务必看下官方文档 从官网的介绍看,busybox是一个盒子,里面放内核和一些必要的工具,这样可以在类似嵌入式或者其他平台快速构建一个系统使用(尤其是开发测试)。
|
|
打镜像
记得用sudo
|
|
qemu模拟启动
|
|
出错原因是尝试访问图形界面导致,关闭图形显示-nographic
|
|
发现直接进入qemu monitor了,检查下output.txt发现没有信息,后来在评论下面发现用vnc :0发现可以看到信息了
然后发现tmpfs有问题,cat -A发现确实有异常字符,可能是中文字符在里面,改一下
|
|
还有一个报错是can't create diretory /proc/sys/kernel/hotplug 这个报错目前我还没解决,不过已经能进系统了
内核开发的特点
- 不能访问C库也不能访问标准的C头文件
虽然不能访问常见C库,但是可以include include目录下的头文件
- 必须使用GNU C
内联函数 内联汇编 分支声明
- 缺乏内存保护机制
用户程序进行非法内存访问,此时内核会发送SIGSEGV信号并结束整个进程。 内核非法访问内存,此时会导致oops。内核中的内存不分页。
- 难以执行浮点运算
- 每个进程只有很小的定长堆栈
- 需要时刻注意同步和并发
- 要考虑可移植性
尝试读下0.01版本内核
linux早期内核版本, use git checkout v0.01 get 0.01 version
首先git log看下readme
torvalds 91年的邮件,简述了linux的产生,支持多线程文件系统
有操作系统该有的内存管理,文件系统等等。由于是0.01所以还需要继续完善
具体可以到1.0版本看
boot
就两个文件boot.s, head.s
汇编这里大家大学可学到,我建议可以参考网上的解读,就不要一个一个比对了,