嵌入式Linux驱动开发之helloword心得

发表于:2015-1-04 10:01

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:heat nan    来源:51Testing软件测试网采编

  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和单片机真不愧是学习操作系统和计算机组成原理的法宝啊!
22/2<12
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号