嵌入式Linux驱动开发之helloword心得
作者:网络转载 发布时间:[ 2015/1/4 13:47:54 ] 推荐标签:Linux 操作系统 helloword
3 编译这个模块前需要做那些准备?
第一步,将模块添加到内核菜单,这样在我们启动内核菜单的时候才能对我们新添加的模块进行配置。
1 config HELLO_MODULE
2 tristate "hello module"
3 depends on MACH_MINI2440
4 default m if MACH_MINI2440
5 help
6 hello module
这个模块是比照着周围的模块写的,当然了,用户手册上也是详细步骤的。
简单看下这段代码,tristate是这个模块在内核菜单中显示的名字。
depends on 是依靠的平台,下面是说如果依靠这个平台默认的是动态加载到内核。
添加完以上的代码,回到linux内核目录下,make menuconfig调出内核编译菜单。在字符设备的地方可以找到新添加的hello模块。
第二步,添加完代码后,还需要将编译文件Makefile和源码联系起来,这样执行makefile的时候才能找到源码进行编译。因为我们是在内核下抱大腿写的makefile,所以我们不必重新写makefile,只需要在字符设备的makefile文件中添加这个关系可以了。
1 obj-$(CONFIG_HELLO_MODULE) += hello.o
这样一来,make的时候能找到hello模块的源文件啦!
4 编译模块和检验模块
在2.6以后版本的内核中,我们只需要在内核目录下执行make modules便可以编译模块。
在编译模块后一定要做重要的检验工作,可以用modinfo命令查看生成的.ko文件的信息。重要的是核对.ko文件的vermagic: 所显示的内核信息和你目标板的内核信息是否一致,这点灰常重要,否则即便你移植到了目标板,也不能加载成功。
5 加载测试
好了,现在我们该检验结果啦,鸡冻啊!在模块当前目录,用insmod来加载我们的hello.ko模块。
什么居然神马也木有,心顿时凉了半截。。。。。。
还好不是神马大问题,上面文章已经说过啦!printk是内核级别的函数,查看需要输出:dmesg | tail
另外,也可以采用lsmod指令来验证模块是否加载成功。
后刻意验证了这个模块的生命周期,退出终端重新进入,查看模块还在。重新启动后发现模块不见鸟。
至此,所有的工作都完成鸟。第一个在嵌入式设备上开发的第一个鸡肋驱动完成了。在整个过程中觉得,只要一步一步来问题都是可以解决的,机器是非常认真的,只要我们按照机器一样的思维认真的去一步一步解决问题的时候,发现你可以hold住机器,md,以后会不会变成了一个和机器一样的人。。。。
发现了为什么大家伙都说嵌入式入门灰常难,其实是灰常繁,大家可以看上面那么多东西基本上没有涉及到和智商有关的东西,全部都是步骤程式化的,当自己没有走完一个流程的时候发现这玩意太难了,当走完一个流程后会觉得,nima,什么玩意。。。。。
问题解决前前后后大概一两天吧!发现越是纠结的时候长的问题,当结果出来那一刻会更兴奋,越是容易的问题,解决后没有一点兴奋的赶脚!
又扯远啦!马上进入真枪实弹的驱动-led驱动啦! 加油!md,我是谁,这么帅气的男淫!
后觉得linux里面的Makefile和Kconfig真强大,linux内核是一个大工程啦,通过Kconfig一层一层的去建立菜单,通过Makefile文件来批量的去编译,真是太强大了。这样以来觉得linux虽然做个什么东西都特别麻烦,但是更能让我们清楚的去了解系统的工作原理,linux和单片机真不愧是学习操作系统和计算机组成原理的法宝啊!
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11