`
wanghongwei
  • 浏览: 111916 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

编译和安装linux内核2.6.24,并且写一个简单的内核驱动测试

阅读更多

自己从新安装一个就是,现下载:
www.kernel.org下载,如图:

下载后解压到/usr/src下:
bzip2 -dc linux-2.6.24.4.tar.bz2 | tar xvf -
把文件夹linux-2.6.24.4改名字为:linux-kernel


随便在哪个文件夹下面,编写一个shell文件名叫a.sh,内容如下:
   #! /bin/bash
   mkdir  -p /home/name/build/kernel
   cd /usr/src/linux-kernel
   make mrproper
   make O=/home/name/build/kernel menuconfig
   make O=/home/name/build/kernel
   sudo make O=/home/name/build/kernel modules_install install


然后打开一个终端执行
bash  a.sh
shell文件里面O=/home/name/build/kernel表示编译配置在=号后面的文件夹里面进行,中间可以自己查看一下。
后面的过程除了在配置内核的时候,都可以不管了。
这个过程会自动生成新的的内核启动映象,并且自动复制到/boot目录下面去,不用手动复制了。


之后修改grub.conf文件,让以后的系统用新的的内核启动:
vim /etc/grub.conf
内容如下:
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You do not have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /, eg.
#          root (hd0,6)
#          kernel /boot/vmlinuz-version ro root=/dev/sda7
#          initrd /boot/initrd-version.img
#boot=/dev/sda
default=2
timeout=5
splashimage=(hd0,6)/boot/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.24.4)
    root (hd0,6)
    kernel /boot/vmlinuz-2.6.24.4 ro root=LABEL=/ rhgb quiet
    initrd /boot/initrd-2.6.24.4.img
title CentOS (2.6.18-53.el5)
    root (hd0,6)
    kernel /boot/vmlinuz-2.6.18-53.el5 ro root=LABEL=/ rhgb quiet
    initrd /boot/initrd-2.6.18-53.el5.img
title Windows XP
    rootnoverify (hd0,0)
    chainloader +1

把这一部分注释掉:
title CentOS (2.6.18-53.el5)
    root (hd0,6)
    kernel /boot/vmlinuz-2.6.18-53.el5 ro root=LABEL=/ rhgb quiet
    initrd /boot/initrd-2.6.18-53.el5.img
修改为
#title CentOS (2.6.18-53.el5)
#    root (hd0,6)
#    kernel /boot/vmlinuz-2.6.18-53.el5 ro root=LABEL=/ rhgb quiet
#   initrd /boot/initrd-2.6.18-53.el5.img

再修改default = 0,这里0对应第一个title,下面一次类推
重启就可以了。

编译内核的输出文件太大了,就是开始的/home/name/build/kernel,把这个文件夹可以删除了最后。要写驱动的话,不要删除。

写一个最简单的驱动程序:hello.c

 

/*======================================================================

    A simple kernel module
: "hello world"     


======================================================================*/

#include <linux/init.h>

#include <linux/module.h>


MODULE_LICENSE(
"Dual BSD/GPL");

static 
int hello_init(void)

{

  printk(KERN_ALERT 
" Hello World enter ");

  
return 0;

}



static void hello_exit(void)

{

  printk(KERN_ALERT 
" Hello World exit  ");

}



module_init(hello_init);

module_exit(hello_exit);



MODULE_AUTHOR(
"ztz0223");

MODULE_DESCRIPTION(
"A simple Hello World Module");

MODULE_ALIAS(
"a simplest module");

 

然后写一个Makefile

如下:

 

PWD = $(shell pwd)
KERNEL_SRC = /usr/src/linux-2.6.24.4/

obj-m := hello.o
module-objs := hello.o

all:
    $(MAKE) -C $(KERNEL_SRC) M=$(PWD) modules
   
clean:
    rm *.ko
    rm *.o

 

打开终端进入到hello.c路径下make,2.6的内核好像不支持用gcc直接编译了,要用make,如下:

 

[root@BTazuo azuo]# cd hello  //进入驱动程序的路径,此部分是注释
[root@BTazuo hello]# dir
hello.c  Makefile
[root
@BTazuo hello]# make    //编译
make -/lib/modules/2.6.24.4/build M=/azuo/hello  modules
make[
1]: Entering directory `/usr/src/linux-2.6.24.4'
  CC [M]  /azuo/hello/hello.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /azuo/hello/hello.mod.o
  LD [M]  /azuo/hello/hello.ko
