linux学习之0414

原创 2018年04月16日 09:20:18

一般来说,无论是C, C++还是pas,首先要把源文件编译成中间代码文件,
在windows下也就是 .obj文件,UNIX下是.o文件,即Objuct File,这个动作
叫做编译(compile)。


设备驱动充当了硬件和应用软件之间的纽带,它使得应用软件只需要调用系统
软件的应用编程接口(API)就可以让硬件去完成要求的工作。


在没有操作系统的情况下,工程师可以自己定义接口。


在有操作系统的情况下,设备驱动的架构则有相应的操作系统定义,驱动工程师
必须按照相应的架构设计设备驱动,这样,设备驱动才能良好地整合到操作系统的
内核中。


应用程序通过write()、read()等函数读写文件就可以访问各种字符设备和块设备,
而不用管设备的具体类型和工作方式。


Linux将存储器和外设分为3个基础大类:
字符设备
块设备
网络设备


字符设备:
指那些必须以串行顺序依次进行访问的设备,如触摸屏、磁带驱动器、鼠标等。


块设备:
可以用任意顺序进行访问,以块为单位进行操作,如硬盘、软驱等。


字符设备不经过系统的快速缓冲,而块设备经过系统的快速缓冲。
但是,字符设备和块设备并没有明显的界限,如flash设备符合块设备的特点,
但是我们仍然可以把它作为一个字符设备来访问。






除网络设备外,字符设备与块设备都被映射到Linux 文件系统的
文件和目录,通过文件系统的系统调用接口open()、write()、read()、close()等函数即
可访问字符设备和块设备


应用程序可以使用Linux的系统调用接口编程,也可以使用C库函数,出于代码
可移植性的考虑,后者更值得推荐。C库函数本身也通过系统调用接口而实现,如C
库函数中的fopen()、fwrite()、fread()、fclose()分别会调用操作系统API的open()、write()、
read()、close()函数。


Linux 系统下的LED驱动


light_init() light_on() light_off()
这些函数将被LED驱动中独立于设备的针对内核的接口进行调用。


struct light_dev
{
struct cdev cdev;
unsigned char value;
}


struct light_dev *light_devp;


int light_open(struct inode *inode, struct file *filp)


int light_release(struct inode *inode, struct file *filp)


ssize_t light_read(struct file *filp, char _ _user *buf, size_t count, loff_t*f_pos)


ssize_t light_write(struct file *filp, const char _ _user *buf, size_t count, loff_t *f_pos)


int light_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg)


struct file_operations light_fops =
{
 .owner = THIS_MODULE,
 .read = light_read,
 .write = light_write,
 .ioctl = light_ioctl,
 .open = light_open,
 .release = light_release,
};


static void light_setup_cdev(struct light_dev *dev, int index)
/*设备字符设备cdev结构体*/
static void light_setup_cdev(struct light_dev *dev, int index)
/*模块加载函数*/
int light_init(void)
/* 分配设备结构体的内存*/
light_devp = kmalloc(sizeof(struct light_dev), GFP_KERNEL);
/*模块卸载函数*/
void light_cleanup(void)




中央处理器的体系架构可以分为两类,一类为冯.诺依曼结构,一类为哈弗结构。
冯.诺依曼结构:
也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。
程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置,因此程序指令和数据的宽度相同。


哈弗结构将程序指令和数据分开存储,指令和数据可以有不同的数据宽度。
此外,哈弗结构还采用了独立的程序总线和数据总线,分别作为CPU与每个存储器之间的专用通信路径,
具有较高的指令效率。


中央处理器也可以分为两类,即RISC(精简指令集计算机)和CISC(复杂指令集计算机)。
CSIC 强调增强指令的能力、减少目标代码的数量,但是指令复杂,指令周期长
而RISC强调尽可能减少指令集、指令单周期执行,
但是目标代码会更大。ARM、MIPS、PowerPC等CPU内核都采用了RISC指令集。
目前,RISC和CSIC的融合非常明显。


以太网接口由MAC(以太网媒体接入控制器)和PHY(物理接口收发器)组成。
MAC和PHY之间采用MII(媒体独立接口)连接,

































版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/baiyibin0530/article/details/79956204

0414

向消息队列发送一个消息(FIFO),OSQPost() 程序清单 L6.23是OSQPost()函数的源代码。在确认事件控制块是消息队列后 [L6.23(1)],OSQPost()函数检...
  • qq_36239641
  • qq_36239641
  • 2017-04-14 15:57:12
  • 73

0414写作01

 人类的活动范围扩大造成了大量生物的灭绝地球上的任何一种生物都需要被尊重,同时他们也是人类宝贵的财富,我们每一个人都应该意识到生物多样性的重要性并且最少应该做到不破坏环境,不伤害动 我认为建立生物保护...
  • qq_33781658
  • qq_33781658
  • 2018-04-16 22:23:50
  • 0

trigger练习0414

create or replace trigger "档号重复提示" before insert on s3_main_wsda for each row declare hj number; ...
  • luxiaopengpeng
  • luxiaopengpeng
  • 2016-04-14 16:41:06
  • 319

linux学习过程感悟

linux系统学习感悟
  • u013289746
  • u013289746
  • 2017-04-14 11:45:22
  • 586

Linux学习规划

嵌入式Linux操作系统学习规划ARM+LINUX路线,主攻嵌入式Linux操作系统及其上应用软件开发目标:   (1) 掌握主流嵌入式微处理器的结构与原理(初步定为arm9)   (2) 必须掌握一...
  • VC_Tony
  • VC_Tony
  • 2008-03-09 21:59:00
  • 1898

Linux简介及Linux学习路线图

一、Linux 为何物Linux 就是一个操作系统,就像你多少已经了解的 Windows(xp,7,8)和 Max OS ,至于操作系统是什么,就不用过多解释了,如果你学习过前面的入门课程,应该会有个...
  • CoderJYF
  • CoderJYF
  • 2016-12-08 09:47:58
  • 25004

Linux技术学习路线

为什么要学习Linux? 为什么学Linux,每个人都有自己的理由: Linux是免费的不用花一分钱,能够节约大笔的成本;Linux是开源的,你可以根据自已的需要修改源代码;Linux是开放...
  • wuxiaobingandbob
  • wuxiaobingandbob
  • 2016-03-23 09:09:33
  • 1686

浅谈如何学习linux(强烈推荐)

一.为什么要学linux?  当然最重要是爱好和兴趣!如果你这种必要学,或者根本不喜欢,请不要浪费时间,你学也学不好!  二.起步  你应该为自己创造一个学习linux的环境--在电脑上装一个l...
  • A09211008
  • A09211008
  • 2013-12-05 22:30:07
  • 4901

菜鸟的Linux历程-学习大纲

在Linux学之初,难免会不适应,不理解Linux有什么用途,不知道从何学起。今天,笔者就为广大Linux的初学者罗列了步入Linux世界需要掌握的最基本的知识列表。Linux基本认识: |-...
  • qq_14912373
  • qq_14912373
  • 2015-10-03 16:17:28
  • 715

linux学习资料大全

  • 2010年09月25日 21:56
  • 19.8MB
  • 下载
收藏助手
不良信息举报
您举报文章:linux学习之0414
举报原因:
原因补充:

(最多只允许输入30个字)