导航:首页 > 源码编译 > linux内核编译视频教程

linux内核编译视频教程

发布时间:2025-01-16 18:49:05

linux内核编译,使用qemu启动

本教程旨在引导您完成Linux内核和busybox的编译,以及使用QEMU启动内核的过程。为了确保学习的流畅性,建议在VirtualBox运行的Ubuntu 22.04.3 LTS上测试本教程。理解makefile的原理和使用方法将有助于您更好地执行后续的“make”命令

首先,准备编译所需的文件和环境。新建文件夹存放所有文件,并下载Linux内核源码(版本6.7.5)和busybox源码(版本1.36.1)。解压这些压缩包,确保目录结构清晰。将这些文件放置在新建的文件夹内,本教程中将此文件夹称为“主目录”,以方便描述。

接下来,开始编译Linux内核。在“主目录”中,确保已安装所有必要的依赖项。使用命令“make -j8”在Linux内核文件夹下运行编译命令(注意:此命令需在“linux-6.7.5”文件夹下执行,且电脑CPU为i5-13400,虚拟机分配8个核心)。对于AMD 7840hs真机,使用“make -j12”命令,编译时长约为1分钟。编译成功后,内核会生成名为“bzImage”的文件,记住其输出路径,后续步骤将使用到。

在完成内核编译后,紧接着编译busybox。无需额外依赖,直接执行编译过程。在“busybox-1.36.1”文件夹下运行命令,选择静态二进制构建选项以确保内核精简性,以便在QEMU上运行。快速编译完成后,生成的文件位于“busybox-1.36.1/_install”目录下。

接下来,安装QEMU模拟器。安装完成后,准备制作文件系统,以运行内核。在“busybox-1.36.1/_install”目录下,选择一种制作文件系统的方式:一种是快速但会丢失更改,另一种是麻烦但可保存更改并永久存储。首先实现快速方式。

在“busybox-1.36.1/_install”目录下,找到并使用initramfs.cpio.gz文件。在“主目录”中启动QEMU模拟器。运行过程中,可以通过命令行输入简单命令验证系统功能。尝试新建文件并关闭系统,重启后发现文件消失,因为内存系统在重启后会清空。

为了实现永久保存数据功能,分配磁盘文件并制作一个磁盘文件。在“主目录”内运行相关命令,创建磁盘文件后,内核操作磁盘的数据将被永久保存。再次运行模拟器并验证文件持久性。

为了简化后续操作,提供了一个makefile文件,放置在“主目录”下。运行该makefile启动命令,方便管理和操作。

Ⅱ linux怎么编译进驱动进内核

在Linux内核中增加程序需要完成以下三项工作:
1. 将编写的源代码复制到Linux内核源代码的相应目录;
2. 在目录的Kconfig文件中增加新源代码对应项目的编译配置选项;
3. 在目录的Makefile文件中增加对新源代码的编译条目。

以bq27501驱动编译到内核中为例,具体步骤如下:
1. 首先将bq27501驱动代码文件夹复制到ti-davinci/drivers/目录下。确定bq27501驱动模块应在内核源代码树中处于何处。设备驱动程序存放在内核源码树根目录drivers/的子目录下,按照类别、类型等有序地组织。
2. 在bq27501目录下新建一个Makefile文件,向里面添加代码:obj-$(CONFIG_BQ27501)+=bq27501.o,此时构建系统运行将进入bq27501目录下,编译bq27501.c为bq27501.o。
3. 在bq27501目录下新建Kconfig文件,添加代码:menu "bq27501 driver" config BQ27501 tristate "BQ27501" default y ---help--- Say 'Y' here, it will be compiled into the kernel; If you choose 'M', it will be compiled into a mole named as bq27501.ko. endmenu。
4. 修改drivers目录下的Kconfig文件,在endmenu之前添加一条语句“source drivers/bq27501/Kconfig”。对于驱动程序,Kconfig通常和源代码处于同一目录。若建立了一个新的目录,而且也希望Kconfig文件存在于该目录中的话,那么就必须在一个已存在的Kconfig文件中将它引入,需要用上面的语句将其挂接在drivers目录中的Kconfig中。
5. 修改drivers目录下的Makefile文件,添加“obj-$(CONFIG_BQ27501) +=bq27501/”。这行编译指令告诉模块构建系统在编译模块时需要进入bq27501子目录中。此时的驱动程序的编译取决于一个特殊配置CONFIG_BQ27501配置选项。
6. 修改arch/arm目录下的Kconfig文件,在menu "Device Drivers……endmenu"直接添加语句“source "drivers/bq27501/Kconfig"”。

注意:此处的文件组织规则并非绝对不变,例如:USB设备也属于字符设备,也可以存放在drivers/usb/目录下。在drivers/char/目录下,在该目录下同时存在大量的C源代码文件和许多其他目录。所有对于仅仅只有一两个源文件的设备驱动程序,可以直接存放在该目录下,但如果驱动程序包含许多源文件和其他辅助文件,那么可以创建一个新子目录。bq27501的驱动是属于字符设备驱动类别,虽然驱动相关的文件只有两个,但是为了方便查看,将相关文件放在了bq27501的文件夹中。在drivers/char/目录下增加新的设备过程比较简单,但是在drivers/下直接添加新的设备稍微复杂点。所以下面首先给出在drivers/下添加bq27501驱动的过程,然后再简单说明在drivers/char/目录下添加的过程。

在完成上述步骤后,需要重新编译内核。使用如下命令:
make menuconfig
make
make moles_install
make install

最后,需要在/boot/grub/grub.cfg文件中添加启动项,以便在启动时选择新的内核版本。编辑grub.cfg文件,添加如下内容:
menuentry "Linux-4.19.75" {
linux /boot/vmlinuz-4.19.75 root=/dev/sda3
initrd /boot/initramfs-4.19.75.img
}

保存并退出编辑器,然后运行update-grub命令以更新GRUB配置。重启系统,选择新的内核版本启动,验证bq27501驱动是否成功编译到内核中。

阅读全文

与linux内核编译视频教程相关的资料

热点内容
python少儿编程图 浏览:747
命令方块解禁 浏览:930
海康威视服务器地址和设备标识 浏览:298
做网站用php还是html 浏览:199
脸部识别算法模型厂家 浏览:176
反编译的程序带注释吗 浏览:713
安装软件服务器未响应怎么解决 浏览:531
阀门开度单片机 浏览:568
python多线程有什么坑 浏览:681
程序员从互联网跳槽到银行里 浏览:244
百度网盘资源解压后暂不支持在线 浏览:220
android自动化环境 浏览:253
androidrealm加密 浏览:513
地图正在解压缩是什么意思 浏览:217
电脑软件能放在文件夹吗 浏览:786
uc服务器怎么打开 浏览:363
net怎么编译 浏览:244
我的世界187服务器地址ip 浏览:955
拍卖房价的算法 浏览:440
linux内核编译视频教程 浏览:885