linux驱动
文章平均质量分 59
jun7118
这个作者很懒,什么都没留下…
展开
-
IEEE1588
## 精度影响因素:(精度要求130ns)SLAVE端:timer的ts记录点,分别为phy,mac,协议栈(软件timer),精度递减。1、硬件Timer(phy,mac)。 1、内部Timer的tick最小粒度。 如果是100M频率,则时间粒度10ns,则Slave自己固有误差(2~3)×10ns,大约20ns左右。 2、时钟频率源(晶振)的精确度,PPM...原创 2020-05-24 11:32:23 · 1395 阅读 · 0 评论 -
PCIE
物理主体: host switch endpointhost: cpu, pcie rc(root complex) core, ram, 总线仲裁器endpoint:pcie endpoint core, ram, io dev逻辑主体: host cpu, 内存空间, io空间endpoint: 配置空间, bar空间(io空间, 内存空间)顶层逻辑,将endpoint的 内...原创 2020-05-24 11:28:15 · 248 阅读 · 0 评论 -
gadget 驱动
首先要知道普通usb是主从模式的, 一切通信都是由主机控制的,从机没有控制权,也有主从转换的情况。主机通过引脚触发的中断来知道usb设备的插入,然后发起握手,所以gadget作为从机需要有一个引脚来触发主机的引脚的中断,pullup引脚。主机对从机的握手是通过与从机的ep0的控制节点通信来实现的,来来回回有几次握手,握手会改变从机的一些配置。握手的时候需要知道从机的配置信息,这些信息都原创 2016-11-12 12:08:20 · 558 阅读 · 0 评论 -
char_dev
static struct char_device_struct {struct char_device_struct *next; //链表指向下一个对象unsigned int major; // 主设备号unsigned int baseminor; //次设备号基准int minorct; //次设备数量char name[64]; //名字struct cde原创 2016-09-26 19:05:00 · 313 阅读 · 0 评论 -
bus device driver
struct bus_type {const char *name; //名字const char *dev_name;struct device *dev_root; //根设备struct bus_attribute*bus_attrs; //总线属性struct device_attribute*dev_attrs; //设备属性struct原创 2016-09-25 10:25:07 · 257 阅读 · 0 评论 -
kobject kset klist
struct kobject {const char *name; // 名字struct list_headentry; // 用来 挂在 kobj->kset->list上面用的struct kobject*parent; // 父kobjstruct kset *kset; // 所属ksetstruct kobj_type*ktype; //原创 2016-09-25 10:24:41 · 497 阅读 · 0 评论 -
翻译sysfs.txt
sysfs是一个内存文件系统,他提供了内核与用户之间的数据属性和连接交互,sysfs与kobject联系紧密。内核编译的时候要 CONFIG_SYSFS mount -t sysfs sysfs /sys 每一个注册的kobject都有一个目录在sysfs,这个目录地址在kobj的父对象目录下,表征为层级,顶层目录表现为最高层级。sysfs_dirent原创 2016-09-25 10:24:18 · 347 阅读 · 0 评论 -
计算机社会学
每一台嵌入式系统可以比喻成 一个公司(或者车间),应用程序是老板,由若干原材料(数据流),生产出产品(数据流处理后打包),实现某种一些需求(输送给下游)。linux广泛的支持绝大部分的平台,无论是哪个公司都可以胜任,所以他是一个服务端,作为服务端就必定会要支持所有管理办法(协议工序),当然总集是一个有限的集合,他只管抽象不管细节,每个公司的员工都各不相同,但都必须要满足特定要求有相应技能,原创 2016-08-13 23:43:34 · 675 阅读 · 0 评论 -
dma
dma 是soc上的硬件模块之间数据通信的接口,基本所有模块上都用到了它,他们都是固定的api,虽然只要知道api怎么调用就够用了,但是还是有必要看看底层的逻辑是什么。documentation/dmaengine.txtdocumentation/dma-api.txtdocumentation/dma-apt-howto.txtdma_alloc_coheren原创 2016-08-13 23:44:34 · 722 阅读 · 0 评论 -
linux 总线 设备 驱动
bus 是容器 中间有两个链表 分别连接了 device、 和driver device 是一个抽象出来的 设备 提供fops open read write等等操作 他调用 driver提供的接口 面向接口编程driver 是对芯片的controller进行操作, 特定的逻顺序的操作寄存器 来实现特定功能 玩过单片机的都知道 一般驱动开发 就是写这部分de原创 2016-04-03 19:37:25 · 249 阅读 · 0 评论 -
i2c驱动
i2c-at91.cat91_twi_probe(){ 为对象开辟空间 初始化completion 获取地址资源 地址映射 获取中断资源 申请中断 atmel_twi_interrupt() 获取时钟使能时钟 计算频率 初始化各个寄存器 填充adapter结构体 at91_twi_al原创 2016-06-27 20:36:46 · 277 阅读 · 0 评论 -
spi驱动
spi-s3c24xx.cs3c24xx_spi_probe(){ spi_master开辟空间 初始化completion 初始化fiq 填充spi_master 填充bitbang s3c24xx_spi_txrx() 获取地址资源 映射地址 获取中断资源 申请中断 获取时原创 2016-06-27 20:37:31 · 231 阅读 · 0 评论 -
i2c-dev和spi-dev
i2c-dev.ci2c_dev_init(){ 注册字符设备 i2cdev_fops 创造i2c_dev_class 用来创造设备 device_create 创建总线事件提醒 i2cdev_notifier -> i2cdev_notifier_call -> i2cdev_attach_adapter 链接已经存在的适配器}原创 2016-06-30 19:47:58 · 567 阅读 · 0 评论 -
adc和pwm
at91_adc.cat91_adc_probe(){ 申请iio_dev 从中提取 at91_adc_state 填充at91_adc_state 填充io_dev at91_adc_info -> at91_adc_read_raw() 获取中断资源申请中断 at91_adc_interrupt() 计算并使能时钟原创 2016-06-30 19:49:51 · 1376 阅读 · 0 评论 -
platform
platform.cplatform_bus_init(){ 清理老的资源 注册device platform_bus 注册bus platform_bus}platform_driver_register(){ 填充platform_drv_probe,platform_drv_remove,platform_drv_shutdow原创 2016-06-30 19:51:27 · 231 阅读 · 0 评论 -
翻译 /documentation/kobject.txt
Everything you never wanted to know about kobjects, ksets, and ktypesGreg Kroah-Hartman Based on an original article by Jon Corbet for lwn.net written October 1,2003 and located at http:原创 2016-06-30 19:54:15 · 363 阅读 · 0 评论 -
ldm内核驱动模型
linux内核作者通过kobject和kset来提供构建层级和维护引用计数的灵活通用服务。在此基础上创建bus,device,driver抽象模型,用于构造各个子系统,抛弃了原生态的离散的设备模型。platform 是虚拟子系统,它承载了其他子系统的一些资源,它的device集中在arch下,可根据config进行配置,在系统up的时候完成注册,其他子系统的驱动在其init函数里面注册plat原创 2016-07-03 10:21:16 · 467 阅读 · 0 评论