Linux驱动程序入门 二
如何写好一个驱动程序呢?难吗?
答案是写好一个驱动程序很简单。看到这答案是不是很开心啊?
在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写一个简单的程序:
1 #include "apue.h" 2 #include <fcntl.h> 3 4 char buf1[] = "linuxkernelmodule"; 5 char buf2[] = "LINUXKERNELMODULE"; 6 7 int mian(void) 8 { 9 int fd; 10 11 if((fd = creat("linuxkernel", FILE_MODE)) < 0) 12 err_sys("creat error"); 13 if(write(fd = write(fd, buf1, 17) != 17) 14 err_sys("buf1 write error"); 15 16 /*offset now = 10*/ 17 if(lseek(fd, 10, SEEK_SET) == -1) 18 err_sys("lseek error"); 19 20 /*offset now = 13838*/ 21 if(lseek(fd, 13838, SEEK_SET)) 22 err_sys("lseek error"); 23 24 /*offset now = 13938*/ 25 if(write(fd, buf2, 17) != 17) 26 sys_err("buf2 write error"); 27 28 exit(0); 29 }
通过gcc编译成可执行文件 a.out
通过上面的编程(应用编程、用户编程、APP),就可以很直观地看出在 linux 上编程,和在单片机上的编程是完全不一样的。
在学习 linxu 嵌入式编程的时候,如果之前学过单片机的,需要摒弃学习单片机的那种思想,接受一切皆文件的Linux 编程。
可以结合上一篇:Linux 驱动程序入门 一 来理解:https://www.cnblogs.com/dl04301201/articles/10092875.html
上一篇中,可以说给出了驱动程序,而此篇可以说给出了应用编程(用户层的程序),在下一篇中,将会写一篇完整的驱动程序,以及它们之间的逻辑关系。
敬请期待!