• 6.5号——内核文件系列


    1.一般的io函数芯片厂商都已经写进内核里了,在内核源码下的source/linux-3.4.112/Documentation/gpio.txt中

      如:gpio_request()   gpio_direction_input()    gpio_set_value()    gpio_get_value()    

        gpio_free();      gpio_to_irq();等

      如果需要复杂的功能,则这些标准的io函数则做不到,需要特殊的函数,但是那些特殊的函数不是标准的函数,每个芯片厂商设计的都不同,

      如:三星的在orangepi_sdk/source/linux-3.4.112/drivers/gpio/gpio-samsung.c

      但是全志的并不在这里,而是在编译内核时生成的script.bin文件中

    2.  修改模块参数

         modprobe   g_ether   dev_addr ="40:30:11:22:33:44"  

      modprobe:只需要相对路径,而后面的g_ether是一个网路模块g_ether.ko,   dev_addr为模块的mac地址

    3.如果一个模块里有多个.c文件,如何写makefile文件生成一个.KO

      obj-m += mytest.o
          mytest-objs := test.o a.o b.o d.o   //固定语法,将test.o  a.o  b.o  d.o  加入到mytest.o 中

    4.如果工作中只给了一个动态编译的库,我们怎么取调用?

      如通过arm-linux-gnueabihf-ld   cr    myfunc.a   a.o b.o d.o 

      如果我们只有一个myfunc.a的库,那么在写makefile时只需要将myfunc.a当作.o文件使用就可以了

        obj-m += mytest.o

        mytest-objs :=test.o myfunc.a

    5.static 定义的变量只能在模块内引用,若想在模块外调用怎么办? 

      答:用引用符号

      如:EXPORT——SYMBOL(函数名)  //导出函数,此时该函数则为全局函数

      cat  /proc/kallsyms  |     grep   myfunc   //myfunc为函数名

      查看内核符号表,查看信息,如全局变量(T)、局部变量(t)等。

        如果想要调用外部函数怎么声明?    

        extern void  myfunc(char *line);

    6.如果想要在加载模块时改变某个参数的值,怎么办?

      解:1.将已经声明的变量声明为模块驱动的参数,如:

      #include <linux/moduleparam.h>         //需要加载的头件

      static   int num=88;//声明一个整型变量为88,当加载驱动模块时不指定变量的值则默认为88

      moudle_param(变量名,类型,权限)     //如:module_param(num,int ,0644)

      2.加载驱动模块时指定模块参数的具体的值

        insmod   test.ko   变量名= 值

     

      

      

     

  • 相关阅读:
    Cocos2d-x 内存管理
    Cocos2d-x 解惑
    前端最实用、全面的工具类方法
    Java web 项目获取时间的方式列举
    Win系统常用指令
    Js三级下拉列表联动
    Js数组操作
    常用网站推荐
    最常用的正则表达式
    Oracle数据库学习
  • 原文地址:https://www.cnblogs.com/edan/p/9138779.html
Copyright © 2020-2023  润新知