中易网

如何制作内核deb包

答案:1  悬赏:50  
解决时间 2021-02-17 22:09
如何制作内核deb包
最佳答案
背景:
在Ubuntu Linux 环境下,我们编译Linux内核时,通常要经历的步骤:配置内核--config的配置;编译内核和模块--“make”、“make modules”、“make modules_install”、“make install”,如果前面的配置没有问题,需要等待一段时间就可以编译好模块和内核了;生成initramfs并配置Grub--经过第二个步骤的“make install”,kbuild系统会把生成的内核镜像拷贝到INSTALL_PATH路径下(默认这个路径是/boot),但这时并不能使用,我们必须配置手动Grub才可以。另外,还要会使用initramfs来做引导之用,我们还需要为我们的新内核手动生成initramfs镜像。
从上面步骤来看,稍显繁琐。在实际工作中,我碰到这样一个情况,做的产品跟Ubuntu10.04 64bit的内核因为某些原因存在冲突。需要先把Linux系统的内核重新配置好,再编译,才可以完整安装开发的产品,而目前产品交付给客户的时候,是需要客户根据指导书进行内核的重新编译后,再安装开发的产品,这样带来很多的不方便。

解决方法:
1、我们可以使用make-kpkg简化这个流程,而且还能带来其他额外的好处
2、make-kpkg可以使内核deb化安装,在交付客户产品的时候,可以直接给予deb进行dpkg安装就可以进行内核的替换安装,从而带来极大的便捷。
3、下面用一个例子,来简单讲解如何制作内核deb包,事先要装好kernel-package、build-essential包。
4、准备一个内核源码包,解压出来
root@huang-VirtualBox:/usr/src# ls
linux-3.4.6 linux-headers-3.0.0-22
linux-3.4.6.tar.bz2 linux-headers-3.0.0-22-generic
5、进入源码目录,将配置文件配置好。这里为了示例,我用原来系统的config配置文件,将/boot下的config文件拷贝到当前目录,然后用make-kpkg进行出包。

root@huang-VirtualBox:/usr/src/linux-3.4.6# cp /boot/config-3.0.0-22-generic ./.config
root@huang-VirtualBox:/usr/src/linux-3.4.6#make-kpkg --initrd kernel-image
###编译的过程,挺久的
###make-kpkg命令的简单使用介绍
###通常我们会看到这样的命令
###make-kpkg --initrd --revision huang.001 --append-to-version -20110107 kernel_image
###--initrd选项会让make-kpkg自动帮我们生成initramfs;
###--revision会给生成的deb文件加上一个版本信息。这个参数只是影响到文件名,如果不指定,默认会是“10.00.Custom”;
###--append-to-version也是一种版本信息,它不仅出现在deb安装包的文件名里,也会影响到kernel的名称,比如本例中,内核更新完成之后,用“uname -r”察看会得到“3.4.6-20110107”,不指定的话,默认内核版本号;
###kernel_image表示生成内核和默认模块的安装包,另外您也可以加上kernel_headers,这样make-kpkg会再生成一个内核头文件的安装包。
###本例中make-kpkg --initrd kernel-image
###产生的deb包为linux-image-3.4.6_3.4.6-10.00.Custom_i386.deb

root@huang-VirtualBox:/usr/src# ls
linux-3.4.6linux-headers-3.0.0-22linux-image-3.4.6_3.4.6-10.00.Custom_i386.deb
linux-3.4.6.tar.bz2linux-headers-3.0.0-22-generic
###是不是就这样直接安装deb就好了,完成内核的安装替换了呢
###这里我碰到了一个问题,/boot目录下没有生成initrd.image文件,只有vmlinuz文件,怎么回事呢,有问题就得解决么,继续谷歌,百度么
###google了一把,找到资料说ubuntu10.04开始,用上面命令生成deb包,安装后不会生成initrd,说kernel-package作者是故意这样做的,现在是要通过hook来完成initrd的生成,没办法我刚好是ubuntu10.04之后,继续解决
###需要copy一个initramfs脚本到你要安装的rootfs的/etc/kernel/postinst.d/ 目录里,然后在安装kernel的时候post-install脚本会通过hook来完成initrd 的生成

root@huang-VirtualBox:/usr/src#cp /usr/share/kernel-package/examples/etc/kernel/postinst.d/initramfs/etc/kernel/postinst.d/
###拷贝过来,保持此目录下只有此脚本,下面对deb进行安装
###直接dpkg -i linux-image-3.4.6_3.4.6-10.00.Custom_i386.deb
###安装完去看一下?

root@huang-VirtualBox:/boot# ls
initrd.img-3.4.6System.map-3.4.6vmlinuz-3.4.6 config-3.4.6
###看到没!!!!!!这里省略了其他信息,再看看grub信息??
root@huang-VirtualBox:/boot#cat grub/grub.cfg
menuentry 'Ubuntu, with Linux 3.4.6' --class ubuntu --class gnu-linux --class gnu-
-class os {
recordfail
set gfxpayload=$linux_gfx_mode
insmod gzio
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set=root be22009d-e2b0-40c5-b179-7f19a900c758
linux /boot/vmlinuz-3.4.6 root=UUID=be22009d-e2b0-40c5-b179-7f19a900c758 ro quiet splash vt.handoff=7
initrd/boot/initrd.img-3.4.6
}
menuentry 'Ubuntu, with Linux 3.4.6 (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod gzio
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set=root be22009d-e2b0-40c5-b179-7f19a900c758
echo'Loading Linux 3.4.6 ...'
linux /boot/vmlinuz-3.4.6 root=UUID=be22009d-e2b0-40c5-b179-7f19a900c758 ro recovery nomodeset
echo'Loading initial ramdisk ...'
initrd/boot/initrd.img-3.4.6
}
###有木有!!!!成功了,有木有,呵呵,省略了其他信息
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
因自行车摆放不整齐的检查800字
电路板排线为什么没有直角的
ios10.0.2其他项太大了,如何整理
广州医学院临床医学
体重150斤,卧推,深蹲,硬拉要多少重量
华展大酒店停车场(出入口)地址在什么地方,我
请问重庆医科大学老校区都要搬到大学城吗?
用u盘直接在pc上启动mac系统吗
干扰素是什么分泌的?效应T细胞吗?白细胞里
芜湖永旭不锈钢有限公司地址在哪,我要去那里
世纪红SjH1404型轮式拖拉机多少线一台?
柴油发动机上每钢的活塞连杆和其他钢的连杆有
闺蜜跟他男朋友说了很伤人的话 我该怎么安慰
广州有哪个地方摄影是拥有比较顶级的团队的?
临沂市罗庄区沂堂镇计生委主任张兆瑞滥用职权
推荐资讯
三角形已知两点坐标求第三点坐标
乐瑜伽(广州东站店)这个地址在什么地方,我要
陈家湾林场在什么地方啊,我要过去处理事情
求购设计图
已知单片机主频12MHZ,在P1.0输出频率为50HZ
夏利怠速步进电机开路或短路是什么意义?!怎
侠盗飞车圣安地列斯关于鼠标旋转视角与以往不
西沃刘光军卤肉在什么地方啊,我要过去处理事
高二物理分子动理论
佐客牛排自助餐厅塘沽店这个地址在什么地方,
景宝生活超市这个地址在什么地方,我要处理点
我小的时候被狗咬到了当时也没去医院现在已经
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?