Linux驱动程序入门 二

时间:2024-01-22 10:46:54

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

上一篇中,可以说给出了驱动程序,而此篇可以说给出了应用编程(用户层的程序),在下一篇中,将会写一篇完整的驱动程序,以及它们之间的逻辑关系。

敬请期待!

 

posted on 2018-12-10 11:28 东蓝小屋 阅读(...) 评论(...) 编辑 收藏