Debian编译内核[通俗易懂]

Debian编译内核

大家好,又见面了,我是全栈君。

转自

yuzibo博客

http://yuzibo.github.io/DebianBuildKernel.html

最终成功一次了

之前又一次编译了好多次。可惜没有一次成功的,说实话。借助Debian强大的dpkg软件包管理,使得又一次编译内核只像安装软件一样简单,我都认为这不是正宗的编译内核,好了。废话不多说,立即进入主题。

下载内核源码

我没有使用最新的内核源码。用的 3.2.64,我们能够在http://www.lkml.org下载,注意这里我们下载的是.xz文件,须要解压两次。至于源码放在哪里,全然取决于你自己,你想放在哪里就放在哪里,我直接放在在用户主文件夹都能够啊。

解压

xz -d linux-xx (xx就是你下载的内核源码的版本号),这时生成.tar文件,然后

tar -xvf linux-xx

安装所需的软件包

sudo apt-get install kernel-package libncurses5-dev fakeroot build-essential bc

配置内核

这个怎么说呢,在你没有对内核配置选项有个清醒的认识之前。我的建议是使用你本机的默认配置吧,我之前配置失败就是想弄清楚配置选项的每个,结果备受挫折,先看看编译内核是什么样的,以后我们再说这些也不错啊。

cd linux-XX

先进入文件夹。我们如使用默认配置的话,

“cp /boot/config-uname -r .config”,假设我们自己一定要配置,我建议使用make menuconfig

编译内核

make-kpkg clean,略微等一会,我们接着使用fakeroot make-kpkg –append-to-version=.141111 linux-image命令

我们有必要讲讲make-kpkg与fakeroot这两个软件包,前者是能够自己主动替换make dep;make clean;make bzImage;make modules命令序列的脚本,而–append-to-version就是让我们来指定一个额外的内核版本号。这个版本号是成为内核名的一部分,我们能够使用数字,“+”,“,”,可是不能使用“_”,在这里的使用方法我借鉴网上同学的样例,使用当天日期来解决不同的版本号号问题。内核模块位于/lib/modules子文件夹下。每个内核都有它自己的子文件夹,所以每次我们创建新内核时使用新的内核名字,这个包安装程序就会在/lib/modules文件夹下创建一个新的子文件夹来保存它自己的模块。

注意。–resion仅仅会影响Debian软件包本身的名字而不是内核的名字,Debian kernel-image文件的名字格式例如以下:

kernel-image-(kernel-version)(–append-to-version)(–version)(architecture).deb.至于什么是fakeroot这一点我也不是非常清楚。好像是模拟root环境来创建一个kernel-image软件包。

创建Ramdisk

经过漫长的等待后。我们在代码文件夹的上一层文件夹就得到一个linux-image-3.2.64.141111_3.2.64.141111-10.00.Custom_i386.deb的软件包。别急,我们另一步工作须要完好。以下是废话,能够忽略。

我们有一个问题是boot过程中mount根文件系统的“先有鸡还是先有蛋的问题”,一般来说。根文件在形形色色的存储设备上。不同的设备又要不同的硬件厂商的驱动,比方intel的ide/sata驱动,VIA的南桥须要VIA的ide/sata驱动,根文件系统也不同的文件系统的可能,假如把全部的驱动/模块都编译进内核。那自然没问题。可现实(内核的精神或本质)是我们把驱动/模块都驻留在根文件系统本身/lib/modules/xxx,那么“鸡蛋”问题就就来了。要mount根文件系统却须要根文件系统上的文件系统,怎么办?于是,就想出了以下的ramdisk,内核总是能安装ramdisk的(由于ramdisk暂时文件和内核一样,也是由bootloader通过低级读写命令(uboot用nand read。而不用通过系统层提供的高级读写接口)载入进内存,因此内核能够挂载ramdisk文件系统),然后把全部要使用到的驱动/模块都放在ramdisk上,首先,让内核将ramdisk当作根文件来安装,然后再利用这个根文件系统上的驱动来真正安装根文件系统,就将这个问详细攻克了。

补充。有时间你能够到/boot文件文件夹下看看。会有一个initrd.img的文件,initrd大体上就是 包括根文件系统的ramdisk。说了这么多,重点还没有解决,也就是我们须要创建这么一个文件-initrd。将我们新编译的内核在根文件系统挂载前能装进内存。那么,我们该怎么样解决问题呢?首先,使用vi编辑/boot/config-3.2.64.141111文件。将代码CONFIG_DEFCONFIG_LIST=”/lib/modules/$UNAME_RELEASE/.config”__这句话凝视掉(在句首用#),否则我们就不会成功。

接下来运行

mkinitramfs -o /boot/initrd.img-3.2.64.141111 3.2.64.141111

直观上我们能够理解生成目标文件initrd.img-3.2.64.141111,我们做的全部工作你最后在/boot文件夹下会发现的。

更新grub

grub-update

赶快重新启动吧,你就会发如今grub的引导菜单上有自己版本号的内核了。

感谢

首先感谢我女友春春的理解和支持,有她在背后,我感觉非常幸福;这篇文章我重点參考了The blog

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115688.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 利用JDK发布webService实例「建议收藏」

    利用JDK发布webService实例「建议收藏」一、webService的发布1、新建一个webProject2、修改jdk为1.6及以上—-3、编写方法—- packagecom.test.webService;importjavax.jws.WebService;importjavax.xml.ws.Endpoint;@WebServicepublicclass

    2022年7月21日
    18
  • 网络天才网页中文版_akinator官方版下载_akinator中文版在线玩-网络天才中文版下载网页版 – Win7旗舰版…

    《网络天才》(akinator),是一款在线猜谜类网页游戏,游戏将以阿拉伯神灯精灵阿拉丁出题方式展开,让你通过问题才出全部的人的心里想的人物,受到了不少玩家的喜爱。游戏玩法:玩家要想出一个人物,并回答问题,他就会猜到你想的人物。有什么它猜不到的人物都截图来分享吧。游戏原理:此类应用的大致流程都是:用户输入一段话(不一定只是单词)->后端语义引擎对用户输入的语句进行语义解析->推断用户最…

    2022年4月17日
    176
  • webstorm激活码2021(JetBrains全家桶)

    (webstorm激活码2021)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月21日
    314
  • 网页视频下载mp4格式到本地

    发现个网页视频地址下载成mp4格式的资源,分享给大家:git下载地址:​​​​​​​https://gitee.com/tiankf/mp4如果本文对你有帮助还麻烦赞一下,在此感谢啦!

    2022年4月7日
    40
  • Q1营收利润大增,Take-Two如何掘金“次世代”?[通俗易懂]

    Q1营收利润大增,Take-Two如何掘金“次世代”?[通俗易懂]8月3日美股盘后,拥有GTA和2K等知名系列游戏的Take-Two(NASDAQ:TTWO)发布了截至2020年6月30日的2020财年第一季度的业绩报告。财报公布后次日,股价跳空高开,最终股价收于177.52美元,涨幅达5.87%。回顾近期走势,TTWO已连续创下历史新高,可见其一直深受投资者青睐。(图源:雪球)以下为近期核心数据表现:由于全球疫情居家,TTWO受益颇多。本季度无论是营收、净利润,还是各产品的销量均超过市场预期。此次财报有着许多亮点值得深入讨论,而除此之外,也希望随着新品推

    2022年6月7日
    30
  • struts-request 请求参数的生命

    struts-request 请求参数的生命

    2021年8月17日
    60

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号