驱动模块的编写##向内核添加系统调用函数

1.驱动模块的编写
例子:
@在PC机源码目录drivers/arm_emb:

        mkdir demo_simple  建一个模块目录
        vim demo.c   编写demo 
            static int demo_init (void) {};
            module_init(demo_init);
            static void demo_exit (void) {};
            module_exit(demo_exit);
            MODULE_LICENSE("GPL");
            MODULE_AUTHOR("XXX");
            MODULE_VERSION("xx-xx-xx");
            MODULE_DESCRIPTION(" ********");
        vim Makefile   编写Makefile
            obj-m   :=demo.o
            KERNEL  :=/linux-3.5
            all:
                make -C  $(KERNEL) M=`pwd` modules
            clean:
                make -C  $(KERNEL) M=`pwd` clean
                完了make 将生成的文件 demo.ko 拷贝到开发板的根目录
        @开发板:
                插入 insmod  demo.ko  
                移除 rmmod    demo  (注意木有.ko)
                查看 lsmod    demo.ko
注:如模涉及到模坏调用的,先移除被调用的模块,再移除调用模块
    两个模块的调用:
            在被调用的函数模块:EXPORT_SYMBOL_GPL(demo_func); //demo_func是被调用的函数名
            在主动调用模块:extern void demo_func(int val); //对函数进行外部声明
    对与两的模块间参数的传递也是一样的 
        extern int val; //在主动调用模块声明
        EXPORT_SYMBOL_GPL(val); //在主动调用模块导出

注:  符号(参数)导出:在那调用,在哪导出

2.如何向内核添加系统调用函数
例子:
@在PC机linux源码目录drivers下:

        mkdir arm_emb  建立目录文件
            vim mysyscall.c   编写调用函数
                SYSCALL_DEFINE1(buzzer_ctrl, int, cmd) {};  //cmd函数的参数,有X个参数=》DEFINEX
            vim Makefile  建立Makefile
                obj-y       +=mysyscall.o
            vim arch/arm/kernel/calls.S  添加系统调用号
                arch/arm/include/asm/unistd.h //查看真正系统调用号
            vim ../Makefile  即 arm_emb 的上层目录drivers 的Makefile 添加一行:
                obj-y  +=arm_emb/    //arm_emb是使当前目录能够编译 
        然后返回源码目录 make -jX
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值