编译开源软件手记之2--Linux Kernel

本文详细记录了在Ubuntu 10.04环境中从零开始编译Linux 2.6.34.1内核的过程,包括所需软件安装、内核下载与配置、编译与安装步骤及常见问题解决方案。

这是此系列的第二篇文章,记录编译Linux内核的过程。

按说内核的编译本是很简单的过程,但本人第一次编译,还是遇到了一些小问题,记录下来希望可以帮到新手。

 

本文主要参考:

《如何编译一个内核 - Ubuntu方式》

《ubuntu环境下编译内核详解》

《Ubuntu下的 Linux 内核》

《Ubuntu 10.04 编译安装最新版本Linux-2.6.34内核》

 

编译环境是Ubuntu 10.04 64位,kernel: 2.6.32

目标内核版本:2.6.34.1

 

Ubuntu和Debian下有两种编译的方法,一种是传统的make,一种是debian提供的make-kpkg,我用的是后者。

 

过程:

1. 安装所需软件

apt-get install kernel-package libncurses5-dev fakeroot wget bzip2

 2. 下载内核

在kernel.org首页上下载最新的本版

cd /usr/src
sudo wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.34.1.tar.bz2
sudo tar xvf linux-2.6.34.1.tar.bz2
sudo ln -s linux-2.6.34.1 linux   #以后使用方便,可以省略
cd linux

3. 准备工作

据说是第一次可以省略,第二次之后需要执行,没有考证

sudo make mrproper
 

4. 配置内核

由于menuconfg配置复杂,再次使用系统当前的配置:

sudo cp /boot/config-`uname -r` ./.config 
sudo make menuconfig

 选择Load an Alternate Configuration File一项,出现.config文件,这就是我刚才cp过来的,选择OK

 

5. 开始编译

sudo make-kpkg clean
sudo make-kpkg -initrd --initrd --append-to-version=dell1400 kernel_image kernel-headers

对于第二天命令的说明:

1. 此处的dell1400是参考文章中使用的,我本想改成自己的,但不小心多复制了回车,所以就执行了,那就执行了吧,不是原则问题。

2. 此命令比较随意,所以有些文章讲的不太一样。你可以make-kpkg --help看以下,我试过很多中参数的组合,但都有问题,问题在最后安装的时候都没有生成initrd文件,然后grub.cfg里也就没有添加启动项,后面我会介绍如何解决。但此处我认为比较合理的命令应该是

sudo make-kpkg --initrd [--append-to-version <custom>] kernel_image [kernel-headers]

--initrd是针对initrd方式的,但我加和不加,或者向上面用的加两个-initrd --initrd,效果都是一样不能生成initrd文件。

--append-to-version可要可不要,custom是自定义的本版号,ubuntu里一般有generic,就是这个东西。

 headers不要应该也行,就是不生成headers文件,我们不做开发的话不用装headers的。

 

6. 安装新内核

此时生成了两个deb文件(不加headers就只有一个)

cd ..
sudo dpkg -i linux-image-2.6.34.1dell1400_2.6.34.1dell1400-10.00.Custom_amd64.deb

 此时生成几个新的文件在 /boot/ 下。

前面提到,此时没有生成initrd文件,怎么办呢?我本认为是make-kpkg命令使用的问题,所以变化参数执行很多此,每次都要2个小时,很TMD Shit,还是不知道,如果有朋友知道的话告诉我一声。

我看到另外一种用make编译的方法,受到启发,在此时执行

cd linux
sudo mkinitramfs -o /boot/initrd.img-2.6.34

 结果真的生成了,然后在grub.cfg文件中手动添加启动项。

sudo chmod +w /boot/grub/grub.cfg
sudo vim /boog/grub/grub.cfg

 添加项:

