制作一个自定义的极小操作系统
$ mkdir tinyos
$ cd tinyos
准备一个编译好的内核镜像(https://www.kernel.org/ 下载源码,根据需要编译出内核)
$ cp ../bzImage bzImage
准备initrd目录,作一个最小的init程序
$ mkdir initrd
$ cd initrd
$ vim init.c
内容如下:---------------------
#include <stdio.h>
#include <unistd.h>
void main(){
int i = 0;
while(1){
printf("%d\n", i++);
usleep(1000000);
}
}
-----------------------------
静态编译生成init可执行程序
$ gcc --static -o init init.c (注意一定要静态编译!!!)
$ ll
total 900
-rwxrwxr-x. 1 yeqiang yeqiang 913752 May 5 09:42 init
-rw-rw-r--. 1 yeqiang yeqiang 123 May 5 09:27 init.c
返回上一层目录,编写initrd制作脚本
$ cd ..
$ vim mkinitrd.sh
内容如下:
------------------------------
#!/bin/bash
cd initrd
find . | cpio -c -o > ../initrd.img
gzip ../initrd.img
------------------------------
运行脚本,生成 initrd.img.gz
$ sh mkinitrd.sh
$ ll
total 6744
-rw-rw-r--. 1 yeqiang yeqiang 6510896 May 5 09:46 bzImage
drwxrwxr-x. 2 yeqiang yeqiang 4096 May 5 09:42 initrd
-rw-rw-r--. 1 yeqiang yeqiang 377292 May 5 09:29 initrd.img.gz
-rw-rw-r--. 1 yeqiang yeqiang 79 May 5 09:29 mkinitrd.sh
-rw-rw-r--. 1 yeqiang yeqiang 991 May 5 09:46 Readme
制作基于qemu的测试脚本并测试
$vim testImage.sh
内容如下:
------------------------
#!/bin/bash
qemu-system-x86_64 -kernel bzImage -initrd initrd.img.gz
------------------------
$ sh testImage.sh
截图: