如何写好一个驱动程序呢? 难吗?
答案是写好一个驱动程序很简单. 看到这答案是不是很开心啊?
在 Linux 系统中, 有一个做核心的概念: 一切功能皆文件.
意思就是: 比如你想点亮一个 LED 灯, 你只需要打开一个含 点亮 LED 功能的文件即可,
如果你玩过单片机的话, 在点亮一个 LED 时, 直接来个 sbit LED = P2^0; LED = 0; 就行了.
如何理解文件呢? 在这就得引入一个叫 文件 io 的概念:
文件 io 常用的函数有:
open | creat | close | lseek | read | write |
/**********************************************************************************/
函数 open: 调用 open 函数可以打开或创建一个文件.
- int open(const char *path, int oflag, .../*mode_t mode*/);
- /**********************************************************************************/
函数 creat: 调用 creat 函数创建一个新文件
- int creat(const char *path, mode_t mode);
- /**********************************************************************************/
函数 close: 调用 close 函数关闭一个打开文件
- int cloae(int fd);
- /**********************************************************************************/
函数 lseek: 调用 lseek 显示地为一个打开文件设置偏移量
- off_t lseek(int fd, off_t offset, int whence);
- /**********************************************************************************/
函数 read: 调用 read 函数从打开文件中读数据
- ssize_t read(int fd, void *buf, size_t nbytes);
- /**********************************************************************************/
函数 write: 调用 write 函数向打开文件写数据
- ssize_t write(int fd, const void *buf, size_t nbytes);
- /**********************************************************************************/
用文件 io 写一个简单的程序:
- #include "apue.h"
- #include <fcntl.h>
- char buf1[] = "linuxkernelmodule";
- char buf2[] = "LINUXKERNELMODULE";
- int mian(void)
- {
- int fd;
- if((fd = creat("linuxkernel", FILE_MODE)) < 0)
- err_sys("creat error");
- if(write(fd = write(fd, buf1, 17) != 17)
- err_sys("buf1 write error");
- /*offset now = 10*/
- if(lseek(fd, 10, SEEK_SET) == -1)
- err_sys("lseek error");
- /*offset now = 13838*/
- if(lseek(fd, 13838, SEEK_SET))
- err_sys("lseek error");
- /*offset now = 13938*/
- if(write(fd, buf2, 17) != 17)
- sys_err("buf2 write error");
- exit(0);
- }
通过 gcc 编译成可执行文件 a.out
通过上面的编程 (应用编程, 用户编程, App), 就可以很直观地看出在 Linux 上编程, 和在单片机上的编程是完全不一样的.
在学习 linxu 嵌入式编程的时候, 如果之前学过单片机的, 需要摒弃学习单片机的那种思想, 接受一切皆文件的 Linux 编程思想.
可以结合上一篇: Linux 驱动程序入门 一 来理解: https://www.cnblogs.com/dl04301201/articles/10092875.html
来源: https://www.cnblogs.com/dl04301201/p/10095478.html