`
wanghongwei
  • 浏览: 108920 次
  • 性别: 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内核注释

    内容不多,个人觉得文件系统和USB这两个模块的注释还有一点意思。 所有注释都是中文,您可以与标准2.6.24内核进行比较,看看具体的注释内容。 针对2.6.24注释的时间比较短,内容不多,抱歉,请不要拍砖。更多的注释...

    Linux内核2.6.24的CFS调度器分析.pdf

    Linux内核2.6.24的CFS调度器分析.pdf

    Linux内核源码(2.6.24)

    Linux的内核源码,对有志于作linux内核编程的人或许有所帮助

    Linux 2.6.24 内核注解

    Linux 2.6.24 内核注解 增加了mtd层的注解,顺带引出了block文件夹中的注解 若代码和头文件中注解有不一致的,以头文件的注解为准, 因为都是一边看一边加注的,经常会出现第一次理解不对的情况,而后的修改,再...

    linux-2.6.24(1)

    我是一个linux的爱好者,我收集的linux的各个版本的内核源代码都发布在这里了,有需要的朋友请用linux采用的规则命名方法在csdn上面搜索下载你所需要的版本号的内核源代码,有时候一个一个的上传太麻烦了,我做了压缩...

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

    在Linux2.6.24内核中添加ME3760驱动,包含详细的程序修改点

    linux-2.6.24.rar

    它是一个用C语言写成,符合POSIX标准的类Unix操作系统。 [1] Linux最早是由芬兰黑客 Linus Torvalds为尝试在英特尔x86架构上提供自由免费的类Unix操作系统而开发的。该计划开始于1991年,在计划的早期有一些Minix ...

    在Debian 4.0rc3上编译内核2.6.24时加入Layer7模块笔记第二版.pdf

    在Debian 4.0rc3上编译内核2.6.24时加入Layer7模块笔记第二版.pdf

    linux-2.6.24:linux kernel 2.6.24原始代码分析和学习笔记

    主要内容包括多任务,调度和进程管理,物理内存的管理以及内核与相关硬件的交互,用户空间的进程如何访问虚拟内存,如何编写设备驱动程序,模块机制以及虚拟文件系统,Ext文件系统属性和访问控制表的

    bootsplash源码&linux2.6.24内核补丁

    用于修改linux的开机画面,在网上找了很久,和大家分享。其中包括源码和内核补丁,针对linux2.6.24版本的。

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

    基于内核的Linux键盘记录器 内核2.6.24 x86 ,完整源代码,供参考学习

    linux-2.6.24.tar.bz2

    为方便&快速下载,提供Linux 2.6源代码

    基于Linux2.6.24内核的WSN多频段网关设计.pdf

    基于Linux2.6.24内核的WSN多频段网关设计.pdf

    linux-2.6.24(2)

    我是一个linux的爱好者,我收集的linux的各个版本的内核源代码都发布在这里了,有需要的朋友请用linux采用的规则命名方法在csdn上面搜索下载你所需要的版本号的内核源代码,有时候一个一个的上传太麻烦了,我做了压缩...

    linux-2.6.24(3)

    我是一个linux的爱好者,我收集的linux的各个版本的内核源代码都发布在这里了,有需要的朋友请用linux采用的规则命名方法在csdn上面搜索下载你所需要的版本号的内核源代码,有时候一个一个的上传太麻烦了,我做了压缩...

    linux-2.6.24

    linux-2.6.24

    完整的linux-2.6.24版eink的驱动

    eink在linu-2.6.24下的驱动,完整的目录和文件。喜欢的兄弟赶快下载,不用再去到处找寻,也不用担心缺七少八,文件是完整的,copy到drivers/video下就可以使用。

    linux-2.6.24_谢宝友注释版.7z

    谢宝友对这个版本的内核注释了很多。值得我们深入学习。尤其是看源码的同学们需要有注释带入门。值得你去下载的linux2.6.24版本内核的注释(只有部分非全部)

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

    cs8900 嵌入式Linux驱动源代码,此代码已经升级到了Linux 2.6.24版本的支持。

    linux-2.6.24.3内核

    linux-2.6.24.3内核(linux-2.6.24.3.tar.bz2)

Global site tag (gtag.js) - Google Analytics