make[1]: Leaving directory `/usr/src/linux-2.6.24.4
'
[root
@BTazuo hello]# dir //编译成功
hello.c  hello.ko  hello.mod.c  hello.mod.o  hello.o  Makefile  Module.symvers
[root
@BTazuo hello]#

 


加载和卸载驱动:

 

打开/var/log/messages文件可以看到,最后有内核加载和卸载的信息:

 Hello World enter
 Hello World exit
表示内核加载和卸载成功!

 

 

这个是从别的地方截过来的,看了对现在学习和安装Linux的内核有些帮助!学习一下。

[root@BTazuo hello]# insmod ./hello.ko
[root@BTazuo hello]# rmmod ./hello.ko

 

分享到:
评论

相关推荐

    Linux2.6.24内核中添加ME3760驱动.pdf

    文档标题提到的"Linux2.6.24内核中添加ME3760驱动",说明了一个具体的开发案例,即如何将ME3760设备的驱动集成到Linux 2.6.24版本内核中。ME3760可能是一个具体的硬件设备,比如某款手机、无线网卡或其他USB设备。ME...

    基于内核的Linux键盘记录器 2.6.24 x86

    在这个项目中,"klogger-1.5(2.6.24)"可能就是这样的一个内核模块,专为2.6.24内核版本设计。 2. **键盘事件处理**: 键盘记录器需要监听键盘驱动程序发送到内核的事件。在Linux中,这通常是通过注册一个中断处理...

    完整的linux-2.6.24版eink的驱动

    Linux内核版本2.6.24中的E Ink驱动程序是一个关键组件,它使得Linux操作系统能够与电子墨水显示屏(E-Ink Display)进行通信,这类屏幕常用于电子阅读器和一些低功耗设备上。E-Ink技术以其独特的显示效果,如高对比...

    ME3760 Linux2.6.24适配方法.zip_ME3760模块驱动_me3760

    为了在Linux 2.6.24内核中使其正常工作,我们需要一个专为该硬件设计的驱动程序。描述中提到的"ME3760模块驱动"就是这样的驱动,它包含了与ME3760交互所需的所有代码和功能。 在Linux内核中添加新的驱动程序通常...

    基于ARM 嵌入式Linux内核的编译与移植

    - 针对目标平台进行交叉编译,生成一个内核映像文件。 - 通过一些手段将该映像文件烧录到目标平台中。 移植过程中,对Linux源码的改写工作通常较为复杂,要求开发者对Linux内核结构和目标平台的硬件结构有深入了解...

    编译内核详细配置.pdf

    通过对本书的学习,读者不仅可以掌握Linux内核的基本概念和编译流程,还能了解如何根据实际需求进行内核定制,以实现最佳性能和稳定性。希望本书能够为读者提供有价值的参考和指导。 #### 参考文献 - 本书作者...

    cs8900_linux_2.6.24.tar.gz.zip_cs8900 2410 2.6.24_gcc-3.3.6.tar

    Linux 2.6.24是Linux内核的一个重要版本,引入了许多新特性,如预读取支持、电源管理改进等,这些都对驱动程序提出了新的要求。 在压缩包中,我们找到了两个核心文件:cs8900.c和cs8900.h。cs8900.c是驱动程序的...

    linux内核编译心得.pdf

    Linux内核编译是一项复杂而重要的任务,尤其对于系统管理员和开发者来说,了解这一过程能够增强对系统的理解和控制。在本文中,我们将深入探讨Linux内核编译的一些关键步骤和注意事项,以帮助读者掌握这一技能。 ...

    Linux2.6内核启动流程.doc

    initrd是一个临时的文件系统,用于在主根文件系统可用之前提供必要的驱动程序和工具。如果initrd的起始地址低于最小低页帧号(min_low_pfn),那么initrd可能已经被破坏,因此内核会禁用它。 接下来,我们深入探讨...

    嵌入式Linux内核分析与移植

    自1991年第一个0.01版本发布以来,Linux内核经历了无数次迭代,形成了2.4和2.6两个主要的嵌入式系统分支。内核版本号的规则也有所变化,通常形式为x.y.z,其中y为偶数表示稳定版本,奇数则代表开发版本。例如,2.6.x...

    linux下BCM43xx驱动安装方法

    ### Linux下BCM43xx驱动安装方法详解 #### 背景介绍 随着Linux系统的日益普及,越来越多的用户选择Linux作为他们的操作系统。然而,在Linux环境下,对于某些硬件的支持并不是那么友好,尤其是无线网卡。其中,...

    linux内核升级详细教程

    随着技术的发展和需求的变化,Linux内核也在不断更新以增强其功能性和稳定性。本文将详细介绍如何从2.4.x版本升级至2.6.24版本的全过程,包括必要的准备工作、具体步骤以及可能遇到的问题及解决方案。 #### 二、...

    Linux内核学习起步

    对于初次接触Linux内核的学习者而言,建议下载像 `linux-2.6.23.tar.bz2` 这样的压缩包,这是Linux内核的一个稳定版本。 **1.1 找一个旧的.config作参考** 为了更好地配置内核,可以利用系统上已有的 `.config` ...

    linux内核移植linux内核移植

    总结来说,Linux内核移植是一个涉及多个层面的技术任务,包括硬件识别、驱动程序开发、编译环境配置、文件系统管理和烧写流程。通过这个过程,开发者可以为特定硬件平台定制优化的内核,以满足嵌入式系统的需求。在...

    linux下万能摄像头驱动

    这涉及到下载Linux内核源码,使用`make menuconfig`命令配置内核选项,开启所需的摄像头驱动模块,然后编译内核和模块,最后安装到系统中。 3. **YC2440开发指南**:YC2440是一款基于ARM920T的微处理器,可能用于...

    utu2440_buttons.rar_2440 键盘驱动_buttons linux-2.6._utu2440_buttons

    如果是源代码,开发者可能需要使用编译工具(如make)和内核构建环境来编译和安装这个驱动;如果是二进制模块,通常可以使用`insmod`或`modprobe`命令直接加载到内核中。 总的来说,这个压缩包提供了一个经过验证的...

    实验 内核移植(liunx)

    ### Linux内核移植详解:基于GEC2410与Linux 2.6.24的实践 #### 核心概念解析 **Linux内核移植**:是指将Linux内核从一个硬件平台移植到另一个硬件平台的过程。由于不同的硬件平台具有不同的特性,如处理器架构、...

    linux下无线驱动问题

    确保你的Linux内核版本与驱动兼容,通常需要较新的内核版本(如2.6.24以上)。 2. **使用Ndiswrapper**:如果官方没有提供适用于你的Linux发行版的驱动,或者你遇到了兼容性问题,可以使用Ndiswrapper。Ndiswrapper...

    adc.tar.gz_at9260 ad_linux AD驱动

    在Linux内核中,驱动程序作为内核模块,负责硬件设备的初始化、数据传输和中断处理等操作。 3. **ADC驱动**:在Linux中,ADC驱动是内核的一部分,负责与硬件ADC芯片进行通信。它实现了必要的函数接口,如`read()`,...

Global site tag (gtag.js) - Google Analytics