前言

学习Linux内核是一件振奋人心的事情,而在学习伊始对Linux内核的成功编译并运行一个mini版的文件系统也更会燃起更足的动力去钻研。本文从下载并编译Linux内核、编译busybox、制作一个最小的根文件系统,最后用qemu启动你编译好的内核和根文件系统 ,初步感受Linux内核的魅力所在。

Linux用途广泛,包含的内容也琳琅满目。Linux系统的基础是内核、C库、工具集合系统的基本工具(如登录程序和Shell)。应用程序通过system call陷入内核,内核又通过驱动程序来与硬件交互。

应用程序、内核和硬件的关系

首先明确两点:

  1. 配置内核就是你来决定编码哪些代码;
  2. 编译内核就是生成可执行文件的一个过程。

再明确内核文件的产物名称:

  • vmlinux:原始的,未经压缩的内核可执行文件
  • zImage:压缩过的可执行文件——压缩vmlinux后,加上一个head part(用来解压)
  • uImage:用于给uboot引导的zImage
  • bzImage:即bigzImage ,通过gzip压缩的

好了,明确了上述几点,就可以开始实验了。本文的实验环境如下:

  • Linux系统:ubuntu 14.04
  • linux源码版本:linux-4.9.229
  • busybox源码版本:busybox-1.30.0
  • qemu-system-x86_64版本:2.0.0

1.下载并编译Linux内核

https://www.kernel.org/

下载并解压后,进入目录。

1.指定硬件体系架构

为了演示方便,选用了x86架构,如果编译arm则需要再下载对应的toolchain。

$ export ARCH=x86

2.配置board config

$ make  x86_64_defconfig

3.配置内核

这一步其实是对第2步的进行微调,这里我们使用基于ncurse库编制的图形界面工具:

$ make menuconfig

如果执行该命令时出现:

原因:缺少ncurses dev工具

sudo apt-get install libncurses5-dev

如果需要内核支持ramdisk驱动,需要选中如下配置:

General setup  --->----> [*] Initial RAM filesystem and RAM disk (initramfs/initrd) supportDevice Drivers  --->[*] Block devices  ---><*>   RAM block device support(65536) Default RAM disk size (kbytes)

4.编译内核

$ make -j8

编译成功后的内核位于:arch/x86_64/boot/bzImage

至此,内核编译完成。

2.编译busybox

什么是busybox?

busybox号称“嵌入式Linux的瑞士军刀”。BusyBox工具小巧高效,可以替代一大批常用的标准Linux命令行工具,功能有所简化,非常适合资源有限的嵌入式平台。BusyBox是模块化且高度可配置的,可以对其进行裁剪以满足特定需求。

在如下链接下载busybox:

https://busybox.net/downloads/busybox.net/downloads/

我们以busybox-1.30.0作为实验对象。

下载之后解压并进入该busybox目录开始配置并编译。这里把busybox配置为静态编译,这样不依赖其他动态库比较容易操作和演示。编译则似曾相识,与编译内核的指令是一样的!

$ make menuconfigBusybox Settings  --->Build Options  --->[*] Build BusyBox as a static binary (no shared libs)

配置完之后进行编译和安装

$ make && make install

make是编译busybox,make install是为了在对应目录中编译安装一系列的工具。

编译完成后的busybox就安装在源码根目录下的_install目录了。

总结

至此,我们对Linux内核和busybox进行了配置和编译。光编译肯定不过瘾,下一讲来演示如果基于busybox制作一个简单的文件系统,并通过qemu模拟器运行Linux,真正的让内核工作起来!

