设为首页 加入收藏

TOP

Linux下的第一个驱动
2014-11-24 08:37:14 来源: 作者: 【 】 浏览:0
Tags:Linux 一个 驱动

前段时间忙着学python语言,其实,学得不咋滴~~从习惯的底层编程换到上层编程,不用考虑内存的东西,还不用申请变量,总感觉不太习惯,相信久了就会好了,不过已经基本可以看懂程序了,语言确实简单。留着以后慢慢琢磨吧。


现在需要学习linux下的驱动了,一直都想学,上学期学习迷茫期中,有个机会去广州参加尚观的一个七天免费培训,学了一下,可惜回来后没有继续搞驱动,而是自己找了一个项目自己从上层开始折腾了——就是那个远程监控的东东。


因为给自己定的方针是先易后难,逐渐摸索,有了一定能力就去多了解背景架构的东西,最好快点儿让自己有些成就感。废话不多说了,反正这两天开始学习驱动了。


按照网上的hello world驱动教程,总会 有些问题,今日忽然解决了,糊里糊涂的不太清楚什么原因,只是把系统源代码路径改为了本系统的就好了。


下面我也把代码贴一遍:


文件内容我就不多解释了,网上大把


然后是Makefile文件:


PWD = $(shell pwd)


KERNEL_SRC = /usr/src/linux-headers-2.6.35-22-generic/ ###我就是改的这句粗体字,我的系统是这个通用版本的,更好的办法是用$(shell uname -r)代替


obj-m:=hello.o


module-objs:=hello.o


all:


$(MAKE) -C $(KERNEL_SRC) M=$(PWD) modules #####记住有tab键,不要复制我的,我这是空格键


## -C 是改变它的目录到$(KERNEL_SRC) 目录下,执行完该目录下的modules之后,回到$(PWD)当前路径下


clean:


rm *.ko


rm *.o


rm -f *mod*


rm -f Mod*


以前,有段时间学过《跟我一起写makefile》,只是一直没怎么用过,都忘记了,到现在具体规则记不住了,只记得就是这么简单一回事,编译谁,生成谁,怎么编译。一直不明不白的为什么只是make一下就会自动编译,今天实验了一下,把all: 和clean: 顺序调换了一下,然后使用make,发现会出错,终于明白:使用make命令会默认执行第一个标签的命令!!


执行insmod hello.ko


知性rmmod hello.ko


命令行没有任何显示


查看系统日志, vim /var/log/kern.log(syslog也行), 然后Shift + G 看到底行出现了预期的打印字符。成功了。


从网上看到的,这个makefile作为模板挺不错,像python语言一样优美整洁:


obj-m : = test.o


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


default:


(tab键)make -C $(KERNELDIR) M=$(shell pwd) modules


install:


insmod test.ko


uninstall:


rmmod test.ko


clean:


make -C $(KERNELDIR) M=$(shell pwd) clean


OK,驱动大概流程怎样,应该怎么走知道了,下面就是折腾具体技术问题了。预祝成功。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Linux程序移植到Android 下一篇u-boot与Linux内核机器码

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Redis on AWS:Elast (2025-12-27 04:19:30)
·在 Spring Boot 项目 (2025-12-27 04:19:27)
·使用华为开发者空间 (2025-12-27 04:19:24)
·Getting Started wit (2025-12-27 03:49:24)
·Ubuntu 上最好用的中 (2025-12-27 03:49:20)