编译和安装linux内核2.6.x,一个简单的内核驱动测试

自己从新安装一个就是,现下载:
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,内容如下:

  1.    #! /bin/bash
  2.    mkdir  -p /home/name/build/kernel
  3.    cd /usr/src/linux-kernel
  4.    make mrproper
  5.    make O=/home/name/build/kernel menuconfig
  6.    make O=/home/name/build/kernel
  7.    sudo make O=/home/name/build/kernel modules_install install
然后打开一个终端执行
bash  a.sh
shell文件里面O=/home/name/build/kernel表示编译配置在=号后面的文件夹里面进行,中间可以自己查看一下。
后面的过程除了在配置内核的时候,都可以不管了。
这个过程会自动生成新的的内核启动映象,并且自动复制到/boot目录下面去,不用手动复制了。


之后修改menu.lst文件,让以后的系统用新的的内核启动:
vim /etc/grub/menu.lst
内容如下:

  1. default=2
  2. timeout=5
  3. splashimage=(hd0,6)/boot/grub/splash.xpm.gz
  4. hiddenmenu
  5. title CentOS (2.6.24.4)
  6.     root (hd0,6)
  7.     kernel /boot/vmlinuz-2.6.24.4 ro root=LABEL=/ rhgb quiet
  8.     initrd /boot/initrd-2.6.24.4.img
  9. title CentOS (2.6.18-53.el5)
  10.     root (hd0,6)
  11.     kernel /boot/vmlinuz-2.6.18-53.el5 ro root=LABEL=/ rhgb quiet
  12.     initrd /boot/initrd-2.6.18-53.el5.img
  13. title Windows XP
  14.     rootnoverify (hd0,0)
  15.     chainloader +1
  16. 把这一部分注释掉:
  17. title CentOS (2.6.18-53.el5)
  18.     root (hd0,6)
  19.     kernel /boot/vmlinuz-2.6.18-53.el5 ro root=LABEL=/ rhgb quiet
  20.     initrd /boot/initrd-2.6.18-53.el5.img
  21. 修改为
  22. #title CentOS (2.6.18-53.el5)
  23. #    root (hd0,6)
  24. #    kernel /boot/vmlinuz-2.6.18-53.el5 ro root=LABEL=/ rhgb quiet
  25. #   initrd /boot/initrd-2.6.18-53.el5.img
  26. 再修改default = 0,这里0对应第一个title,下面一次类推
  27. 重启就可以了。


编译内核的输出文件太大了,就是开始的/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的内核有些帮助!学习一下。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值