RedHat5.8 编译内核驱动 合成initrd.img

/*******************************************************************
 *            RedHat5.8 编译内核驱动 合成initrd.img
 * 说明:
 *     需要编译RedHat5.8的内核驱动,找了一下资料,并操作一下,并编译
 * 一下IO驱动,能够正常运作。
 *
 *                                 2017-3-1 深圳 南山平山村 曾剑锋
 ******************************************************************/

一、参考文档:
    1. Redhat Enterprise Linux内核源码下载网址
        http://ilinuxkernel.com/?p=22
    2. Linux下RPM软件包的安装及卸载
        http://os.51cto.com/art/201001/177866.htm
    3. RedHat5.8更改yum源
        http://blog.csdn.net/sz_bdqn/article/details/47015863

二、安装RedHat5.8 yum源:
    1. 163 yum源:wget http://mirrors.163.com/.help/CentOS5-Base-163.repo;
    2. 把$releasever替换成5;

三、下载对应版本的Linux Kernel:
    1. 通过shell命令查看Linux Kernel版本:uname -a;
    2. 下载对应版本的Linux Kernel rpm包:ftp://ftp.redhat.com/pub/redhat/linux/enterprise/5Server/en/os/SRPMS/;
    3. 通过rmp命令安装:rpm -ivh <Linux Kernel rpm 包>;
    4. 查看/usr/src/kernels/是否存在对应版本的内核源代码。

四、编译内核:
    1. cd /usr/src
    2. cd redhat/SPECS
    3. rpmbuild –bp –-target=$(uname –m) kernel.spec             # 最后的kernel.spec不一定是这个名字,以当前文件夹文件为准
    4. cd /usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18.i686 # 以最后生成的文件夹为准
    5. cp /boot/config-2.6.16-1.2798.fc6 .config                # 以最后拥有的config文件为准
    6. 修改/usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18.i686中的Makefile文件:
        VERSION=2
        PATCHLEVEL=6
        SUBLEVEL=18
        EXTRAVERSION= -1.2798.fc6   # 主要是要修改这里的,要跟当前内核的一样,可以通过uname -a查看
    7. make menuconfig              # 如果有需要单独配置的,可以通过这里去配置
    8. make
    9. make modules
    10. make install
    11. make modules_install
    12. 修改/boot/grub/grub.conf文件来满足需求:
        1. 8250.nr_uarts=10         # 串口数
        2. vga=785                  # 用于ALT+CTRL+Fn功能
    13. 其中又遇到过无法识别磁盘的问题,需要重新更新initrd.img文件

五、重新合成initrd.img:
    1. mkinitrd 帮助:
        [root@main1 ~]#  mkinitrd -h
        usage: mkinitrd [--version] [--help] [-v] [-f] [--preload <module>]
               [--force-ide-probe] [--force-scsi-probe | --omit-scsi-modules]
               [--image-version] [--force-raid-probe | --omit-raid-modules]
               [--with=<module>] [--force-lvm-probe | --omit-lvm-modules]
               [--builtin=<module>] [--net-dev=<interface>] [--with-fips]
               [--without-usb] [--without-multipath] [--without-dmraid]
               [--fstab=<fstab>] [--nocompress] <initrd-image> <kernel-version>

               (ex: mkinitrd /boot/initrd-2.2.5-15.img 2.2.5-15)
    2. 查看内核版本:
        [root@main1 modules]# pwd
        /lib/modules
        [root@main1 modules]# ls
        2.6.18-308.el5
        [root@main1 modules]#
    3. 执行命令:
        mkinitrd /boot/initrd-2.6.18-308.el5.img 2.6.18-308.el5

 

时间: 2024-09-20 14:14:03

RedHat5.8 编译内核驱动 合成initrd.img的相关文章

linux 编译内核时网卡驱动丢失如何解决

我的系统 OS version : Centos 5.9 kernel : 2.6.18-402 更新内核版本: 2.6.20 由于 yum 里面的内核头文件和卡发包并没有过多的源码 .c 文件.所以只能从 www.kernel.org 下载 相近的版本,有人肯定说了下你还不下个最新的 内核版本,答: 如内核版本跨度比较大,本人担心会出现各种问题,很多老的编译选项新版内核不支持. 首先先下载 原系统的 开发包和头文件:shell $> yum install kernel-devel kerne

android 内核驱动编译

