菜鸟编译Linux内核  http://linux.chinaunix.net/bbs/viewthread.php?tid=208791

linux内核编译过程的最终总结版http://www.linuxsir.org/bbs/showthread.php?t=109174

ubuntu 9.04 linux 2.6.32.2 内核编译 http://blog.csdn.net/liu_chunhai/archive/2010/01/06/5139081.aspx


一、下载源代码和编译软件的准备
下载内核源代码:http://www.kernel.org/

代码:
$cd ~
$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.1.tar.bz2

安装有关编译程序。安装make ,gcc, make-kpkg,运行menuconfig等等和编译内核相关的工具。

代码:

$sudo  apt-get install build-essential kernel-package   libncurses5-dev

二、解压源代码

代码:

$ mkdir src && tar jfx linux-2.6.32.1.tar.bz2 -C src/

现在,源代码就在 ~/src/linux-2.6.25.10
进入源代码的目录,准备下一步的工作。后面都在这个目录里面进行。

代码:
$ cd ~/src/linux-2.6.25.10

三、开始编译前的准备工作。
首先,清理以前编译时留下的临时文件。如果是刚刚解开的包,不需要执行这步。如果是第二次或者是第n次编译,那么一定要执行。
相关命令如下:

代码:
$ sudo make mrproper

网上很多教程上说把现在使用的内核的config拷贝过来参考,据实验,是不需要的,ubuntu还有
debian会自动做这步。不过这条命令倒是可以学习一下。当然你可以将以前的配置拷贝过来。
命令:

代码:
cp /boot/config-`uname -r` ./.config

