linux ubuntu 3.0.0-12,Linux 驱动学习札记1 - HelloWorld

Linux 驱动学习笔记1 -- HelloWorld

想学习一下驱动,于是找了一个实例HelloWorld,编写自己的第一个驱动程序

1、环境搭建

安装ubuntu系统,打开终端,以root权限进入,命令如下

bory@borya:~$ sudo -s

查看自己linux内核包

root@borya:~# apt-cache search linux-source

linux-source - Linux kernel source with Ubuntu patches

linux-source-3.0.0 - Linux kernel source for version 3.0.0 with Ubuntu patches

本机的内核包是 linux-source-3.0.0

接着下载内核源码包

root@borya:~# apt-get install linux-source-3.0.0

下载完成后,先cs到/usr/src目录,再解压linux-source-3.0.0.tar.bz2

root@borya:~# cd /usr/src/

root@borya:/usr/src# ls

linux-headers-3.0.0-12 linux-source-3.0.0 vboxguest-4.1.16

linux-headers-3.0.0-12-generic linux-source-3.0.0.tar.bz2

root@borya:/usr/src# tar jxvf linux-source-3.0.0.tar.bz2

接下来编译 oldconfig

root@borya:/usr/src/linux-source-3.0.0# make oldconfig

再编译 bzImage,这个大概需要1个多小时

root@borya:/usr/src/linux-source-3.0.0# make bzImage

继续编译modules,也需要1个多小时

root@borya:/usr/src/linux-source-3.0.0# make modules

最后是安装modules

root@borya:/usr/src/linux-source-3.0.0# make modules_install

到目前为止,环境已经搭建完毕,下面是我们第一个驱动程序HelloWorld

2、运行驱动程序HelloWorld

在自己任意工作目录下,新建一个目录test。

编写hello.c

#include "linux/init.h"

#include "linux/module.h"

static int hello_init(void)

{

printk(KERN_ALERT "Hello World linux_driver_module\n");

return 0;

}

static void hello_exit(void)

{

printk(KERN_ALERT "This is first step linux_driver_module\n");

}

module_init(hello_init);

module_exit(hello_exit);

下面编写Makefile文件

ifneq ($(KERNELRELEASE),)

obj-m := hello.o

else

KERNELDIR ?= /lib/modules/$(shell uname -r)/build

PWD := $(shell pwd)

default:

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

endif

解释一下,$(shell uname -r)是指你在终端输入shell命令uname -r输出的内容,实际是一个目录名,$(shell pwd)是指当前路径

最后一步就是make了

bory@borya:~/driver/hello$ make

你可以ls查看一下make以后多了哪些文件

当然还不够,我们还没有看到属性的HelloWorld。用insmod命令将hello.ko装载到内核中

bory@borya:~/driver/hello$ insmod ./hello.ko

好像没有HelloWorld的啊,好,我们进入日志文件看看,打开/var/log/syslog就会看到

Jul  9 21:30:36 borya kernel: [20377.621046] Hello World linux_driver_module

卸载hello

root@borya:~/driver/hello$rmmod ./hello.ko

再次打开/var/log/syslog就看到最后一行

Jul  9 22:06:51 borya kernel: [22551.983955] This is first step linux_driver_module

到此位置,linux第一个驱动程序完美结束!

1楼visionliao5天前 09:32怎么没有下文了嘞,这个貌似太浅了哦,都没把原理什么的解释清楚Re: fangchongbory5天前 12:09回复visionliao谢谢您的回复,慢慢来,呵呵

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值