linux编写简单的驱动程序,Linux 设备驱动程序编写--最简单的hellomod

1、下载系统内核版本对应的源码包,版本查看方式:uname -r。

我的是Linux 2.6.32

下载命令:apt-get  install  linux-source-2.6.32

我下载的是linux-source-2.6.32.tar.bz2

2、配置内核:

tar jxvf  linux-source-2.6.32.tar.bz2

cd linux-source-2.6.32

make oldconfig #配置原版

3、编译内核(此过程耗时长,编译完后在linux-source-2.6.32多出一个vmlinux)

make

4、编译模块

make  modules

5、安装模块(操作结束后多出目录/lib/modules/2.6.32.61+drm33.26)

make  modules_install

6、测试

①、hellomod.c

#include  //初始换函数

#include  //内核头文件

#include  //模块的头文件

MODULE_LICENSE("GPL");//提示可能没有GNU许可证

static  int  lkp_init(void)//初始化

{

printk("Hello, world\n"); //模块运行在内核态,不能使用用户态C库函数中的printf函数,而要使用printk函数

return 0;

}

static int lkp_cleanup(void)//退出和清理函数

{

printk("Goodbye,Hello world\n");

}

module_init(lkp_init);//驱动程序初始化入口点

module_exit(lkp_cleanup);//会调用cleanup_module()函数

②、Makefile

obj-m :=hellomod.o

KERNELDIR=/lib/modules/2.6.32.61+drm33.26/build

PWD :=$(shell pwd)

modules:

$(MAKE) -C $(KERNELDIR) M=$(PWD) modules

modules_install:

$(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install

③执行make

输出:

root@master:~/Downloads/.1/lken# make

make -C /lib/modules/2.6.32.61+drm33.26/build M=/root/Downloads/.1/lken modules

make[1]: Entering directory `/usr/src/linux-source-2.6.32'

  Building modules, stage 2.

  MODPOST 1 modules

  CC      /root/Downloads/.1/lken/hellomod.mod.o

  LD [M]  /root/Downloads/.1/lken/hellomod.ko

make[1]: Leaving directory `/usr/src/linux-source-2.6.32'

会在目录下生成hellomod.ko文件

④、插入内核并查看

insmod hellomod.ko

root@master:~/Downloads/.1/lken# lsmod |grep hellomod

hellomod                679  0

⑤移除模块

rmmod hellomod

查看日记

tail /var/log/message

输出:

Jan  5 16:18:49 master kernel: [161488.154792] Hello, world

Jan  5 16:19:20 master kernel: [161519.197040] Goodbye,Hello world0b1331709591d260c1c78e86d0c51c18.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值