• 应用程序、库、内核、驱动程序的关系

    image.png
    Linux软件系统的层次关系
    image.png
    示例:

    1. 应用程序使用库提供的open函数打开代表LED的设备文件
    2. 库根据open函数传入的参数执行”swi”指令(ARM架构的软件中断指令),引起CPU异常进入内核
    3. 内核的异常处理函数根据参数找到相应的驱动程序,返回一个文件句柄给库,进而返回给应用程序
    4. 应用程序得到文件句柄后,使用库提供的write或ioctl函数发出控制命令
    5. 库根据write或ioctl函数传入的参数执行”swi”指令,引起CPU异常进入内核
    6. 内核的异常处理函数根据这些参数调用驱动程序的相关函数,点亮LED

    image.png
    image.png

    • 与应用程序不同,驱动程序从不主动运行
    • 驱动程序被动运行:根据应用程序的要求进行初始化、读写

    image.png

    • Linux驱动程序分类

    image.png
    image.png
    image.png
    块设备驱动程序特殊之处:

    image.png

    image.png

    • 驱动程序开发步骤

    image.pngimage.png
    **