- 博客(25)
- 资源 (10)
- 收藏
- 关注
转载 Linux内部的时钟处理机制全面剖析
Linux内部的时钟处理机制全面剖析在 Linux 操作系统中,很多活动都和时间有关,例如:进程调度和网络处理等等。所以说,了解 Linux 操作系统中的时钟处理机制有助于更好地了解 Linux 操作系统的运作方式。本文分析了 Linux 2.6.25 内核的时钟处理机制,首
2011-08-16 16:58:35
646
原创 i2c-core信息交互(5)
前面我们已经说过i2c适配器的具体通信操作时靠struct io_algorithm来实现的。struct io_algorithm的结构非常简单只有三个成员master_xfer只要勇于i2c,smbus_xfer勇于smbus,functionality发挥适配器所提供的功能
2011-07-19 11:11:08
3147
原创 i2c-core之适配器驱动注册(4)------续
上节我们讲叙在struct i2c_adapter 注册到内核中后,内核时怎样把已经注册进系统中的i2c设备设备与刚注册进内核的适配器进行绑定的。分两种情况一是在板级用i2c_register_board_info注册的,其二是通过各种struct i2c_driver注册的。其
2011-07-14 14:14:28
2441
原创 i2c-core之适配器驱动注册(4)
在i2c-core架构中struct i2c_adapter和struct i2c_algorithm是为适配器服务的,也就是i2c总线控制器驱动。注册一个适配器驱动就是要把一个struct i2c_adapter 加入到内核中,前面我们说过i2c-core中的i2c_adapt
2011-07-13 14:36:58
2287
原创 i2c-core之初始化所作所为(3)
I2C-CORE为linux内核中i2c提供构架核心机制,提供了管理各种重要i2c要素的接口函数,例如struct i2c_adapter、struct i2c_driver等驱动的注册和注销接口,这些重要接口我们将在下一节中介绍。另外就是它还在内核中注册i2c-core时有所作
2011-07-12 15:42:48
3302
原创 linux I2C子系统构架(2)
在linux内核中I2C构架中主要元素的相互作用框图如下,用户程序可以通过struct i2c_driver 和struct i2c-dev提供的接口操作具体的i2c从设备即(struct i2_client)。上面两种用户操作设备的方法,最终都是通过 i2c-core交互,i2
2011-07-12 10:04:58
2294
原创 I2C协议概述(1)
I2C协议概述 串行总线I2C由数据线SDA和时钟线SCL构成,可实现完善的双工同步数据传输,能方便的构成多机系统和外围器件扩展系统,I2C采用器件地址的硬件设置方法,通过软件进行寻址。 I2C总线系统中,以共同挂接的I2C总线作为通信手段的每个器件均构成I2C总线 的一个器件节点。根据节点是否带有智能,可将这些节点分为主器件节点和外围器件节点。主器件节点可作为主控器,用来
2011-07-02 10:43:40
1801
原创 内核数据结构之链表
链表是内核中使用最多的数据结构之一,最新的内核(2.6.39中)该数据结构定义在中定义struct list_head { struct list_head *next, *prev;};在中定义了一些对链表常用的操作宏和内联函数: #define LIST_HEAD_INIT(name) { &(name), &(name) }
2011-06-22 21:21:00
997
转载 连接蓝牙设备
当蓝牙SIG(特别兴趣组,由爱立信等厂商组成)成立的时候,其发起者曾经指出,当蓝牙能够被集成入单芯片之中、成本下降到5美元的时候,将得到极大地普及。而今,小小的一个五号电池大小的几十块人民币的东西就可以提供这个功能了,蓝牙也真的进入了我们的生活。利用蓝牙在手机之间传送图片不是什么新鲜事,现在做的是要连接Linux主机和蓝牙手机。15.2.1 蓝牙技术概述蓝牙最早由瑞典的爱立信公司提出,其名称源于古代瑞典的一位国王,因为总吃某种果品,把牙齿染成蓝色的,被称作蓝牙(bluetooth)。那时的瑞典统治整个北欧
2011-03-10 13:17:00
1209
转载 蓝牙(BlueTooth)技术标准
<br />蓝牙(BlueTooth)技术标准在值得关注的无线技术中还有蓝牙,很多文章都爱讨论蓝牙和采用Wi-Fi技术WLAN谁会取带谁的问题,其实蓝牙做为一种短距无线技术其从开始就并没有定位于Wi-Fi技术的替代者。蓝牙技术更适用于手机和PDA等掌上设备上,而在这方面Wi-Fi芯片组比蓝牙芯片组需要消耗更多的电能,占据更多的空间。<br />一、什么是蓝牙<br /> “蓝牙”的英文为Bluetooth,是以一位千年前统一丹麦和挪威的丹麦国王哈拉德-布鲁图斯(Harald Bluetooth)的名字
2011-03-10 13:14:00
3308
原创 linux serial构架分析及驱动开发(6)
这一节分析串口核心中对写操作的处理,从用户空间调用write系统调用开始,首先执行tty_write函数,在该函数中执行do_tty_write,将用户空间的数据复制到tty->write_buf中,然后调用线路规程中的写函数即write_chain,最后write_chain调用uart_write或uart_flush_chars,再调用专用port->ops中的数据将数据发射出去,具体的操作过程看下面的源码。//uart_write现将待写入的数据写入到环形缓存state->info->
2011-01-31 11:31:00
3381
原创 linux serial构架分析及驱动开发(5)
<br />uart_close主要在tty_release和do_tty_hundup中调用,做与uart_pen相反的操作,具体源码如下:<br />/*<br /> * In 2.4.5, calls to this will be serialized via the BKL in<br /> * linux/drivers/char/tty_io.c:tty_release()<br /> * linux/drivers/char/tty_io.c:do_tty_handup()<br />
2011-01-31 10:05:00
2285
原创 linux serial构架分析及驱动开发(4)
<br /> 在uart_register_driver函数中有这样的一个函数:tty_set_operations(normal,&uart_ops),这个uart_ops就是tty_operations函数集,这里是串口操作的公用函数接口,本节及后面章节将结合串口操作的流程,来介绍上面的操作函数。<br /> <br />static const struct tty_operations uart_ops = {<br /> .open = uart_open,<br /> .close
2011-01-30 15:06:00
3381
原创 linux serial构架分析及驱动开发(3)
这一节我们将介绍一个serial驱动的实例,后面各节中也将以这个例子来分析串口各种操作的实际情景(例子是at91sam9260板子的串口驱动)。该驱动将串口看作平台(platform)设备。platform可以看作一伪总线,用于将集成于片上系统的轻量级设备与Linux设备驱动模型联系到一起,它包含以下两部分(有关platform的声明都在#include ,具体实现在drivers/base/platform.c):1、platform设备。我们需要为每个设备定义一个platform_device实例str
2011-01-26 13:46:00
5678
原创 linux serial构架分析及驱动开发(2)
上节介绍了serial驱动核心提供的重要数据结构,这一节将介绍serial核心提供给驱动开发的核心函数uart_register_driver向内核注册serial驱动(具体操作就是向内核注册一个tty_driver)以及uart_unregister_driver注销serial驱动。uart_add_one_port用于为串口驱动添加一个串口端口(在总线型设备驱动中,通常用于探测函数probe中),uart_remove_one_port用于删除一个已经添加到驱动中的串口端口(通常在卸载函
2011-01-25 16:52:00
4836
原创 linux serial构架分析及驱动开发(1)
前面介绍了tty核心分析及tty驱动开发的方法,tty设备包括串口、终端、伪终端三大类,其中终端和伪终端驱动内核都帮我们实现好了,很少需要改动。因此我们主要介绍串口驱动的开发及其在内核中的构架(其核心实现源码主要在/drivers/serial_core.c中),这一节中我们主要分析向内核中加入一个serial驱动的方法。 serial core
2011-01-25 09:51:00
5174
原创 linux tty core 源码分析(9)
linux tty 核心是构建在标准字符设备驱动之上,提供一系列功能,作为接口为终端类型设备驱动所使用。在前面的分析中我们看到 tty核心控制了通过tty设备的数据流,格式化了这些数据流,所以常规tty驱动的工作不必考虑常规操作方法与用户空间的交互,同时不同的线路规程可以虚拟的插入到任何tty设备上。从前面的各种方法分析上,我们知道tty核心从用户空间得到数据把数据发送到tty线路规程,线路规程驱动把数据传递给tty驱动程序,同时tty设备从硬件那里接收到的数据传递给tty线路规程,线路规程再传
2011-01-20 14:59:00
3299
原创 linux tty core 源码分析(8)
tty_ioctl和tty_compat_ioctl都是对设备的控制操作,比较容易理解这里就不做分析,有兴趣的读者可以自己分析。其中tty_compat_ioctl使用在用户空间为32位模式而内核空间为64位模式时将64位转化为32位的操作方式。 剩下的就是最后的操作,当关闭tty设备是调用的tty_release操作,主要是释放前面分配的资费做tty_open的反操作/** * tty_release - vfs callback for close * @inode: in
2011-01-20 10:40:00
2078
原创 linux tty core 源码分析(7)
套接字和终端通常都具有异步通知机制,即应用程序可以在数据可用的时候接收到一个信号SIGIO而不需要去轮询关注的数据。但是当对于多个数据源时,应用不能区分SIGIO的来源。为了实现异步通知机制,应用程序需要为数据源设置一个属主进程即用fcntl的F_SETOWN来设置属主进程,以及用fcntl的F_SETFL设置FASYNC标志来开启文件的异步通知机制。 终端设备是tty设备的一种,其异步通知机制的实现在驱动中是分布的: 1)首先在F_SETOWN被调用时对filp->owner赋
2011-01-19 11:32:00
1728
原创 linux tty core 源码分析(6)
使用非阻塞的IO应用程序常调用select类函数,允许进程决定是否可以对一个或多个打开的文件进行非阻塞的读取或者写入该功能的实现就要下面tty_poll操作来实现的。该功能的函数实现有一个关键的数据结构poll_table和一个关键的函数poll_wait对该结构和函数这里不深入解析只知道其功能即可/** * tty_poll - check tty status * @filp: file being polled * @wait: poll wait structures to update * * C
2011-01-18 14:38:00
2064
原创 linux tty core 源码分析(5)
tty设备的读操作tty_write首先对读操作的需求做检查,然后调用ldisc->write操作默认即write_chain函数。wrtie_chain通过tty->ops->write或者tty->ops->flush_chars把数据写入到设备中,两者都实现时后者有限。其中write_room函数是用来检测缓存于空间./** * tty_write - write method for tty device file * @file: tty file pointer * @buf: user da
2011-01-18 10:35:00
2889
1
原创 linux tty core 源码分析(4)
上面分析了用户空间从tty读数据的过程,读数据时从tty->read_buf那么tty->read_buf中的数据从而而来呢?这就是我们今天要讨论的问题。tty_struct结构中有个 struct tty_bufhead buf 成员,比如当tty串口中有数据过来时就会产生中断,tty就利用tty.buf中的成员保存中断到来的数据,在合适的机会再用tty_flip_buffer_push类函数把tty->buf中的数据保存到tty->read_buf中去,从而就达到数据来源的效果。具体源码如下:先看看下面
2011-01-17 11:32:00
4792
原创 linux tty core 源码分析(3)
前面分析了open操作,现在分析读操作tty_read。tty_read直接调用线路规程中的读操作从tty->read_buf中读取数据到用户空间。其中tty.read_head记录已读数据的起始位置,tty.read_tail记录已读数据的末尾位置,tty.read_cnt记录已读数据的数量。至于所读数据从何而来我们在下一篇中分析,下面看具体代码:/** * tty_read - read method for tty device files * @file: pointer to tty file *
2011-01-13 13:20:00
3834
1
原创 linux tty core 源码分析(2)
//下面对tty_open函数进行分析,open函数的具体操作就是。。。。。/** * tty_open - open a tty device * @inode: inode of device file * @filp: file pointer to tty * * tty_open and tty_release keep up the tty count that contains the * number of opens done on a tty. We cannot use the in
2011-01-11 14:50:00
3684
原创 linux tty core 源码分析(1)
本文以linux 2.6.27内核为基础,阅读tty core 源码并作注解,自己接触时间不长,希望与爱好者共同分享,错误之处还望指正。 linux tty core 是建立在字符设备驱动的基础之上,并为tty类型设备(串口、控制台、虚拟终端)提供一个公用的平台。所以任何一个tty设备驱动的注册都是作为一个字符设备驱动而操作的。下面我们看看代码中是如何处理的:/* 3/2004 jmc: why do these devices exist? *///tty核心默认在内核中实现的字符型tty设备驱动sta
2011-01-11 14:29:00
4599
Hands On JavaScript High Performance Build faster web apps .pdf
2020-08-05
WebAssembly in Action.pdf
2020-07-16
Programming WebAssembly with Rust by Kevin Hoffman (z-lib.org).pdf
2020-07-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人