Linux驱动开发之ubuntu下的驱动编译
2016-04-13 22:54
211 查看
Linux驱动开发之ubuntu下的驱动编译
Linux驱动开发也是一直在路上,之前一直多是单板上进行实验,今天尝试下在ubuntu下编译一个简单的驱动,一些驱动实验自然也可以在ubuntu上进行,同时也可以减少学习成本,只需要一台PC就行了。Linux驱动自然和内核版本密切相关,可通过下面的命令来查看下当前使用的内核版本
uneme -r
我使用的是ubuntu12.04它使用的内核版本为3.8.0-29-generic,同时这一点也能通过cd到/usr/src目录下查看下得到证实,/usr/src目录下存在一个linux-headers-3.8.0-29-generic的文件夹,通过名字含义也可得知它是为我们编译内核相关程序提供头文件的位置。
在网上问google大多说编译ubuntu下的驱动先要编译内核,后面发现只要你是为本机编译驱动的话这一步不是必须的,ubuntu安装时自然内核时编译好的,在/usr/src目录下我们也看到了这一点。所以下面可以直接进行驱动的编写,这里先来个最简单的驱动“hello world”。
/* hello.c */ #include <linux/init.h> #include <linux/module.h> MODULE_LICENSE("leo BSD/GPL"); static int hello_init(void) { printk(KERN_ALERT "Hello, world\n"); return 0; } static void hello_exit(void) { printk(KERN_ALERT "Goodbye, Hello world\n"); } module_init(hello_init); module_exit(hello_exit);
接下来我们还需要一个Makefile来编译我们的驱动如下:
obj-m += hello.o CURRENT_PATH:=$(shell pwd) LINUX_KERNEL_PATH:=/lib/modules/$(shell uname -r)/build all: $(MAKE) -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules clean: rm -rf .*.cmd *.o *.mod.c *.ko .tmp_versions
准备好之前我们只需要执行make之后就能得到我们想要的.ko文件了,我们通过insmod命令来安装我们的驱动到系统,然后通过lsmod命令来查看我们安装的驱动,之后可通过rmmod命令来卸载我们的驱动。
奇怪驱动中安排的打印信息去哪里呢,原来是它们是属于了内核日志被存储到系统日志文件里了,我们可以通过查看这个文件/var/log/syslog来看下我们安排的打印信息如下:
cat /var/log/syslog | grep Hello
到此在ubuntu下的驱动编译工作就可以顺利进行了,下面就是尽情发挥的时候了。
相关文章推荐
- Ubuntu 默认壁纸历代记
- Ubuntu Remix Cinnamon 20.04 评测:Ubuntu 与 Cinnamon 的完美融合
- 关于Ubuntu 11.10启动提示waiting for the network configuration的问题
- 在 Ubuntu 桌面中使用文件和文件夹
- ubuntu下chrome无法同步问题解决
- Ubuntu Linux使用体验
- 使用 GNOME 优化工具自定义 Linux 桌面的 10 种方法
- 以Ubuntu 9.04为例 将工作环境迁移到 Linux
- Linux下的USB总线驱动
- VirtualBox虚拟机XP与宿主机Ubuntu互访共享文件夹
- 从USB安装Ubuntu Server 10.04.3 图文详解
- Ubuntu 15.04 正式版发布下载
- Linux-Ubuntu 10.04安装Cadence-ic610 方法总结图解
- Ubuntu 12.04和Windows 7双系统安装图解
- 开机出现:grub rescue的修复方法
- Ubuntu连接Android真机调试
- 你应该选择 Ubuntu 还是 Fedora?
- 100 个最佳 Ubuntu 应用(中)
- 看看我的Ubuntu Linux截图
- OMAP3630 Linux I2C总线驱动分析