设为首页 收藏本站
查看: 640|回复: 0

[经验分享] 编译和安装linux内核2.6.24,并且写一个简单的内核驱动测试之

[复制链接]

尚未签到

发表于 2016-4-1 09:57:10 | 显示全部楼层 |阅读模式
  
好久没有编译过内核了,最近要弄驱动,查看了一下在/usr/src下面有两个文件夹,里面都是空的,没有任何内核源代码。
我用的是CentOS 5.1,其实红帽系列在redora出现之后就一直没有附带linux内核源代码了,所以这些个头文件什么的在你安装好系统那刻起是都不会有的了。
当然了,不管是什么发行版本的linux系统,下面方法都应该适用。
自己从新安装一个就是,现下载:
www.kernel.org下载,如图:
DSC0000.png

  下载后解压到/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
  
DSC0001.gif /*======================================================================

Asimplekernelmodule
:"helloworld"


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

#include<linux/init.h>

#include<linux/module.h>


MODULE_LICENSE(
"DualBSD/GPL");

static
inthello_init(void)

{

printk(KERN_ALERT
"HelloWorldenter ");

return0;

}



staticvoidhello_exit(void)

{

printk(KERN_ALERT
"HelloWorldexit ");

}



module_init(hello_init);

module_exit(hello_exit);



MODULE_AUTHOR(
"ztz0223");

MODULE_DESCRIPTION(
"AsimpleHelloWorldModule");

MODULE_ALIAS(
"asimplestmodule");



  然后写一个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@BTazuoazuo]#cdhello//进入驱动程序的路径,此部分是注释
[root@BTazuohello]#dir
hello.cMakefile
[root
@BTazuohello]#make//编译
make-C/lib/modules/2.6.24.4/buildM=/azuo/hellomodules
make[
1]:Enteringdirectory`/usr/src/linux-2.6.24.4'
CC[M]/azuo/hello/hello.o
Buildingmodules,stage2.
MODPOST1modules
CC/azuo/hello/hello.mod.o
LD[M]/azuo/hello/hello.ko
make[1]:Leavingdirectory`/usr/src/linux-2.6.24.4
'
[root
@BTazuohello]#dir//编译成功
hello.chello.kohello.mod.chello.mod.ohello.oMakefileModule.symvers
[root
@BTazuohello]#


  

  加载和卸载驱动:
  [root@BTazuohello]#insmod./hello.ko
[root@BTazuohello]#rmmod./hello.ko




  打开/var/log/messages文件可以看到,最后有内核加载和卸载的信息:
Hello World enter
Hello World exit
表示内核加载和卸载成功!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-198275-1-1.html 上篇帖子: 使用虚拟机安装RHEL7.1详细教程 下篇帖子: linux下tar gz bz2 tgz z等众多压缩文件的压缩与解压方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表