跟我一起学Linux内核开发:1、准备开发环境


前言

从这一篇章开始,我将开始内核的学习,会详细的记录我的学习笔记,内容详细,建议收藏起来,跟着我反复实操几次,加深印象,创作不易,如果觉得内容不错,希望能够得到大家的赞~话不多说,直接开整!


一、事前准备合作

1、linux的环境(建议使用ubuntu)
2、安装QEMU环境:sudo apt install qemu libncurses5-dev gcc-arm-linux-gnueabi build-essential
		ARM提供了Versatile Express平台,可以使用QEMU来模拟开发平台来学习
3、下载内核代码、busybox工具
		linux内核:https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.0.tar.gz
		busybox工具:https://busybox.net/downloads/busybox-1.24.0.tar.bz2
4、对压缩包进行解压
tar -zxvf linux-4.0.tar.gz
tar -vxjf busybox-1.24.0.tar.bz2
		●z:表示使用gzip来解压缩。
		●x:表示从tar文件中提取文件。
		●v:表示显示详细的解压缩过程。
		●f:表示指定要解压缩的文件名。
		●j 表示使用 bzip2 压缩格式

二、使用busybox构建最小文件系统

1.参数设置

cd busybox
export ARCH=arm
export	CROSS_COMPILE=arm-linux-gnueabi-
make	menuconfig

2.menuconfig配置

进入menuconfig后,配置成静态变量
静态编译的话就不需要库文件,但是编译出来的库会很大。动态编译的话要求根文件系统中有库文件,但是编译出来的 busybox 会小很多。

3.make install 编译

	编译完成后,在busybox 根目录下会生成一个 _install 的目录,这个目录是编译好的文件系统需要的一些命令集合

在这里插入图片描述

4.手动补充文件

将该目录拷贝到 linux-4.0 目录下
进入_install 目录,创建 etc 、dev、mnt、etc/init.d/目录
1)/etc 目录
此目录下存放着各种配置文件,大家可以进入 Ubuntu 的 etc 目录看一下,里面的配置文件非常多!
2)/dev 目录
dev 是 device 的缩写,所以此目录下的文件都是和设备有关的,此目录下的文件都是设备文件
3)/mnt 目录
临时挂载目录,一般是空目录,可以在此目录下创建空的子目录,比如/mnt/sd、/mnt/usb,这样就可以将 SD 卡或者 U 盘挂载到/mnt/sd 或者/mnt/usb 目录中。

在这里插入图片描述
在_install/etc/init.d/ 目录下新创建一个 rcS 文件
rcS 是个 shell 脚本,Linux 内核启动以后需要启动一些服务,而 rcS 就是规定启动哪些文件的脚本文件
在这里插入图片描述
在rcS 文件中写入如下内容
在这里插入图片描述
稍微解释一下这些命令的意思:
第1-4行:分别创建 proc、tmp、sys、mnt 目录,-p表示递归创建目录。
第 5 行:使用 mount 命令来挂载所有的文件系统,这些文件系统由文件/etc/fstab 来指定,所以我们一会还要创建/etc/fstab 文件。
第 6 -7行:创建目录/dev/pts,然后将 devpts 挂载到/dev/pts 目录中。
第 8 - 9行:使用 mdev 来管理热插拔设备,通过这两行,Linux 内核就可以在/dev 目录
下自动创建设备节点。关于 mdev 的详细内容可以参考 busybox 中的 docs/mdev.txt 文档。

写完保存退出,给予rcS文件可执行权限:chmod +x rcS
在这里插入图片描述
在 _install/etc 目录下新创建一个 fstab 文件
在这里插入图片描述
写下如下内容
在这里插入图片描述
老规矩,稍微解释一下这个文件的意思:
fstab在 Linux开机以后自动配置哪些需要自动挂载的分区,
格式如下:
在这里插入图片描述
在这里插入图片描述
在 _install/etc/ 目录下创建一个inittab 目录

在这里插入图片描述
写下如下内容:
在这里插入图片描述
解释一下文件内容:
inittab 的详细内容可以参考 busybox 下的文件 examples/inittab。init 程序会读取/etc/inittab
这个文件,inittab 由若干条指令组成。每条指令的结构都是一样的,由以“:”分隔的 4 个段组
成,格式如下:
在这里插入图片描述
在这里插入图片描述
在 _install/dev 目录下创建如下设备节点,需要root权限
在这里插入图片描述

三.编译内核

1、参数设置

在这里插入图片描述
在这里插入图片描述
menuconfig 需要在以下目录中进行更改
在这里插入图片描述
General setup ---->
配置 initramfs,在 initramfs source file 中填入 _install
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

并把 Default kernel command string 清空
在这里插入图片描述
在这里插入图片描述

配置 Memory split 为“3G/1G user/kernel split”
在这里插入图片描述

打开高端内存模式
在这里插入图片描述

2、开始编译kernel

make bzImage -j4 && make dtbs

这条命令的意思是同时编译内核与设备树

可能遇到的问题(如果没有遇到这个问题,可以进行下面的步骤):
include/linux/compiler-gcc.h:107:1: fatal error: linux/compiler-gcc7.h: 没有那个文件或目录
#include gcc_header(GNUC)
在这里插入图片描述
解决办法:

cd linux-4.0/include/linux/
ln -s compiler-gcc5.h compiler-gcc7.h

等待内核及设备树编译完成,具体编译时间需要看机器性能,一般是十多分钟的样子

四、使用QEMU模拟内核运行

运行QEMU来模拟4核 Cortex-A9 的 Versatile Express 开发平台
qemu-system-arm -M vexpress-a9 -smp 4 -m 1024M -kernel arch/arm/boot/zImage -append “rdinit=/linuxrc console=ttyAMA0 loglevel=8” -dtb arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic

在这里插入图片描述

如果你想关闭的话,只需要另外开启一个终端,输入 killall qemu-system-arm ,即可关闭QEMU平台


总结

可以看到,这一节我们成功在ubuntu上运行起来了我们的内核,也从此打开了内核世界的大门,这仅仅是第一步,继续加油,后面的内容更精彩!如果有不懂的内容欢迎评论区交流,如果觉得文章不错的话,麻烦点个赞哦,你们的支持是让我持续更新最好的动力!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值