说明
本文开始使用的ubuntu版本是16.04,后来改成18.04版本,“使用“部分就是在18.04版本下测试的。
下载源代码
使用的下载命令如下(注意下载的时候需要使用到root权限):
apt install linux-source
运行结果如下,下载到的代码位于/usr/src目录:
之后就可以使用tar命令来解压缩文件到指定的目录:
tar -xjvf linux-source-4.4.0.tar.bz2 -C /home/jw/Code/
其中的-C是用来指定解压缩的目标文件夹的。
这样就可以在指定的目录找到linux源代码并使用了。
不过还有一个小问题,因为前面使用了root来下载和压缩源代码,所以这时其它用户没有办法修改这些文件,可以使用下面的代码更改权限:
sudo chown jw:jw -R linux-source-4.4.0/
这里讲源代码的权限给了jw:jw,前一个是组名,后一个是用户名(根据实际情况修改成自己的权限就行)。
-R表示遍历目录下的所有文件。
这样jw这个用户也可以修改这些文件了。
编译
进入linux目录。
运行make命令,发现报错,说是没有.config文件。
建立默认的.config文件:
make defconfig
之后就可以使用make进行编译了。
编译完成之后的文件位于:
以上是编译默认的适用于x86的linux,实际的用处并不是很大。这里只是做简单的参考。
对于实际的应用,还得自己配置.config文件做具体的设置。
使用
不过事实上上述生产的bzImage还是可以在QEMU中使用的,如下所是:
不过可以看到会报错。
这是因为没有文件系统,这个需要自己创建。
下面是一个简单的创建方法:
1. 首先是创建了一个二进制,里面放的是一个最简单的文件系统:
2. 光有文件系统还不行,实际上这也不是一个完整的文件系统,还需要往里面填内容(主要是init文件),这里使用busybox,因此首先需要编译busybox。
3. 下载最新版本的busybox源代码,选择静态编译(在源代码目录下执行make menuconfig):
之后就是编译(make -j4)。
编译完成之后是安装,这里我们需要将它安装到前面生成的文件系统中,命令如下:
注意这里选择的路径就是在前面mount内核文件bzImage的tmp目录。
4. 之后使用如下的命令来启动内核:
这算是最简单的一个系统了吧。