一、传输数据
APP和驱动:
- copy_to_user
- copy_from_user
驱动和硬件:
- 各个子系统的函数
- 通过ioremap映射寄存器地址后,直接访问寄存器
二、APP使用驱动的四种方式
驱动程序:提供能力,不提供策略
- 非阻塞(查询)(应用程序访问底层驱动时(read、write时),驱动没有数据不等待,直接返回错误)
- 阻塞(休眠-唤醒)(底层驱动没有数据时,应用程序休眠,等底层驱动有数据,通过中断来唤醒应用程序)
- poll(定个闹钟)(应用程序调用poll函数导致驱动中的drv_poll函数被调用,唤醒有两个条件,时间到或者中断)
- 异步通知(底层驱动没有数据时,应用程序休眠,等底层驱动有数据,通过中断发送信号来唤醒应用程序)
fd = open(argv[1], O_RDWR | O_NONBLOCK);//第二个参数O_NONBLOCK表示以非阻塞的方式去打开驱动文件,在驱动读函数里面,数据的buf是空的,并且flag是 O_NONBLOCK马上返回错误(如果驱动程序不进行判断以什么方式打开,就无法实现非阻塞方式打开驱动