1818IP-服务器技术教程,云服务器评测推荐,服务器系统排错处理,环境搭建,攻击防护等

当前位置:首页 - 运维 - 正文

君子好学,自强不息!

阐述Linux驱动程序“Hello world!”

2022-11-13 | 运维 | admin | 623°c
A+ A-

学习Linux,你可能会遇到嵌入式Linux问题,下面介绍第一个Linux驱动程序“Hello world!”,“Hello world”也许是第一个程序员写的程序吧,这里我也从写它开始,尽管它很简单,但它记录了学习Linux驱动程序的过程。

/*hello_module.c*/ 
  • #include<linux /module.h> #include<linux /init.h>
  • staticint__initmini2440_hello_module_init(void) {
  • printk("Hello,Mini2440moduleisinstalled!\n"); return0;
  • } staticvoid__exitmini2440_hello_module_cleanup(void)
  • { printk("Good-bye,Mini2440modulewasremoved!\n");
  • } module_init(mini2440_hello_module_init);
  • module_exit(mini2440_hello_module_cleanup); MODULE_LICENSE("GPL");
  • 简单的分析:本程序中所用到的头文件“linux/module.h”和“linux/init.h”在所有的模块代码中都应该包含。MODULE_LICENSE(“GPL”);是内核模块所遵循的许可证。函数用__init来修饰,标明函数仅在初始化期间使用,当模块被装载后将该初始化函数扔掉,把函数占用的内存释放出来。初始化函数也可以不加__init修饰,只是占用一部分内存而已,并且该初始化函数还可以被其它函数调用。__exit修饰词标记该代码用于模块卸载,其它的任何时候调用该函数将出错。

    模块的Makefile文件如下:

    obj-m:
    =hello_module
    .o 
  • CURRENT_PATH: =$(shellpwd) ARM_LINUX_KERNEL: =/opt/linux-2.6.29.1
  • all: $(MAKE)-C$(ARM_LINUX_KERNEL)SUBDIRS =$(CURRENT_PATH)modules
  • clean: rm-RF*.cmd*.o*.ko*.mod.c*.symvers*.order
  • 本文来源:1818IP

    本文地址:https://www.1818ip.com/post/9037.html

    免责声明:本文由用户上传,如有侵权请联系删除!

    发表评论

    必填

    选填

    选填

    ◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。