- 博客(33)
- 收藏
- 关注
原创 linux内核并发控制
1.local_irq_disable()和local_irq_enable()都只能禁止和使能本CPU内的中断,因此,并不能解决SMP多CPU引发的竞态。因此,单独使用中断屏蔽通常不是一种值得推荐的避免竞态的方法(换句话说,驱动中使用local_irq_disable/local_irq_enable通常意味着一个bug)。2.自旋锁保护的临界区内不允许睡眠操作,但是信号量,互斥体可以。原因...
2019-05-11 12:27:54 473
原创 class注册流程
一. class结构体描述struct class{ const char *name; //class的名称,会在“/sys/class/”目录下体现 struct module *owner; struct class_attribute *class_attrs; //该class的默认attribute ...
2019-05-05 22:36:44 1192
原创 driver的注册流程
一.device_driver结构体描述struct device_driver { const char *name; //该driver的名称 struct bus_type *bus; //该driver所驱动设备的总线设备 struc...
2019-05-05 22:35:55 884
原创 device的注册流程
一. device结构体描述struct device { struct device *parent; //该设备的父设备,一般是该设备所从属的bus、controller等设备 struct device_private *p; //device的私有数据 struct kobject kobj; ...
2019-05-05 22:34:49 894
原创 bus总线相关的注册函数
一. bus_type结构体描述struct bus_type { const char *name; //总线类型的名称 struct bus_attribute *bus_attrs; //总线属性 struct device_attribute *dev_attrs; ...
2019-05-05 22:34:11 976
原创 root hub设备注册(三)
一. 申请并初始化root hub设备struct usb_device *usb_alloc_dev(struct usb_device *parent, struct usb_bus *bus, unsigned port1){ struct usb_device *dev; struct usb_hcd *usb_hcd = container_of(bus, struct...
2019-04-28 23:05:57 1459
原创 新的usb设备的接口device和接口driver的注册匹配(十一)
新的usb接口设备的dev参数,接口设备在函数usb_set_configuration中注册。intf->dev.bus = &usb_bus_type;intf->dev.type = &usb_if_device_type;intf->dev.groups = usb_interface_groups;总线是usb_bus_type,设备类型是us...
2019-04-28 22:56:55 1721
原创 新的usb设备和驱动的匹配(十)
新的usb设备的总线是usb_bus_type,类型是usb_device_type。根据前面root hub设备的device和driver的匹配可知,这里的probe函数还是调用的generic_probe。跟root hub usb设备和驱动的匹配走的流程是一样的:先选择一个合适的配置,然后调用usb_set_configuration函数去设置;根据configured可以知道有多少...
2019-04-28 22:51:00 1927
原创 注册新的usb设备(九)
在hub_events函数中,如果确实检测到端口状态有变化,这个变化有可能是物理上,也有可能是逻辑上的。那么调用hub_port_connect_change函数。这个变化主要有三种:一个是连接有变化;二个是端口本身重新使能,即所谓的enable,这种情况通常就是为了对付电磁干扰的;第三种情况就是在复位一个设备的时候发现其描述符变了,这通常对应的是硬件本身有了升级;看一下hub_port_...
2019-04-28 22:47:59 1360
原创 发现新的usb设备(八)
在创建主机控制器设备时,创建了一个定时器hcd->rh_timer,定时器的执行函数是rh_timer_func,这个定时器在后面会用到。在hub_configure函数中创建了一个中断urb请求。static int hub_configure(struct usb_hub *hub, struct usb_endpoint_descriptor *endpoint){ …… h...
2019-04-28 22:45:48 1442
原创 root hub接口device和接口driver的匹配(七)
前面root hub 接口device和接口driver都是用的总线usb_bus_type。但是这个时候device的类型是usb_if_device_type,不在是usb_device_type,也就是usb接口设备,而不是usb设备。那么注册设备的时候,会自动遍历总线上的所有驱动,看看那个驱动能匹配上;注册驱动的时候,也会遍历总线上的所有设备,看看那个设备能匹配上;usb_bus_t...
2019-04-28 22:42:50 1109 1
原创 root hub 接口device和接口driver的注册(六)
在介绍root hub usb设备和驱动的匹配时,usb_set_configuration函数会从usb设备描述符里面知道有多少个配置,多少个接口,多少个设置,多少个端口,然后会为每一个接口添加一个设备。这里看一下root hub的接口driver的注册。在usb_init函数初始化时:static int __init usb_init(void){ …… retval...
2019-04-28 22:37:34 358
原创 root hub usb设备和驱动的匹配(五)
注册driver的函数是driver_register,device_driver传参如下:new_udriver->drvwrap.for_devices = 1;new_udriver->drvwrap.driver.name = (char *) new_udriver->name;new_udriver->drvwrap.driver.bus = &u...
2019-04-28 22:35:23 2053
原创 root hub设备驱动的注册(四)
usb_init代表整个usb模块的初始化,在usb_init中:static int __init usb_init(void){ …… //注册USB device driver,device driver对应的是整个设备,而不是某个接口 retval = usb_register_device_driver(&usb_generic_driver, THI...
2019-04-28 22:31:41 370
原创 Linux USB总线设备驱动(二)
一. USB的4中传输类型控制传输:突发,非周期性,主机软件启动的请求/响应通信,通常用于命令/状态操作。等时传输:主机和设备之间的定期,连续通信,通常用于与时间相关的信息。 此传输类型还保留了封装在数据中的时间概念。 然而,这并不意味着此类数据的交付需求始终是实时的。中断传输:低频,有界延迟通信,数据量小,非周期,主要用于向主机通知设备的服务请求,它是由设备发起的通信。批量传输:非周期性...
2019-04-28 22:26:05 573
原创 USB的一些相关知识点(一)
本文是基于mini2440开发板Linux版本号是linux-2.6.32.2的学习笔记参考于:https://blog.csdn.net/qq_16777851/column/info/32105/2一. 配置,接口,设置,端口配置:每个USB设备,可以有一个或多个配置(在probe期间,需要选择一种配置)。不同的配置体现出不同的组合接口。比如一个MP4设备,可以有按键,视屏,音频,旋...
2019-04-28 22:19:19 890
原创 svn新建一个项目
1.首先在服务器上新建一个仓库mkdir test-svnsvnadmin create test-svn/2.进入conf目录配置2.1 修改svnserve.conf文件,取消注释password-db = passwd和authz-db = authz。2.2 修改 authz文件,添加各个文件夹的权限设置,比如svn项目的根目录,将我的PC端用户设置为读写权
2019-04-21 14:10:24 10320
原创 海思平台项目经验总结
手上的这个项目终于快要结束了,已经忙碌了两个多月,每天不停地加班。趁着项目尾声赶紧总结一下项目经验,不然就没时间啦。在公司上班就是这样,上一个项目还没有来得及好好消化,又要马不停蹄地投入到下一个项目中去。这个项目基于海思平台,我的职责是平台开发。项目的主要成员有平台组,CA组,bootloader组,app组等。其它几个组的开发都是基于我们平台组,因此我们组先投入,他们后续进场。下面说说项目的...
2019-04-21 14:09:54 11243 10
原创 Linux音频驱动之六:基于I2S和UDA1341的操作接口
本文是基于mini2440开发板Linux版本号是linux-2.6.32.2的学习笔记一. s3c24xx_uda134x_startup函数这个函数里面主要是获取系统时钟1.时钟来源: PCLK和 MPLLin2.PCLK需要设置分频系数,MPLLin则不需要设置分频系数3.PCLK和 MPLLin都可以设置除数,256或者3844.s3c24xx_u...
2019-04-21 14:09:18 985
原创 Linux音频驱动之五:UDA1341芯片操作接口
本文是基于mini2440开发板Linux版本号是linux-2.6.32.2的学习笔记一. uda1341的硬件信息CPU通过L3接口控制uda1341芯片,分别是:L3DATA: 数据线L3MODE: 模式控制线,置0时,地址模式;置1时,数据模式L3CLOCK: 时钟线地址模式:data[7:2]:表示的是设备地址,UDA1341TS芯片的设备地址是 000101data[...
2019-04-21 14:09:06 1014
原创 Linux音频驱动之四:I2S 总线操作接口
本文是基于mini2440开发板Linux版本号是linux-2.6.32.2的学习笔记一. I2S driver 的probe函数映射虚拟内存,IIS寄存器的起始地址是:0x55000000s3c24xx_i2s.regs = ioremap(S3C2410_PA_IIS, 0x100);获取iis时钟,并使能iis时钟s3c24xx_i2s.iis_clk = clk_ge...
2019-04-21 14:08:52 7877
原创 Linux音频驱动之三:pcm接口的调用流程
本文是基于mini2440开发板Linux版本号是linux-2.6.32.2的学习笔记一.pcm设备的open由“Linux音频驱动之一:音频驱动注册流程” 这篇文章可知,pcm device调用的是snd_pcm_dev_register函数注册的。snd_pcm_dev_registererr = snd_register_device_for_dev(devtype, pcm-&g...
2019-04-21 14:08:38 7333
原创 Linux音频驱动之二:Control接口的调用
本文是基于mini2440开发板Linux版本号是linux-2.6.32.2的学习笔记一. control接口说明Control接口主要让用户空间的应用程序(alsa-lib)可以访问和控制音频codec芯片中的多路开关,滑动控件等。二.control接口的open由Linux 音频驱动这篇文章可知,control device调用的是snd_ctl_dev_register函数注册的。...
2019-04-21 14:08:25 4041 1
原创 Linux音频驱动之一:音频驱动注册流程
本文是基于mini2440开发板Linux版本号是linux-2.6.32.2的学习笔记一.uda134x平台设备的注册static struct s3c24xx_uda134x_platform_data s3c24xx_uda134x_data = { .l3_clk = S3C2410_GPB(4), .l3_data = S3C2410_GPB(3), .l3_mode = S3...
2019-04-21 14:08:05 4301
原创 Linux uart底层设备驱动详解
本文是基于mini2440开发板Linux版本号是linux-2.6.32.2的学习笔记一. uart 基本信息S3C2440A提供了3个独立的串口。串口的操作使用中断或DMA模式。串口的接受和发送缓存为 64-byte。二. uart硬件初始化uart初始化调用的函数是:s3c24xx_init_uarts,这个函数被mini2440_map_io调用,mini2440_map...
2019-04-21 14:07:45 10206
原创 Linux LCD设备驱动详解
本文是基于mini2440开发板Linux版本号是linux-2.6.32.2的学习笔记一. LCD device硬件信息1.LCD控制器的寄存器地址从 0X4D000000开始2.lcd device的名称:s3c2410-lcdstruct platform_device s3c_device_lcd = { .name = "s3c2410-lcd", .id = ...
2019-04-21 14:07:13 4733
原创 Linux watchdog驱动详解
本文是基于mini2440开发板Linux版本号是linux-2.6.32.2的学习笔记一. watchdog硬件信息watchdog的device信息如下:static struct resource s3c_wdt_resource[] = { [0] = { .start = S3C24XX_PA_WATCHDOG, .end = S3C24XX_PA_WATCHDOG...
2019-04-21 14:06:22 1880
原创 Linux Nand Flash设备驱动详解
本文基于mini2440开发板,Linux版本号是:linux-2.6.32.2一. Nand Flash 设备注册nand flash控制器的起始地址/* NAND flash controller */#define S3C2410_PA_NAND (0x4E000000)2.该nand flash设备的名称.name = "s3c2410-nand",3.该...
2019-04-01 00:10:39 1290
原创 Linux I2C驱动详解
本文基于mini2440开发板,Linux版本号是:linux-2.6.32.2一.IIC总线device 硬件信息#define S3C2410_PA_IIC (0x54000000)static struct resource s3c_i2c_resource[] = { [0] = { .start = S3C_PA_IIC, .end = S3C_PA_IIC +...
2019-03-31 23:13:55 3910 1
原创 Linux input按键设备驱动
本文基于mini2440开发板,Linux版本号是:linux-2.6.32.2一. input模块的注册input模块被当成了一个字符设备,注册到内核中。#define INPUT_MAJOR 13static int __init input_init(void){ int err; err = register_chrdev(INPUT_MAJOR, "input"...
2019-03-31 22:52:01 1771
原创 /usr/bin下面奇怪的命令识别问题
从百问网下载了dnw工具,放在Ubuntu下执行,报了错误bash: /usr/bin/dnw: 没有那个文件或目录。这个命令能够自动补全,也设置了可执行权限。有些百思不得其解,上网百度了一下,原来是在Ubuntu64位环境下因其缺乏相应的32位运行库导致出错,需要安装ia32-libs库。运行命令sudo apt-get install ia32-libs,提示的信息如下:再次运行命令sudo a
2018-01-02 23:24:33 1013
原创 实现一个非常简单的模块编译makefile
一个很简单的模块编译makefile的编写过程如下:包含编译规则的头文件,我的项目需要包含makefile.def,coption.rules,include.rules等文件。确定目标库的路径和库的名称。目标文件目录的集合。目标库的名称的推导。进入目标文件目录生成各个库文件。调用LD将所有的库打包成一个库,我的工具是MMCP_BUILD_LIBRARY这个变量。具体的脚本编写如下,非
2018-01-02 16:57:51 855 1
原创 这些天装虚拟机踩过的那些坑
这几天在安装ubuntu的各种软件,遇到了各种各样的问题,想了想还是要记录下来吧,以免后面遇到了类似的问题自己却不记得。虚拟机访问PC机的文件的常见方式是文件共享,通过虚拟机->设置->选项->共享文件夹可以设置文件共享。但是我的选项按钮却是灰色的选不了。上网查了一下要安装VMware Tools。于是我按照如下步骤安装:cd /media/caoj/VMware\ Tools/cp VMware
2018-01-02 00:11:31 542
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人