自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 uboot串口初始化

uboot下的串口初始化分多个步骤完成,在uboot初始化序列init_sequence[]中有三个串口相关的初始化函数。init_baudrate是用来设置串口的波特率,它首先会去uboot的环境变量里面找波特率的定义,如果找到就赋值给全局变量中的baudrate,如果环境变量中没有定义,则使用一个默认的配置值。serial_init跟具体的平台相关,以marvell平台为例,该函数定义在mv_

2016-01-15 22:46:28 1868

原创 Linux tty驱动学习 - 在用户空间设置串口参数操作流程

用户在使用串口的时候,需要在用户空间设置串口属性,一种是直接通过驱动的ioctl去操作,但常用的方法是使用glibc的库函数来操作,比如常用的tcsetattr()和tcgetattr()函数。以tcsetattr()为例,该函数定义在glibc的tcsetattr.c中。tcsetattr()的第一个参数为打开的串口设备描述符,第三个参数为要设置的串口新属性,第二个参数为设置操作的模式,TCSA

2016-01-14 18:24:51 5208 1

原创 Linux tty驱动学习 - UART驱动的read操作流程

在用户空间对tty设备进行读操作,经过系统调用进入到tty核心层执行的第一个函数是tty_read()。在tty_read()函数中,从文件描述符file的私有数据结构中获得tty_struct,然后再从tty_struct中获取线路规程描述符。取得线路规程描述符后,直接调用线路规程的read()函数。static ssize_t tty_read(struct file *file, cha

2016-01-12 11:23:59 7792 2

原创 Linux tty驱动学习 - UART驱动的write操作流程

从tty核心层到最后把数据写入到硬件,整个操作流程如下:tty_write() -> do_tty_write() -> n_tty_write() -> uart_write() -> serial8250_start_tx() -> serial_out()。也就是从tty核心层到线路规程,然后到tty驱动层,再到UART驱动层,最后到UART端口的输出寄存器中。首先看tty核心的写操作t

2016-01-06 19:43:59 8023 2

原创 Linux tty驱动学习 - UART驱动的open操作

/dev/ttyS*属于字符设备,所以在用户空间调用open系统调用打开该类设备,进入到tty核心层后调用的第一个函数是tty_fops中的tty_oepn。tty_open的前面三个判断是根据设备主次设备号来判断设备的类型,分别为/dev/tty(5,0),/dev/tty0(4.0),/dev/console(5,1),分别表示当前控制终端,当前虚拟终端,当前控制台终端。而uart设备对应的设

2016-01-02 20:18:18 3711 1

原创 Linux tty驱动学习 - UART驱动注册

8250/16550系列芯片为常见的UART芯片,该类芯片的驱动文件为8250.c,位于内核源码的/drivers/serial/目录下面。serial8250_init为该驱动的入口函数,nr_uarts和UART_NR在内核配置中定义,跟具体的平台相关,通常定义为4。由于CONFIG_SPARC没有被定义,所以做的第一件事情就是注册一个名为serial_8250_reg的UART驱动。stat

2015-12-28 19:05:17 1461

原创 Linux tty驱动学习 - 串口通信,UART及UART驱动概述

数据在单条传输线上,一位接一位地按顺序传送的方式称为串行通信。串行通信有两种方式:异步方式和同步方式。实现串行通信的接口叫串行接口,它主要的功能就是实现CPU与输入输出设备之间的串并行转换。把从CPU传送过来的并行数据转换成串行从输出设备输出,以及把从输入设备输入的串行数据转换成并行数据送给CPU。串行通信中,因为数据是一位一位地传输,所以为了是接收端能够识别接收到每位数据的具体意思,收发双方就需

2015-12-21 19:46:26 3734 1

原创 Linux tty驱动学习 - LDD3的tty驱动

Linux中的tty驱动分三大类:串口,终端,PTY伪终端,控制台和PTY驱动内核已经编写好,所以在开发移植过程中接触到的通常是串口驱动。linux的tty驱动框架如下图所示,最上层的是tty核心层,该层负责把tty驱动注册成字符设备驱动,并提供使用接口给用户空间。tty线路规程用来实现用户空间和设备驱动之间的数据格式转换,比如采用UART接口的3G模块就会用到线路规程里面的ppp_ldisc设置

2015-12-14 18:41:01 977

原创 Linux GPIO驱动 - GPIO通用层

如果在内核配置的时候有打开CONFIG_GPIO_SYSFS标志,内核就会在/sys目录下导出GPIO的用户空间操作接口。gpiolib_sysfs_init(drivers/gpio/gpiolib.c)是gpio lib的初始化函数,该函数首先在/sys/class/目录下面创建一个gpio的class,然后把所以注册到gpio lib的控制器导出到/sys/class/gpio/目录下面。

2015-11-26 18:50:49 1364

原创 Linux GPIO驱动 - 硬件及硬件抽象层

在很多的SOC芯片里,GPIO硬件接口都是和其它硬件接口共用Pin脚,然后通过特定的寄存器去设置Pin使用时的类型。比如目前手上的项目使用的是Marvell的SOC芯片,该芯片上有50个多功能Pin脚(MPP:Multi-Purpose Pins),每个Pin都可以配置成不同的功能。SOC提供了7个32位的寄存器用来配置MPP Pin的类型,寄存器的每4位对应一个Pin,一个寄存器控制可以8个Pi

2015-11-17 18:30:58 1927

原创 Linux GPIO驱动 - 驱动框架概述

GPIO是嵌入式开发中最常见的接口,之前自己就有写过小的GPIO驱动,提供ioctl接口给用户空间操作。但直到最近才发现Linux自身就有完善的GPIO驱动框架,并且通过sysfs向用户空间提供操作接口。Linux的GPIO驱动框架层次及数据结构如下:最上层是用来向向用户空间提供接口,用户可以通过该接口方去控制GPIO PIN脚。GPIO通用接口层主要是维护了一个GPIO PIN的数组gpio

2015-11-11 18:37:06 1373

原创 碎碎念-新的开始

今天又去参加了场面试,从决定要换工作开始,这已经是第三次去参加面试了。上周一接到第一个面试通知,是做无人机方面的内核驱动开发,当时想着这是工作后第一次参加面试,于是还特意在家里准备了一番。把简历上提到的技术和项目都重新过了一遍,同时自己在房间里把自我介绍对着墙壁念了好几遍。到公司前台报道,被安排先做面试,面试题主要跟C语言和嵌入式相关,做完后自我感觉良好,笔试之后是HR的面试,在跟HR谈期待薪水的

2015-11-09 22:28:05 451

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除