1

【ok210试用体验】- 驱动开发过渡篇 - 在线问答 - 电子技术论坛 - 最好最受欢迎电子论坛! - 德赢Vwin官网

【ok210试用体验】- 驱动开发过渡篇

chkconfig ( 楼主 ) 2015-10-14 18:19:38  只看该作者 倒序浏览

前一段时间都在不断的熟悉底层硬件的操作,其实也就是寄存器的操作以及用户手册的熟悉。我们熟悉了LEDUARTwatchdog的裸机开发,下一步将开始驱动开发,基于Linux平台,采取模块开发的形式,首先是构造和运行模块。
同样的,我们从hello world开始。由于在开发板尚未成功装载模块,此次是在pc机上运行的。
先看源码:

  1. #include
  2. #include   
  3. MODULE_LICENSE("GPL");
  4. MODULE_AUTHOR("PENG");
  5. static int __init hello_init(void)
  6. {
  7. printk(KERN_ALERT"Hello, Linux module!");
  8. return 0;
  9. }
  10. static void __exit hello_exit(void)
  11. {
  12. printk(KERN_ALERT"module exit!");
  13. return;
  14. }
  15. module_init(hello_init);
  16. module_exit(hello_exit);[code]#
  17. #KERNELRELEASE        :在内核源码树中的Makefile中定义,在当前的文件中为0
  18. #$(shell uname -r)        :获得当前内核版本
  19. #KERNEL_DIR        :将要使用linux系统的源代码路径,编译生成的模块将在系统中装载
  20. #如何在自己的开发板上装载模块呢?就在这个选项中指定
  21. #
  22. #PWD := $(shell pwd)
  23. #$(MAKE) 值是make

  24. ifeq ($(KERNELRELEASE),)


  25. KERNEL_DIR ?= /lib/modules/$(shell uname -r)/build
  26. PWD := $(shell pwd)

  27. modules:
  28.         $(MAKE)        -C $(KERNEL_DIR) M=$(PWD) modules

  29. .PHONY:modules clean
  30. clean:
  31.         $(MAKE)        -C $(KERNEL_DIR) M=$(PWD) clean
  32. else

  33.         obj-m := hello.o
  34. endif
复制代码

以后我们就可在源文件中使用基于Linux系统的各种系统调用,宏,来操作我们的寄存器,进而实现功能。
1.make,编译模块。
2.运行sudo insmodhello.ko,装载模块。
运行dmesg,打印环形缓冲区的信息,可看到信息输出
3.运行sudo rmmod hello,卸载模块。




0个回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则


关闭

站长推荐上一条 /7 下一条

小黑屋|手机版|Archiver|德赢Vwin官网 ( 湘ICP备2023018690号 )

GMT+8, 2024-12-30 17:04 , Processed in 0.596911 second(s), Total 62, Slave 43 queries .

Powered by 德赢Vwin官网 网

© 2015 bbs.elecfans.com

微信扫描
快速回复 返回顶部 返回列表