四、开始配置内核选项。

  • 进入解压后源码目录里边,make menuconfig或是make xconfig(如果你启用了x window的话)
  • 如果需要在当前配置的基础上进行内核定制可使用配置窗口中的Load an Alternate Configuration File去/boot目录下读取当前内核配置文件
  • 相关命令:

    代码:
    $sudo make menuconfig

    配置用到的键只有几个,esc退出菜单;空格改变选项状态;光标键上下左右移动,回车选定。
    选项意义:M是编译成可以随时加入的模块,*是编译进入内核,空就是不要。
    配置选项非常多,具体配置可以参考金步国先生翻译的资料:Linux 2.6.19.x 内核编译配置选项。
    参考网址:http://lamp.linux.gov.cn/Linux/kernel_options.html
    为了一次成功,请大家遵循一个原则,如果你自己使用的内核已经选用了某个选项,如果你没用充分的理由,不要随便改动。这样虽然内核不那么精简,但是不容易出现问题。
    我们可以精简的部分是硬件模块部分,对于自己没有的硬件要毫不犹豫的清除。
    如果你很执着,或者你有洁癖,你也可以一项项对过去,按照金步国先生的资料描述去选择基本上没有问题。

    五、必须强调的几个选项:
    1、 在“General setup”里面的“Prompt for development and/or incomplete code/drivers”金步国认为是不需要。但是如果你的硬件比较新,那几乎是必须选的,这样,我们才可以找到4965无线网卡,alsa声音驱动等 等。
    Kernel log buffer size 我选15,双核。如果你用ia64,要选16。
    Control Group support 集群支持?可以不要
    Choose SLAB allocator (SLUB (Unqueued Allocator)) 内存管理模式slab和slub选择slub。

    2、在“Block layer”里,假如没有2TB的硬盘,就去掉:Support for Large Block Devices 。Support for Large Single Files 也不需要,谁有2TB的文件?

    3、Processor type and features中是关于cpu的,要认真选。
    Symmetric multi-processing support是打开多核的开关,我的cpu是双核的,选中。
    Processor family (Core 2/newer Xeon) 我的是Core 2/newer Xeon。找到自己的cpu后,把Generic x86 support选项取消。
    Subarchitecture Type 选(PC-compatible)
    Maximum number of CPUs 输入自己的核心数目,我输入2。
    SMT (Hyperthreading) scheduler support说的是超线程技术,P4有支持的,我的t8100不支持,目前大部分市场上的家用cpu都不支持。
    High Memory Support (4GB) 1G以下选1G;我是3G,选4G;4G以上的选16G
    在“ Timer frequency ”里,默认是250Hz,较新的cpu都可以选择了1000Hz,性能更好。

    4、Power management options中把APM (Advanced Power Management) BIOS support关闭。现在的电脑都用acpi了。
    CPU Frequency scaling 是笔记本cpu节电技术
    Default CPUFreq governor (conservative) cpu节电模式有四个,笔记本默认选conservative比较好。
    ACPI Processor P-States driver 必须选,不然CPU Frequency就不能用。
    后面的可选自己硬件相关的,我选的是Intel Enhanced SpeedStep和 Intel Speedstep on ICH-M chipsets,其他的统统消灭。

    5、Bus options的选择:
    Bus options (PCI, PCMCIA, EISA, MCA, ISA)
    PCI support
    PCI Express support 现在新买的机器基本上都是PCI Express了
    ISA support 较新的新机器没有ISA设备,可以去掉
    MCA support 去掉
    NatSemi SCx200 support 去掉
    PCI Hotplug Support
    Support for PCI Hotplug (EXPERIMENTAL) 如果没有PCI热插拔设备,去掉
    这里的选项可以考虑全部编译进内核,而不是以模块形式存在。

    6、Device Drivers是重点,由于linux不但面向个人工作站,更多的是面向服务器的应用,所以可以把自己机器上没有的硬件全部去掉,而不用面面俱到。但是通用型的选项要慎重。

    比如在网卡的部分,除了我的千兆网卡 Broadcom Tigon3 support和4965无线网卡Intel Wireless WiFi 4965AGN,其余的硬件支持统统去掉。

    再比如声卡部分,我的是hd声卡,我只是在PCI devices中,选intel hd 声卡,再选Build IDT/Sigmatel HD-audio codec support,除此之外的硬件支持全部去掉。
    声 卡还有一个细节,在ubuntu7.10里面, 需要在/etc/modprobe.d/alsa-base后面添加options snd-hda-intel probe_mask=1 model=3stack,这样我的笔记本喇叭才可以发声,不然只有外接耳机或者音箱。这次编译以后,这个动作就不必了,但是两个耳机插口只有一个可以用 了。

    再比如我的电脑中没有agp,就可以直接把agp相关的选项全部取消。

    要注意的:
    ATA/ATAPI/MFM/RLL support
    Include IDE/ATA-2 DISK support 如果你的/boot是放在IDE硬盘上,那么这里一定要选*,选M都不行。否则启动时会出现“waiting for root file system”的提示而停滞不前。
    SCSI emulation support 要用刻录机,必须选。

    SCSI device support 现在都是SATA硬盘,一定要选*
    SCSI disk support 如果你的/boot放在SATA硬盘上,一定要选*。
    SCSI CDROM support 虽然康宝刻录机是ide接口的,但是必须把它当成scsi接口的,这是老问题了。用刻录机,必须选。

    Graphics support
    Support for frame buffer devices 选中,进入选择
    VESA VGA graphics support 选上,不然字符界面启动会有问题,
    后面的显卡选择:由于我的显卡是nvidia 8400gs,要自己安装nvidia公司的驱动,所以一个都没有选。这样导致ubuntu开机动画会出问题,我索性在grub中的splash字符全部删除,把开机动画关闭。字符界面很正常。

    Console display driver support 有人开机后字符控制台错误,就是这部分选项没有选,出问题了。
    Framebuffer Console support 需要打开。
    Bootup logo 开机图标,会在自检的画面上加上个性图标。需要在grub上添加“vga=”的选项,可以参考http://dotimes.com/articles /t23-slackware-framebuffer.html

    7、File systems
    Filesystem in Userspace support 简称fuse。是必选的,如果你要用windows分区。

    CD-ROM/DVD Filesystems
    ISO 9660 CDROM file system support 一般选*
    DOS/FAT/NT Filesystems
    VFAT (Windows-95) fs support 有FAT32分区就选*吧
    NTFS file system support 有NTFS分区就选*吧
    NTFS write support 如果想对 NTFS分区进行写操作,选*

    必须将启动盘的文件系统编译进内核,默认是编译成模块,这样无法启动系统。ubuntu采用的文件系统是ext3,请把ext2,ext3相关的必要选项都编译进入内核。

    8、Virtualization这个大类是我多花几百元买t8100的主要原因,因为t8100支持intel vt技术
    使linux上的虚拟机的性能大幅度提高。这里的选项我除了amd的,其他都编译成模块。

    9、全部设置完成,最后一项是保存设置。
    按照我的习惯,先在上一层目录保存一个备份,文件名类似 ../config20080630
    然后再保存到当起目录,文件名 .config
    退出设置程序。

    六、开始编译内核。
    ubuntu的工具是make-kpkg,和其他的发行版相比,步骤相对简单。
    相关命令:

    代码:
    $sudo make-kpkg clean
    $sudo make-kpkg --initrd --append-to-version=-custom0 kernel_image kernel_headers

    这里使用了append-to-version构建多重镜像映射,等号后边为新内核映像的名字,要以-开头(要以数字结尾,中间只能有字母或数字)

    七、安装内核
    编译完成就是安装工作。编译好的内核在上一层目录。包括linux-headers-...-_i386.deb和linux-image-...-i386.deb两个文件,如果你不搞开发的话,只要安装内核就可以,头文件以后要用的时候再说。
    安装相关命令:

    代码:
    $ cd ..
    $ sudo dpkg -i   linux-image-(按tab键)

    文件名很长,如果不用tab自动补足是不可能的,tab键万岁。
    安装完成后和老内核比较一下大小

    代码:
    $ ls -l /boot/

    八、重新启动验证新内核。

    代码:
    $ sudo reboot

    九、显卡驱动
    如果你的显卡和我一样是nvidia显卡,启动之后往往无法正常进入x-window。即使能看到gdm登录界面,效果也是很差的。
    那么就要安装nvidia驱动。
    用ctrl+alt+f1 进入字符命令行,输入用户名,密码登录。
    命令:

    代码:
    下载驱动
    $ wget http://us.download.nvidia.com/XFree86/Linux-x86/173.14.12/NVIDIA-Linux-x86-173.14.12-pkg1.run

    $sudo -s
    输入密码取得超级权限。
    #ps ax
    看看和gdm相关的进程,把这些进程全部关闭;用sudo /etc/init.d/gdm stop有可能有一个进程没有关闭:
    #kill 进程号
    然后安装nvidia显卡驱动,当然驱动要先下好,到nvidia驱动所在的目录里,运行:
    # sh ./NVIDIA-Linux-x86-173.14.12-pkg1.run

    重新启动以后就ok。要用nvidia的驱动,每次升级内核都要这么做。

    十、无线网卡
    相关的内核选项是
    Networking --->
    Wireless --->
    Generic IEEE 802.11 Networking Stack (mac80211)
    还有4965的驱动。

    4965 无线网卡驱动虽然已经编入内核,但没有firmware无法使用。需要把原来内核的firmware拷贝到新内核对应的目录,名字和内核一致,我的内核是 linux-image-2.6.25.10dell1400,那建的目录名就是2.6.25.10dell1400。

    代码:
    具体命令:
    $ cd /lib/firmware/
    $ sudo mkdir 2.6.25.10dell1400
    把你的老内核中的4965的firmware拷贝过来。
    $ sudo cp 2.6.24-16-generic/* 2.6.25.10dell1400/

    上面的命令和下面的命令是等价的:
    $ cd /lib/firmware/
    $ sudo cp -R 2.6.24-16-generic/  2.6.25.10dell1400/

    重新启动系统,无线网卡就正常了。

    附编译使用的机器配置:dell vostro 1400,t8100,nvidia 8400cs显卡,内置SigmaTel STAC9228芯片的声卡,4965无线网卡,BCM5906M千兆网卡,3G内存,160G硬盘,combo刻录。
    编译系统版本:ubuntu 8.04桌面版.

    这篇文章的题目是Ubuntu内核编译,其原因就是Ubuntu下如果按照常规的make、make module_install和make install方式编译内核的话似乎不会直接生成initrd文件……

    参照这个BLOG的文章(http://blog.theosoft.net/article.asp?id=57 )你需要使用initramfs-tools工具手动添加引导信息,为防止该BLOG以后或有个别人无法访问的情况出现,摘录内容如下:

    ------------------------------------------------------华丽分割线------------------------------------------------

    然后添加引导信息,不过之前还是要装一个组件initramfs-tools,装完以后输入:
    mkinitramfs -o /boot/initrd.img-2.6.19.2 2.6.19.2‘这里2.6.19.2是你编译的内核的版本号
    最后打开 /boot/grub/menu.lst
    在 ## ## End Default Options ## 下面添加类似下面的两段
    title Ubuntu, kernel 2.6.19.2
    root (hd0,4)
    kernel /vmlinuz-2.6.19.2root=/dev/hdd6
    initrd /initrd.img-2.6.19.2
    savedefault
    boot

    title Ubuntu, kernel 2.6.19.2 (recovery mode)
    root (hd0,4)
    kernel /vmlinuz-2.6.19.2 root=/dev/hdd6 ro single
    initrd /initrd.img-2.6.19.2
    boot

    注 意 root和kernel字段要模仿menu.lst下面已有的内容写。下面是 (hd0,4),那么你也写(hd0,4),下面写root=/dev/hdd6,你也写root=/dev/hdd6,只是内核的版本号改为现在编译的 版本号。然后重新启动计算机,在GRUB中选择新内核启动。如果启动失败,你可以重启选择老内核。

    ------------------------------------------------------华丽分割线------------------------------------------------

    Tips:已经编译好的内核可以拿到其它系统上直接安装使用,毕竟为了编译这个内核得加装不少东西……,我可不希望每台机子上都这么搞一通^^~

Linux驱动开发系列之一:Ubuntu 8.10下编译Linux kernel 2.6.32.1相关推荐

  1. Linux驱动开发系列:整理入门Ubuntu知识

    文章目录 Linux驱动开发 一.Linux驱动开发第一期:Ubuntu基础入门 1.Vmware虚拟机安装 2.Vmware内Ubuntu功能介绍 2.1 启动栏介绍 2.2 Ubuntu连接USB ...

  2. linux系统开发版下载,Ubuntu 21.10(Impish Indri)桌面开发版iso下载地址

    Ubuntu 21.10(Impish Indri)已经提供开发版iso下载了,用户可下载impish-desktop-amd64.iso.arm64.iso试用,这些iso都是每日构建版本,使用这些 ...

  3. linux 防火墙开机启动项,Ubuntu 9.10下实现Firestarter网络防火墙自启动

    关于Ubuntu 9.10下网络防火墙Firestarter自启动的问题,很多网站的发布的解决办法较乱,且有的办法费时费力. 那就再更新一下解决办法吧,如下: 1.终端命令行 sudo gedit / ...

  4. linux交叉编译出现的问题,,Ubuntu 14.10下安装GCC交叉编译器遇到问题及解决方法

    Ubuntu 14.10下安装GCC交叉编译器遇到问题及解决方法 一.下载gcc-arm-none-eabi-4_9 安装成功后上报错误: ./gcc-arm-none-linux-gnueabi-g ...

  5. linux嵌入式工作室,【课程培训】嵌入式linux驱动开发系列教程 | linux2web工作室...

    6年的嵌入式linux开发经验,尤其是还做过一年的嵌入式linux培训讲师,所以,我格外喜欢分享自己的嵌入式linux经验给各位,本系列linux驱动教程目录如下: ================= ...

  6. linux编码安装mysql_在Ubuntu 15.10下安装mysql设置数据库编码

    在从windows 10 的开发环境换到Ubuntu 15.10 后,发现原来的项目竟然不能正常地对数据库进行初始化,后来在控制台查看后,发现是数据库编码的问题. 1.在Ubuntu中安装mysql可 ...

  7. linux 7 cd命令行,Ubuntu 7.10下命令行刻录 DVD 与 CD

    开始都用K3b来着,但是由于Ubuntu 7.10默认的Gonme桌面,K3b不怎么稳定,加上NeroLinux居然给我来了一个"Buy"!就放弃了,还是来点通俗的命令行吧,强大, ...

  8. linux 调整shmmax,科学网—Ubuntu 9.10 中更改 linux kernal 中的shmmax大小 - 孙鹏的博文...

    最近让Postmaster增加一个启动的辅助进程,这样子在启动Postmaster的时候申请的共享内存就增加了一些,这增加的一点点发现,Postmaster竟然启动不起来了,错误消息表明Postmas ...

  9. Linux驱动开发(十五)---如何使用内核现有驱动(显示屏)

    前文回顾 <Linux驱动开发(一)-环境搭建与hello world> <Linux驱动开发(二)-驱动与设备的分离设计> <Linux驱动开发(三)-设备树> ...

  10. Linux驱动开发(外传)---驱动开发调试方法

    前文回顾 <Linux驱动开发(一)-环境搭建与hello world> <Linux驱动开发(二)-驱动与设备的分离设计> <Linux驱动开发(三)-设备树> ...

最新文章

  1. python双循环zip_Python如何同时进行两个循环
  2. android自动软键盘,Android自定义软键盘
  3. 第一个python爬虫_Python爬虫01——第一个小爬虫
  4. System verilog随机系统函数$urandom使用方法
  5. 配对(套利)交易之二,符合配对规则回测
  6. 牛逼! IDEA 2020 要本土化,真的是全中文了!中国开发者话语权越来越大了
  7. 官网CentOs7镜像下载详细步骤
  8. Declustered RAID
  9. 批量Word转换成PDF,用这方法超简单
  10. LG化学成为海水淡化领域膜领导品牌后,大举进军苦咸水反渗透膜市场
  11. 【Web技术】1477- Tauri:下一代桌面应用开发框架?
  12. deep learning in NLP
  13. Html5制作工具对比
  14. just for save
  15. 短视频不为人知的素材来源 以及平台推荐的黑盒机制
  16. NVIDIA 显卡驱动CUDA ToolkitcuDNN下载地址
  17. 纳米孔测序仪市场现状研究分析与发展前景预测报告
  18. ToolStrip控件的使用
  19. 2019版云计算大数据学习路线图(含大纲+视频+工具+书籍+面试)
  20. c语言程序安装软件,c语言程序下载软件

热门文章

  1. 下城投 × 奇点云 |「数智城投驾驶舱」,打造转型示范新样板
  2. 如何高效设计游戏——游戏策划的自我修养与心得
  3. 【261期】为什么 BigDecimal 类不能使用 equals() 方法做等值比较?
  4. 小武实习的debug日记
  5. Dzz任务板初版完成笔记-仿trello私有部署的一款轻量团队任务协作工具。
  6. 微信小程序获取手机号码(仅前端部分
  7. js原生下载excel(xlxs及xls格式)、word、png(图片格式)方法
  8. w ndows10家庭版和企业版谁好用,Windows10系统哪个版本好?Win10家庭版和专业版的区别介绍...
  9. #二、股价和时间转换(江恩箱)
  10. 人机交互_学习总结(理论部分)