编译 musb module

修改了Kconfig 和Makefile文件,要编译musb module模块,但编译的结果是:系统提示这样的错误:

drivers/usb/musb/musb_io.h: In function ‘readsl’:
drivers/usb/musb/musb_io.h:44: error: implicit declaration of function ‘insl’
drivers/usb/musb/musb_io.h: In function ‘readsw’:
drivers/usb/musb/musb_io.h:46: error: implicit declaration of function ‘insw’
drivers/usb/musb/musb_io.h: In function ‘readsb’:
drivers/usb/musb/musb_io.h:48: error: implicit declaration of function ‘insb’
drivers/usb/musb/musb_io.h: In function ‘writesl’:
drivers/usb/musb/musb_io.h:51: error: implicit declaration of function ‘outsl’
drivers/usb/musb/musb_io.h: In function ‘writesw’:
drivers/usb/musb/musb_io.h:53: error: implicit declaration of function ‘outsw’
drivers/usb/musb/musb_io.h: In function ‘writesb’:
drivers/usb/musb/musb_io.h:55: error: implicit declaration of function ‘outsb’

google了半天也没有解决问题,没办法了,打开musb_io.h看个究竟吧。

看的结果是:在readsl()函数中调用里insl(),但musb_io.h中没有insl()函数的定义,那就去它包含的头文件中看看。其中include<asm/io.h>比较有希望吧,打开/include/asm其中并没有什么io.h文件。这io.h文件在哪呢?去google上找找,最终在/arch/ba/include/asm中找到了io.h(我们用的平台是ba).在其中找了一下,没有发现insl等函数的定义。what should i do?去arm下看看,发现它的io.h中有这些函数的定义,关它三七二十一呢,先把让他编译过里再说,就模仿arm的做法在io.h加入了下面的语句:

 

#define __raw_readsb(p, d, l) do{*(int *)0 = 0;}while(0)
#define __raw_readsw(p, d, l) do{*(int *)0 = 0;}while(0)
#define __raw_readsl(p, d, l) do{*(int *)0 = 0;}while(0)
#define __raw_writesb(p, d, l) do{*(int *)0 = 0;}while(0)
#define __raw_writesw(p, d, l) do{*(int *)0 = 0;}while(0)
#define __raw_writesl(p, d, l) do{*(int *)0 = 0;}while(0)

#define __io(p)    0

#define outsb(p, d, l)    __raw_writesb(__io(p), d, 1)
#define outsw(p, d, l)  __raw_writesw(__io(p), d, 1)
#define outsl(p, d, l)  __raw_writesl(__io(p), d, 1)
#define insb(p, d, l)   __raw_readsb(__io(p), d, 1)
#define insw(p, d, l)   __raw_readsw(__io(p), d, 1)
#define insl(p, d, l)   __raw_readsl(__io(p), d, 1)

 

保存,再次make modules。OK编译过了,也生成了musb下的.o文件,但不知道是不是我想要的。因为修改Kconfig,Makefile都是瞎摸索的,也不知道修改的是否有道理,是否对,就一个目的,能musb驱动在可配置选项中,且能编译过。

 

到目前为止,好像目的达到了,但心里没底呀,下步该怎么做呢?

musb 中文翻译和英文文档.可以通过会话请求协议(SRP)发起USB流量,而双角色设备同时支持SRP和主机协商协议(HNP),并且可以根据需要担任主机或外设的角色。MUSBMHDRC还支持拆分事务,这反过来允许它支持使用带有USB 2.0集线器的全速度或低速设备。核心还包括支持在不使用时关闭便携式设备。 除了端点0之外,MUSBMHDRC是用户可配置的,可支持最多15个‘传输’端点和/或最多15个‘接收’端点。(对于IN事务和OUT事务使用这些端点取决于MUSBMHDRC是用作外设还是用作主机。当用作外设时,IN事务通过TX端点处理,OUT事务通过Rx端点处理。当用作主机时,IN事务通过Rx端点处理,OUT事务通过TX端点处理。)这些附加端点可以在软件中单独配置,以处理批量传输(这也允许它们处理中断传输)、同步传输或控制传输。此外,还可以动态地将端点分配给不同的目标设备函数——最大限度地同时支持设备的数量。 每个端点都需要一个FIFO与之关联。MUSBMHDRC有一个RAM接口,用于连接到用于所有端点FIFOs的同步单端口RAM的单个块。(RAM块本身需要由用户添加。) 端点0的FIFO需要为64字节深,并缓冲1个数据包。RAM接口可以根据其他端点FIFOs进行配置,它的大小可以从8到8192字节,可以缓冲1个或2个数据包。单独的FIFOs可以与每个端点相关联:或者,具有相同端点编号的TX端点和Rx端点可以配置为使用相同的FIFO,例如,如果它们永远不能同时活动,可以减少所需RAM块的大小。 MUSBMHDRC提供了一个32位同步CPU接口,设计用于连接AMBA AHB bus1。接口支持使用AHB总线运行在一个大范围的总线速度。AHB总线上的多层操作也被支持。通过添加合适的包装器/桥接器,MUSBMHDRC还可以很容易地连接到一系列其他标准总线。 还支持对端点FIFOs的DMA访问。 MUSBMHDRC提供了一个UTMI+ 3级兼容接口,用于连接到一个合适的USB高/全速收发器。包含了一个可选的ULPI链接包装器(在musbhdrc /docs目录中包含的musbhdrc_ulpi_an.pdf文档中描述),用于连接到与ULPI兼容的物理。另一种接口也提供,允许使用USB 1.1与核心全速PHY,但仅为全速和低速事务。(此接口见8.1节)。 MUSBMHDRC提供发送和接收USB数据包所需的所有编码、解码、检查和重新请求——仅当端点数据已被成功传输时才中断CPU。 当充当主机时,MUSBMHDRC另外维护一个帧计数器,并自动调度SOF、同步、中断和批量传输。它还包括对在点对点通信中使用的会话请求和主机协商协议的支持,其细节在USB 2.0规范的USB on - go补充中给出。MUSBMHDRC提供了一系列的测试模式——主要是USB 2.0规范中描述的高速运行的四种测试模式。它还包括选项,允许它被迫进入全速模式,高速模式或主机模式。最后一个可能在帮助调试硬件PHY问题时有用。 提供了图形用户界面脚本,用于根据用户的需求配置核心。要使用的脚本取决于所选的CPU接口。请注意:在撰写本文时,内核仅在Verilog中可用。 本规范应与USB运行规范一起阅读,该规范还提供了电源要求、电压水平、连接器等细节。.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值