Linux设备驱动之模块


【1】linux内核模块
   可在运行的时候添加到内核中的代码称为模块

【2】模块和应用程序的区别
                            应用程序               模块
1. 运行空间          用户空间               内核空间
2. 入口函数          main                     加载函数
3. 库                    usr/lib/标准库       内核源码
4. 资源释放          可以释放               必须释放
5. 段错误危害       危害比较小           可能导致系统崩溃

【3】模块三要素
  
模块许可证声明(必须)

       大多数情况下,内核模块应遵循GPL兼容许可权。
       Linux 2.6内核模块最常见的是以MODULE_LICENSE( "GPL" )

   模块加载函数(必须)    插入模块的时候执行
1 ---   缺省的形式
int init_module(void)
        {
   //做初始化相关的动作
   return 0;
        }
       
        2 --  自定义的形式
        int hello_init(void)
        {
   //做初始化相关的动作
   return 0;
        }
        module_init(hello_init);
 
   模块卸载函数(必须)    卸载模块的时候执行
        1 ---   缺省的形式
        void cleanup_module(void)
        {
            //做和init_module相反的动作
        }

        2 --  自定义的形式
        void hello_exit(void)
        {
            //做和init_module相反的动作
        }
        module_exit(hello_exit);

【3】模块相关的命令
    插入模块:
        sudo insmod hello.ko

    查看模块
        lsmod
    定位查找
        lsmod | grep hello
    卸载模块
        sudo rmmod hello 

    查看printk打印的信息
        dmesg
       
    清除
        sudo  dmesg -c
                              -C


   查看模块信息
        modinfo hello.ko

【4】模块参数
    1. 在驱动里面定义一个变量并初始化
       int myint = 0;
    2. 声明变量用来接收参数
       module_param(变量名,变量类型,参数读/写权限)
       module_param(myint, int, 600);
    3. 使用
        sudo insmod hello.ko myint=100

    传字符串参数
    module_param(mystring, charp, 600)
  
    sudo insmod hello.ko myint=100 mystring="hello"
   
    传数组参数
    module_param_array(myarr, int, &arr_num, S_IRUGO);

    insmod hello.ko myint=100 mystring="hello" myarr=1,3,5,7



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值