问题描述 android 内核驱动编译 android 内核编译时,编译驱动只生成.o文件,不生成.ko文件,确认驱动没有编译进内核,第一次编译的时候生成过.ko文件,以后在编译时就不生成ko文件了. Building modules, stage 2. MODPOST 0 modules OBJCOPY arch/arm/boot/Image Kernel: arch/arm/boot/Image is ready GZIP arch/arm/boot/compressed/piggy.gzi

解决linux 编译内核网卡驱动问题

由于项目原因,需要从新编译内核,修改 TUN 源码支持共享模式,编译内核期间遇到了网卡驱动丢失问题,废话不多说,直接说解决问题的方式,本人对底层的东西了解很浅,所以解决问题的方式也很笨拙. OS version : Centos 5.9 kernel : 2.6.18-402 更新内核版本: 2.6.20 由于 yum 里面的内核头文件和卡发包并没有过多的源码 .c 文件.所以只能从 www.kernel.org 下载 相近的版本,有人肯定说了下你还不下个最新的 内核版本,答: 如内核版本跨度比

wifi-linux n内核驱动编译出错

问题描述 linux n内核驱动编译出错 我正在进行wifi驱动的移植,android SDK的版本是4.2.2 内核是3.2.0的,但是当我将驱动代码 加入到kernel里后,编译module时出现了如下错误: CC [M] drivers/net/wireless/bcmdhd/wl_cfg80211.o drivers/net/wireless/bcmdhd/wl_iw.c:3062:2: error: unknown field 'num_private' specified in in

《Linux内核修炼之道》——2.2 编译内核

2.2 编译内核 Linux内核修炼之道2.2.1 准备工作 虽然与配置内核相比,编译内核所做的工作要少得多,但是在正式编译之前,我们仍需要做一些必要的准备. 1.需要了解的基础知识 首先我们需要了解系统中与编译过程有关的目录及文件. /boot/vmlinuz-< version >:用于启动的压缩内核镜像. /boot/system.map-< version >:存储内核符号表. /boot/initrd.img-< version >:一个镜像文件,类似ramd

linux下安装编译网卡驱动的方法

  安装linux操作系统后发现没有网卡驱动,表现为 system → Administration → Network下Hardware列表为空. 以下为安装编译网卡驱动的过程,本人是菜鸟,以下是我从网上找的资料进行整理,并实际操作的过程,仅供借鉴. 一.检测linux系统内核版本和网卡类型,相关命令如下: uname -r 查看linux内核版本 (uname -a 可显示所有信息) lsmod 设备加载情况 ls /usr/share/hwdata 查看硬件设备 lspci 查看pci网卡

linux内核驱动-内核初涉

  一.为什么要学习内核? 有些人要学习内核,而有些人则可以不学习它.你如果以后要从事系统研发或驱动开发的话,就要学习内核. 刚刚接触内核,主要学习内核的接口函数.不要深入的去读内核,因为你读也读不懂,内核代码庞大如野兽一般不可驾驭. 学习内核主要掌握层次学习法,即从头开始学习,一环紧扣一环. 内核学习的四步学习法:1.核心理论学习-概念与函数原型2.范例程序分析3.思维导图设计4.亲自编写代码 二.linux内核简介 1.linux体系结构 分为两部分:用户空间和内核空间 2.linux为什么

Linux编译内核出现“kernel Panic:VFS:Unable to mount root fs on 0:00”错误

安装了一台 Linux 服务器,想自己编译内核,一步一步做下来, GRUB 也添加进去了,但出现" kernel Panic:VFS:Unable to mount root fs on 0:00 " 的错误,请问是怎么回事? 一般情况下initrd这个文件在台式机上不是必须的,但是在有SCSI设备的服务器上却是必须的.有可能因为编译内核的时候没有产生initrd那个文件,所以会有上面的错误提示. 用户可以使用mkinitrd命令来生成一个initrd.img文件,然后加入GRUB,重

android内核-如何控制一个内核驱动,待SD卡或内部存储设备加载完毕后再运行?

问题描述 如何控制一个内核驱动,待SD卡或内部存储设备加载完毕后再运行? 在做一个Android内核驱动程序,主要功能是读取一个存储在SD卡或内部存储比如NAND中的一个文本文件,然后解析该文件来设置一些参数. 先编译成模块,用insmod加载,rmmod来卸载,经过调试一切功能都搞定了.然后,把模块编译进了内核,也能正常加载,但是文件打开失败,看了一下内核启动log,发现由于驱动运行时文件系统还没有加载SD卡和NAND,自然无法打开文件.所以很想知道,遇到这类情况如何解决? 解决方案 建议你多