menuentry "Ubuntu, Linux 2.6.34.1" {
        insmod ntfs
        set root='(hd0,3)'
        search --no-floppy --fs-uuid --set 9a8c81748c814ba7
        loopback loop0 /ubuntu/disks/root.disk
        set root=(loop0)
        linux /boot/vmlinuz-2.6.34.1dell1400 root=/dev/sda3 loop=/ubuntu/disks/root.disk ro   quiet splash
        initrd /boot/initrd.img-2.6.34
}
menuentry "Ubuntu, Linux 2.6.32-23-generic" {
        insmod ntfs
        set root='(hd0,3)'
        search --no-floppy --fs-uuid --set 9a8c81748c814ba7
        loopback loop0 /ubuntu/disks/root.disk
        set root=(loop0)
        linux /boot/vmlinuz-2.6.32-23-generic root=/dev/sda3 loop=/ubuntu/disks/root.disk ro   quiet splash
        initrd /boot/initrd.img-2.6.32-23-generic
}
 

上面一个所我添加的,下面一个是原来的,只是标题,vmlinuz,initrd文件不同。

 

7. 重启

进入系统之后在终端下执行

uname -r

 查看内核版本号,输出:2.6.34.1dell1400

是新的内核了。

 

虽然可以启动,但启动新内核的时候会报出一些错误,说是找不到modules.dep文件,参考一篇文章的解决方法

sudo su
cd /boot
cp initrd.img-2.6.34 initrd-2.6.34.old (先做一个备份以防万一,哈哈)
depmod -a
update-initramfs -k 2.6.34 -c
cd /tmp
gzip -dc /boot/initrd.img-2.6.34| cpio -id
cp lib/modules/2.6.32.23-generic lib/modules/2.6.34 -r
find ./ | cpio -H newc -o > /boot/initrd.img-2.6.34.new
gzip /boot/initrd.img-2.6.34.new
cd /boot
mv initrd.img-2.6.34.new.gz initrd.img-2.6.34

 错误提示不见了。

 

进入系统之后发现貌似显卡驱动没弄好。拖动窗口会闪。

 

还有两个新的体验:

    在终端里敲tab键,声音好听了一些;

    重启的时候快了一些,没有提示说要重启了之类的。

其他地方是不是有变化,是不是快些,我还没测试。

 

就此结束。

 

本人新博客:tuoxie.me

 

采用PyQt5框架与Python编程语言构建图书信息管理平台 本项目基于Python编程环境,结合PyQt5图形界面开发库,设计实现了一套完整的图书信息管理解决方案。该系统主要面向图书馆、书店等机构的日常运营需求,通过模块化设计实现了图书信息的标准化管理流程。 系统架构采用典型的三层设计模式,包含数据存储层、业务逻辑层和用户界面层。数据持久化方案支持SQLite轻量级数据库与MySQL企业级数据库的双重配置选项,通过统一的数据库操作接口实现数据存取隔离。在数据建模方面,设计了包含图书基本信息、读者档案、借阅记录等核心数据实体,各实体间通过主外键约束建立关联关系。 核心功能模块包含六大子系统: 1. 图书编目管理:支持国际标准书号、中国图书馆分类法等专业元数据的规范化著录,提供批量导入与单条录入两种数据采集方式 2. 库存动态监控:实时追踪在架数量、借出状态、预约队列等流通指标,设置库存预警阈值自动提醒补货 3. 读者服务管理:建立完整的读者信用评价体系,记录借阅历史与违规行为,实施差异化借阅权限管理 4. 流通业务处理:涵盖借书登记、归还处理、续借申请、逾期计算等标准业务流程,支持射频识别技术设备集成 5. 统计报表生成:按日/月/年周期自动生成流通统计、热门图书排行、读者活跃度等多维度分析图表 6. 系统维护配置:提供用户权限分级管理、数据备份恢复、操作日志审计等管理功能 在技术实现层面,界面设计遵循Material Design设计规范,采用QSS样式表实现视觉定制化。通过信号槽机制实现前后端数据双向绑定,运用多线程处理技术保障界面响应流畅度。数据验证机制包含前端格式校验与后端业务规则双重保障,关键操作均设有二次确认流程。 该系统适用于中小型图书管理场景,通过可扩展的插件架构支持功能模块的灵活组合。开发过程中特别注重代码的可维护性,采用面向对象编程范式实现高内聚低耦合的组件设计,为后续功能迭代奠定技术基础。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值