zoukankan      html  css  js  c++  java
  • Linux驱动知识点

     

    #

    i2c_add_driver和i2c_new_device匹配后调用i2c_probe
    i2c控制器被注册为Platform设备。

     

    #

    启动开发板,在超级终端中输入命令“cat /proc/misc”也可以查看对应的杂项设备。
    
    前面介绍过主设备号只有 256 个,而设备又非常多,所以引入了子设备号。
    
    其中misc杂项设备的主设备号是 10,在任何 Linux 系统中它都是固定的。

     

    #

    1号进程是init进程,0号进程是内核进程swapper进程。

     

    #

    自旋锁本质是忙等待,如果获取释放自旋锁的时间较久,会降低系统性能。
    不可以递归使用自旋锁。
    获取自旋锁后不可以再调用阻塞接口,
    不可以调用copy_to_usr copy_from_usr kmalloc等可能引起阻塞的函数。
    内核信号量只能在进程上下文之间使用(驱动中对应应用层进程的打开,读写,关闭等函数体),不能在中断上下文中使用。
    也就是说,进程上下文同步使用信号量。  
    而,中断上下文和进程上下文之间,进程上下文和其他内核代码之间,使用自旋锁。

     

    #

    wait_event_interruptible(wq, condition)
    用wake_up_interruptible()唤醒后,wait_event_interruptible(wq, condition)宏,
    自身再检查“condition”这个条件以决定是返回还是继续休眠,
    真则返回,假则继续睡眠,
    这个过程中若有中断,会响应执行中断函数。
    
    只有当执行wake_up_interruptible()并且condition条件成立时才会把程序从队列中唤醒。
    内核中虽然定义了很多唤醒等待队列中进程的函数,但是最终调用的都是__wake_up()
    
    #define wake_up(x)                __wake_up(x, TASK_NORMAL, 1, NULL)
    #define wake_up_nr(x, nr)        __wake_up(x, TASK_NORMAL, nr, NULL)
    #define wake_up_all(x)            __wake_up(x, TASK_NORMAL, 0, NULL)
    #define wake_up_locked(x)        __wake_up_locked((x), TASK_NORMAL)
    
    #define wake_up_interruptible(x)        __wake_up(x, TASK_INTERRUPTIBLE, 1, NULL)
    #define wake_up_interruptible_nr(x, nr)    __wake_up(x, TASK_INTERRUPTIBLE, nr, NULL)
    #define wake_up_interruptible_all(x)    __wake_up(x, TASK_INTERRUPTIBLE, 0, NULL)
    #define wake_up_interruptible_sync(x)    __wake_up_sync((x), TASK_INTERRUPTIBLE, 1)
    
    而__wake_up()函数在加锁之后调用的是__wake_up_common() .

     

    #

     * pwm_config API 详解
     * 该函数有三个参数,第一个是当前设置的pwm设备,第二个和第三个分别是占空比与周期。
     * pwm_config(pwm1, 1200000, 5000000);
     * 占空比与周期的单位均是ns, 
       其中5000000ns即表示5ms,说明一个波形的周期是5ms 
       其中1200000ns即表示1.2ms,说明一个波形中电平值为高时持续时间为1.2ms

     

    #

    内核模块无法使用glibc库函数,下面网站是常用的 linux内核库函数

    https://blog.csdn.net/qq_44710568/article/details/105382670

     


    #

     

    printk 打印等级 使用示例:

     


    #

    模块加载、卸载  /  模块间的依赖关系

     

    #

     

    #

    #


    #


    #


    #


    #


    #


    #

     

     

     

     

     

    .

    /************* 社会的有色眼光是:博士生、研究生、本科生、车间工人; 重点大学高材生、普通院校、二流院校、野鸡大学; 年薪百万、五十万、五万; 这些都只是帽子,可以失败千百次,但我和社会都觉得,人只要成功一次,就能换一顶帽子,只是社会看不见你之前的失败的帽子。 当然,换帽子决不是最终目的,走好自己的路就行。 杭州.大话西游 *******/
  • 相关阅读:
    2012年"浪潮杯"山东省第三届ACM大学生程序设计竞赛 Fruit Ninja I
    HDU 1045
    ZOJ 3946 Highway Project
    python基础知识
    粘包问题以及解决方法
    socket套接字
    网络编程 互联网协议 tcp原理
    反射 魔法方法 单例模式
    classmethod与staticmethod isinstance与issubclass
    封装 多态
  • 原文地址:https://www.cnblogs.com/happybirthdaytoyou/p/13765853.html
Copyright © 2011-2022 走看看