如何编译Linux内核源码?相关推荐

  1. Redhat7.2上编译Linux内核源码

    下载linux源码包:https://git.kernel.org/pub/scm/virt/kvm/kvm.git/snapshot/kvm-4.17-1.tar.gz (这是包含kvm开发版本的l ...

  2. debian 编译linux内核源码,Debian下为本机编译内核模块的方法

    改用Debian之后发现用之前在Red Hat下编译内核模块的Makefile不好使了,原因是在/lib/modules/`uname -r`/下没有了build目录,也没有内核的源代码.上网查了一些 ...

  3. debian 编译linux内核源码,安装debian总结以及编译linux内核

    1. 安装debian 使用unetbootin(http://unetbootin.sourceforge.net/)来创建启动盘,并且下载debian的基本包. 将磁盘进行压缩操作,并且保留出一个 ...

  4. 最小的linux内核代码,带你阅读linux内核源码:下载源码、编译内核并运行一个最小系统...

    要学习linux内核,先要能够编译内核,还需要了解内核如何启动根文件系统.这样你才能在修改linux内核代码之后,完成验证的过程. 本文教你完成下列过程: 1.下载linux并编译linux内核源码 ...

  5. linux内核开发基础(linux内核源码、树莓派源码编译、SD卡挂载)

    首先下载树莓派linux内核源码: 下载网址:https://github.com/raspberrypi/linux 在树莓派使用指令:uname -r查看当前树莓派的版本号,然后选择对应的linu ...

  6. 【linux内核-源码编译之centos7】

    linux内核-源码编译之centos7 一. 为什么要编译内核 二.疑难杂症 三.演示环境 四.下载源码 4.1.两者源码区别 4.2.将获取到的源码放在/usr/src/kernels/ 下 五. ...

  7. ARM树莓派高级开发——linux内核源码、树莓派源码编译、SD卡挂载

    文章目录 linux内核开发基础(linux内核源码.树莓派源码编译.SD卡挂载) 树莓派等芯片带操作系统的启动过程 linux内核源码树 Linux内核源代码目录树结构: 树莓派Linux源码配置 ...

  8. 编译linux源码报错,记录一次Linux内核源码编译实验

    记录一次Linux内核源码编译实验 文章目录 记录一次Linux内核源码编译实验 0. 实验环境 1. 选择.下载内核源码 2. 安装必要的依赖软件以及性能要求 3. 解压.配置和编译内核源码 3.1 ...

  9. xilinx linux内核,Xilinx-Zynq Linux内核源码编译过程

    本文内容依据http://www.wiki.xilinx.com网址编写,编译所用操作系统为ubuntu 14 1.交叉编译环境的安装配置 2.uboot的编译 1)下载uboot源代码 下载uboo ...

  10. 【Linux 内核】编译 Linux 内核 ② ( 解压内核源码 | 查询当前 Linux 内核版本号 | 进入并查看 linux 内核源码目录 )

    文章目录 一.解压内核源码 二.查询当前 Linux 内核版本号 三.进入并查看 linux 内核源码目录 一.解压内核源码 将 下载的 Linux 内核源码 linux-5.6.14.tar.gz ...

最新文章

  1. spring mvc DispatcherServlet详解之interceptor和filter的区别
  2. 初等数论--同余方程--同余方程运算:模逆运算,模指数运算
  3. python设置函数执行时间
  4. Effective C++ 条款11:在operator=中处理自我赋值
  5. 【转载】不带www跳转www.设定网站唯一入口,提升权重!
  6. 刷抖音看到 Python 工程师的工资条后,我沉默了...
  7. python找数字程序_程序以查找Python中从1到N的所有缺失数字
  8. AES SBox的构造(python)
  9. 线性表的基本操作Basic operation of SequenceList
  10. 一般处理程序里使用session对象为null,未将对象引用到实例化
  11. 松下PLC连接海创-IIoT平台案例
  12. vbs返回结果给java_返回vbs脚本
  13. vs2015 使用Qt语言家及其使用过程中遇到的问题
  14. win10微信卡顿_终于找到Win10卡顿病根了!看完秒懂
  15. C语言刷题训练营-第一讲
  16. Android大举进入智能电视领域
  17. golang操作chromedp模拟浏览器基础入门
  18. 10首现代诗歌欣赏:什么是孤独
  19. 【前瞻】Nature:2022年7大“颠覆性”技术
  20. php关于页面卡顿问题

热门文章

  1. 四大家族机器人资料免费送!赶快来下载
  2. python代码求和_python求和代码
  3. 工作小记20201017-hive或inceptor相关
  4. 国庆蓝牙耳机最强选购攻略,2020不容错过的精品蓝牙耳机
  5. Spring(16) 获得bean的id
  6. 程序设计导引(四)[终结篇]
  7. java爬虫(二)- Jsoup
  8. LINUX系统使用锐捷客户端认证校园网(华中科技大学)
  9. 使用C语言--判断素数的两种方法
  10. java并发编程实战