SylixOS驱动模块加载和卸载
通过IDE新建SylixOS Kernel Module工程,这种方式将驱动编译为xxx.ko模块的方式使用,ko就是kernel object的缩写,在系统启动后通过动态加载的形式加载驱动模块,使用方式类似linux下的模块。
由于驱动模块属于内核,在驱动中可能会调用到一些只能在内核中使用的接口,所以必须在源文件最开始定义 __SYLIXOS_KERNEL 这个宏,这样就可以使用一些只能由内核使用的接口:
#define __SYLIXOS_KERNEL #include <SylixOS.h> #include <module.h>
驱动的入口函数是 module_init :
int module_init (void) { printk("hello_module init!\n"); return 0; }
驱动的退出函数是 module_exit :
void module_exit (void) { printk("hello_module exit!\n"); }
驱动模块默认是放在系统中的 /lib/modules 目录下,加载驱动使用 insmod 命令:
[root@sylixos:/root]# insmod /lib/modules/driver_demo2.ko hello_module init! module /lib/modules/driver_demo2.ko register ok, handle: 0x365c7e0 [root@sylixos:/root]#
可以通过 lsmod 命令查看当前系统中已经加载哪些驱动模块:
[root@sylixos:/root]# lsmod NAME HANDLE TYPE GLB BASE SIZE SYMCNT ------------------------- -------- ------ --- -------- -------- ------ VPROC: kernel pid: 0 TOTAL MEM: 49152 + xsiipc.ko 036688d0 KERNEL YES 10008000 49a4 14 + xinput.ko 03668ea8 KERNEL YES 10006000 18b4 1 + driver_demo2.ko 0365c7e0 KERNEL YES 10005000 68 1 total modules: 3 [root@sylixos:/root]#
使用 rmmod 命令卸载驱动模块:
[root@sylixos:/root]# rmmod /lib/modules/driver_demo2.ko hello_module exit! module /lib/modules/driver_demo2.ko unregister ok. [root@sylixos:/root]#
附源码
driver_demo2源码:
#define __SYLIXOS_KERNEL #include <SylixOS.h> #include <module.h> int module_init (void) { printk("hello_module init!\n"); return 0; } void module_exit (void) { printk("hello_module exit!\n"); }
评论