linux驱动
烽火
漫长的研发路
展开
-
Linux 2.6.32系统中基于dm6467平台ASOC架构的音频驱动
花了大概40天时间从零开始调音频驱动到目前的基本成功,中间也走了不少弯路,今天抽点时间把整个流程走下来,希望以后能作为参考。 1.dm6467平台sdk_3_10版本中使用到的audio模块框架采用asoc模式,asoc框架主要包含4部分内容: (1)codec模块驱动:如,visiondigi板子上采用tlv320aic23芯片,代码中文件tl转载 2012-10-18 11:21:01 · 1065 阅读 · 0 评论 -
linux内存相关情况
Linux内核是如何知道物理内存大小的?在嵌入式系统中物理内存的实际大小是由bootloader传递给内核的,bootloader传递给内核的内存大小值是由开发人员根据内存的实际大小配置的,有改动就需要重新编译,而且并不是所有的物理内存内核都能用,有相当一部分内存会留给私有模块(像camera、gpu等),这些内存内核自身访问不到。uboot相关的linux内存配置:(原创 2013-08-22 15:09:25 · 759 阅读 · 0 评论 -
关于linux mmc/sd驱动程序架构
关于linux mmc/sd驱动程序架构今天花了时间简单看了mmc/sd部门内容和代码,我觉得形式上,这个部分和i2c非常相似系统也是分成core层,host层(对应i2c的adapter),设备层如果这样讲,那么core层主要功能应该是提供host注册,总线注册,设备注册的几个方法以及所谓sdio总线接口的算法了。host层已经是注册一个platform设备,其中应该提供主要sd转载 2013-08-16 13:29:43 · 750 阅读 · 0 评论 -
编译RT5572 RT3572
问题一:scripts/Makefile.build:49: *** CFLAGS was changed in "/opt/DPO_RT5572_LinuxSTA_2.6.1.3_20121022/os/linux/Makefile". Fix it to use EXTRA_CFLAGS. Stop.解决方式:make KBUILD_NOPEDANTIC=1Ther原创 2013-08-28 13:26:25 · 3660 阅读 · 0 评论 -
MTD NANDFLASH驱动相关知识介绍
MTD,Memory Technology Device即内存技术设备字符设备和块设备的区别在于前者只能被顺序读写,后者可以随机访问;同时,两者读写数据的基本单元不同。字符设备,以字节为基本单位,在Linux中,字符设备实现的比较简单,不需要缓冲区即可直接读写,内核例程和用户态API一一对应,用户层的Read函数直接对应了内核中的Read例程,这种映射关系由字符设备的file_op原创 2013-09-04 14:24:34 · 5036 阅读 · 0 评论 -
struct nand_ecclayout 之解义 ,eccbytes,eccpos,eccfree
内核的nand flash驱动真可谓用“日新月异”来形容,今儿个刚写完的驱动,等到明天下个新内核放进去,又不好使了,shit!这里讨论下struct nand_ecclayout,即nand 的ecc布局问题,基于2.6.32-rc2.该结构体定义如下: struct nand_ecclayout {uint32_t eccbytes; //表示使用几转载 2013-09-04 11:13:00 · 1183 阅读 · 0 评论 -
linux内核中,对读取文件的使用
由于内核中没有对应用编程中对文件的打开读写操作的函数,下面介绍一种方式来使得内核中可以对某个文件进行读写:定义一个静态常量数组,如下:static const UInt8 gVps_tvp5158Patch[] = {#include "vpsdrv_tvp5158Patch_v2_03_02.h"};再对整个数组中变量进行操作:Int32 Vps_tvp5158Pat原创 2013-10-12 11:10:22 · 948 阅读 · 0 评论 -
linux串口驱动
驱动结构主要包括下面三个部分:举例dm368串口驱动:包含主要三个文件:drivers/serial/serial_core.c、drivers/serial/8250.c、arch/arm/mach-davinci/serial.c1、serial.c程序是负责想系统注册串口设备。2、8250.c是serial.c注册的设备对应的驱动程序。3、serial_core.c设备无原创 2013-10-29 15:53:28 · 953 阅读 · 0 评论 -
dm365 驱动gpio使用
1、为了方便使用ti内核中提供的配置引脚复用的函数davinci_cfg_reg(),首先在arch/arm/mach-davinci/dm365.c文件中static const struct mux_config dm365_pins[] = {数组添加如下内容:MUX_CFG(DM365, GPIO84, 1, 16, 1, 1, false)原创 2013-11-25 11:32:04 · 1848 阅读 · 0 评论 -
BT656/BT601/BT1120协议以及DM365/DM355/DM6467上使用的YUV颜色空间说明
ITU-R BT.601和ITU-RBT.656国际电信联盟(International Telecommunication Union)无线通信部门(ITU-R)制定的标准。严格来说,ITU-R BT.656应该是隶属ITU-R BT.601的一个子协议。ITU-R BT.601是演播室数字电视编码参数标准,而ITU-R BT.656 则是ITU-R BT.601附件A中的数字接口标准,用于转载 2013-12-06 15:37:39 · 5889 阅读 · 0 评论 -
linux I2C设备驱动
linux I2C设备驱动主要包括两部分:设备注册、驱动程序1、设备注册主要涉及到一个结构体和一个注册函数:struct i2c_board_info {char type[I2C_NAME_SIZE];unsigned shortflags;unsigned shortaddr;void *platform_data;struct dev_archdata原创 2013-12-05 17:25:00 · 870 阅读 · 0 评论 -
浅谈 Linux 内核开发之网络设备驱动
浅谈 Linux 内核开发之网络设备驱动网络设备介绍网络设备是计算机体系结构中必不可少的一部分,处理器如果想与外界通信,通常都会选择网络设备作为通信接口。众所周知,在 OSI(Open Systems Interconnection,开放网际互连)中,网络被划分为七个层次,从下到上分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。我们所讲的网络设备也包括两个层次,一层叫做转载 2013-12-26 15:40:52 · 929 阅读 · 1 评论 -
linux wifi拨号软件移植wpa_supplicant、openssl
因为现在的无线wifi网络大多是wpa加密。所以需要移植wpa_supplicant工具。一、下载源码 下载wpa_supplicant-0.7.3.tar.gz (openssl用到0.7.3提供的补丁) #tar xvfz wpa_supplicant-0.7.3.tar.gz 下载www.openssl.org原创 2012-11-21 14:01:39 · 1882 阅读 · 0 评论 -
arm-linux-gcc/ld/objcopy/objdump参数总结
arm-linux-gcc/ld/objcopy/objdump参数总结arm-linux-gcc -wall -O2 -c -o $@ $ -o 只激活预处理,编译,和汇编,也就是他只把程序做成obj文件 -Wall 指定产生全部的警告信息 -O2 编译器对程序提供的编译优化选项,在编译的时候使用该选项,可以使生成的执行文件的执行效率提高 -c 表示只要求编译器进行编译,转载 2014-12-29 21:03:25 · 733 阅读 · 0 评论 -
Ubuntu下搭建tftp服务器最简单方法
今天开始调试ARM的板子,要通过tftp下载到板子上,所以又要配置tftp服务器,真的烦死了… (本人酷爱装系统,所以经常都要搞配置)因为之前已经在Ubuntu下搭建过很多次tftp服务器了,但是一直记不住那一个配置文件的名字(记性太差),所以每次都要百度。可是每次百度出来的结果都不一样,而且出入很大,有的过程相当的繁琐,不仅很麻烦,而且搞到最后还没有配置成功。所以干脆写个日志记下转载 2015-03-07 20:10:19 · 686 阅读 · 0 评论 -
ssh移植 8168
1、下载下面3个文件 openssh-4.6p1.tar.gz http://www.openssh.com/portable.html openssl-0.9.8e.tar.gz http://www.openssl.org/source zlib-1.2.3.tar.gz http://www.zlib.net原创 2013-03-01 14:30:42 · 669 阅读 · 0 评论 -
linux内核DMA内存分配
linux系统启动过程中,会初始化整个内核地址空间,将其划分为各个类型段,其中包括物理内存映射区(又称之为逻辑地址映射区)、虚拟内存分配区、高端页面映射区、系统保留映射区、DMA映射区(这个类似物理内存映射区,其映射的物理地址是连续的)这几个区域等等,linux内核在启动的时候通过arch/arm/include/asm/memory.h中的CONSISTENT_DMA_SIZE宏配置内核地址空间原创 2013-07-24 14:45:05 · 5077 阅读 · 0 评论 -
BT656、601、BT1200、709
601是SDTV的数据结构 656是SDTV的interface709是HDTV的数据结构 1120是HDTV的interface原创 2013-04-15 14:41:01 · 2817 阅读 · 0 评论 -
USB_ModeSwitch 介绍
USB_ModeSwitch 介绍(转)1.简介usb_modeswitch是一个模 式切换工具,用于控制含有多个USB子设备的USB设备。如果你使用过3G的无线上网卡,你应该会很清楚的了解到这一点。具体点来说,目前一些新的USB 设备在内部含有windows驱动,当你第一次插入的时候,它作为一个闪存,并提示你安装驱动。在安装驱动之后,驱动会自动切换USB设备的模式转载 2013-04-08 10:23:32 · 10681 阅读 · 0 评论 -
linux MTD架构
上图中,MTD原始设备层其实就是一个中转工作,例如,应用层调用write写字符设备节点,内核会调用MTD字符设备驱动的write函数,在这个函数中,会通过MTD原始设备层来调用最底层的FLASH硬件驱动的写函数来完成写工作。 MTD(memory technology device内存技术设备)是用于访问memory设备(ROM、flash)的Linux的子系统。MTD的主要目的是为了使新原创 2012-10-30 16:53:21 · 1089 阅读 · 0 评论 -
Linux那些事儿 之 戏说USB(10)好戏开始了
上海的房价又在疯涨了,央行又加息了,邻居老大妈前几天丢的小狗居然自己跑回来了。多姿多彩的九月。每一天的太阳都会不同,每一天的股市也一样。昨天绿油油的,今天红彤彤的,终于可歌可泣的迎来了人生中的第一次涨停。心情舒畅的一天。有了这么好的大环境做铺垫,咱们的好戏也该开始了。这以后的岁月里,主要就是结合代码去聊了,当然,新气象要用新代码,就使用最新的2.6.22版本的内核了。新的总会比旧的好,转载 2012-11-05 13:35:40 · 491 阅读 · 0 评论 -
Linux那些事儿 之 戏说USB(10)好戏开始了
上海的房价又在疯涨了,央行又加息了,邻居老大妈前几天丢的小狗居然自己跑回来了。多姿多彩的九月。每一天的太阳都会不同,每一天的股市也一样。昨天绿油油的,今天红彤彤的,终于可歌可泣的迎来了人生中的第一次涨停。心情舒畅的一天。有了这么好的大环境做铺垫,咱们的好戏也该开始了。这以后的岁月里,主要就是结合代码去聊了,当然,新气象要用新代码,就使用最新的2.6.22版本的内核了。新的总会比旧的好,转载 2012-11-05 13:37:25 · 469 阅读 · 0 评论 -
Linux那些事儿 之 戏说USB(11)不一样的core
“生活中肯定还有比睡觉更好玩的事情!”大小卡梅拉们一直都抱有这样的信念。他们执著地追求那些种群中认为不可想象的事情。去看大海、去摘星星、去追回逃逸的太阳……,一路上处处坎坷、历经艰难,但总是逢凶化吉、化险为夷。最后还能收获超乎想象的回报和异乎寻常的果实。卡梅拉已经被当作一种象征,一种成长路上必不可少的“伴侣”。读不一样的卡梅拉,成就与众不同的你!读不一样的core,成就特立独行的你!是不是像广转载 2012-11-05 14:33:00 · 551 阅读 · 0 评论 -
Linux那些事儿 之 戏说USB(12)从这里开始
任小强们说房价高涨从现在开始,股评家们说牛市从5000点开始。他们的开始需要我们的钱袋,我的开始只需要一台电脑,最好再有一杯茶,伴着几支小曲儿,不盯着钱总是会比较惬意的。生容易,活容易,生活不容易,因为要盯着钱。USB core从USB子系统的初始化开始,我们也需要从那里开始,它们在文件drivers/usb/core/usb.c938 subsys_initcall(usb_in转载 2012-11-27 14:27:51 · 471 阅读 · 0 评论 -
USB 设备的自动检测 /proc/bus/usb
USB 设备的自动检测5.1 USB 设备检测的一般过程USB 设备检测也是通过/proc 目录下的USB 文件系统进行的。为了使一个USB 设备能够正常工作,必须要现在系统中插入USB 桥接器模块。在检测开始时,一般要先检测是否存在/proc/bus/usb 目录,若不存在则尝试插入USB 桥接模块。现在一般的 USB 桥接器模块有两种类型,UHCI 和OHCI。在决定插入那转载 2012-11-14 13:40:13 · 2014 阅读 · 0 评论 -
mcasp I2S 音频
这里需要指出的是,很多音频采集芯片中,没有slot这个概念,它们是直接说word长度,比如sil9135其就直接说明出的16bit或者32bit的word(一个声道数据所占bit位)音频数据,这时,mcasp的slot应该直接设置成16或者32bit(因为mcasp寄存器不关注word大小,直接关注的是slot的大小),还有一些音频采集芯片并不指出其输出的音频的每个声道数据位宽,只会说其音频采用字原创 2012-11-21 13:23:49 · 1361 阅读 · 0 评论 -
基于6281的3g卡拨号移植
1、准备usb-modeswitch-1.1.2、libusb-0.1.122、交叉编译libusb-0.1.12:./configure CC=/opt/marvelltools/cross/bin/arm-mv5sft-linux-gnueabi-gcc CXX=/opt/marvelltools/cross/bin/arm-mv5sft-linux-gnueabi-g++ --bui原创 2012-11-21 14:04:41 · 1127 阅读 · 1 评论 -
交叉编译rtl8712_8188_8191_8192SU_usb_linux_v2.6.6.0.20120405
修改config文件成如下这样:CONFIG_RTL8711 = nCONFIG_RTL8712 = yCONFIG_USB_HCI = yCONFIG_SDIO_HCI = n原创 2012-11-22 11:29:11 · 4053 阅读 · 0 评论 -
应用层访问内核层mmap实现机制
映射一个设备是指把用户空间的一段地址关联到设备内存上。当程序读写这段用户空间的地址时,它实际上是在访问设备;对于驱动程序编写,这个过程可以细分为三个过程:1.找到用户空间的地址2.找到设备内存3.关联其中,设备内存的物理地址对于程序员来说是已知的可以通过datasheet查看到,不需驱动程序去实现;找到用户空间的内存,这个其实内核会帮我们完成,所以对于我们驱原创 2012-12-05 14:13:25 · 1504 阅读 · 0 评论 -
linux单网卡绑多IP以及多网卡共用单IP(内含redhat和ubuntu)
Redhat版本在Linux下有时候需要给一个网卡绑定多个IP,本文介绍在Redhat系列(redhat,Fedora Core,Centos)中的实现方法和一种在Gentoo等其他Linux中普遍适用的方法。 1、单网卡绑定多IP在Redhat系列中的实现方法 假设需要绑定多IP的网卡是eth0,请在/etc/sysconfig/network-scripts目录里面创建一个转载 2012-12-28 13:52:34 · 865 阅读 · 0 评论 -
frame buffer
帧缓冲设备提供了显卡的抽象描述。他同时代表了显卡上的显存,应用程序通过定义好的接口可以访问显卡,而不需要知道底层的任何操作。该设备使用特殊的设备节点,通常位于/dev目录,如/dev/fb*.1.用户角度的/dev/fb*从用户的角度看,帧缓冲设备和其他位于/dev下面的设备类似。他是一个字符设备,通常主设备号是29,次设备号定义帧缓冲的个数。通常,使用如下方式(前面的数字代码次设转载 2013-01-17 17:56:02 · 736 阅读 · 0 评论 -
设置环境变量永久生效和临时生效 export PS1
source/etc/profile是让/etc/profile文件修改后立即生效,还有一种方法是:. /etc/profile注意:.和/etc/profile有空格linux中source命令source命令也称为“点命令”也就是一个符号(.).source命令通常用于重新执行刚修改的初始或文件,使之立即生效,而不必注销并重新登录。 一、Linu转载 2013-03-12 14:03:07 · 2437 阅读 · 0 评论 -
dm8168 i2c不稳定问题
dm8168 有两个i2c通道,ti提供的内核只支持通过i2c0来访问挂载在i2c0_scl和i2c0_sda上的设备。所以如果调用ti内核i2c_transfer函数来访问i2c1上的设备会出现给人一种不稳定的现象,其实其本质根本就没有访问成功。要判断I2C问题是否是上面介绍的情况,只需要查看电路板设计原理图就行 。原创 2013-03-21 13:59:06 · 1686 阅读 · 0 评论 -
PCI quirks.c介绍
在drivers/pci/quirks.c 中可以注册函数修复pcie的bug。例如 static void quirk_mellanox_tavor(struct pci_dev *dev) { dev->broken_parity_status = 1; /* This device gives false positives */ } DECLARE_PCI_FI...转载 2018-03-07 17:01:26 · 2135 阅读 · 0 评论