求助IMX6+Android4.4移植RTL8723AU驱动问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求助IMX6+Android4.4移植RTL8723AU驱动问题相关的知识,希望对你有一定的参考价值。

参考技术A 这里仅以windows为例,在定制之前需要以下的工具:

JDK(java development kit java开发组件,这个组件必须第一个被安装,并且配置好环境变量)
android kitchen搭建,为何叫安卓厨房,个人觉得非常的形象!因为你定制rom就像烧菜,烧菜需要厨房!对不对,所以你可以讲android kitchen理解为定制rom所需要的一个环境。
Cygwin,这个东西是为了windows环境下开辟出一个类UNIX模拟环境(如果你是搞嵌入式开发的,那么这个东东一定非常的熟悉)
Apktool/Apkmanager(Apktool可能是当今最为流行的apk工具包,由解包、打包、签名程序组成。而Apkmanager是另一款apk反编译利器,当Apktool不行的时候或许它可以排上用处)
Notepad/Editplus(这个在你修改代码的时候需要用到,如果只用文本工具有点寒掺是否)
winrar/7-zip(解压工具)
2.工具准备完毕后,先安装JDK,JDK搞定后。安装cygwin(建议从官网下载)。最后将下载好的kitchen放入cygwin/home/目录下,下载下来的Kitchen名字很长,建议改成Kitchen。另外需要注意的一点是所有目录的名称不要有空格。
3.当你完成jdk/cygwin/kitchen的准备工作后,就可以使用cygwin进行rom的修改了!

1uboot移植和imx文件分析

 


本系列使用的平台为百问网IMX6ULL,通过对NXP提供uboot的分析和修改,使其支持百问网IMX6ULL

本系列参考了正点原子和百问网的IMX6ULL教程,在此表示衷心感谢

本章参考文件有:《i.MX 6 BSP Porting Guide》、《ARMv7架构参考手册》

百度网盘链接:

https://pan.baidu.com/s/1h3LjDtOmAYChti7Rr30aSA

提取码为:07yl


 

 

一、uboot准备过程

首先需要解压uboot,解压后得到的顶层文件夹有:

技术图片

 

《i.MX 6 BSP Porting Guide》中1.2.1节所述流程如下:

1. 复制开发板目录中相关文件夹(我选择的是mx6ull_ddr3_arm2)到自定义文件夹:

$ cp -R ./board/freescale/mx6ullevk/ ./board/freescale/mx6ull_lioker

$ mv ./board/freescale/mx6ull_lioker/mx6ullevk.c ./board/freescale/mx6ull_lioker/mx6ull_lioker.c

2. 复制头文件目录中相关文件为自定义文件:

$ cp ./include/configs/mx6ullevk.h ./include/configs/mx6ull_lioker.h

3. 复制配置文件目录中相关文件为自定义文件:

$ cp ./configs/mx6ull_14x14_evk_emmc_defconfig ./configs/mx6ull_lioker_defconfig

4. 修改上述自定义文件

修改后的文件存放在百度网盘链接的./uboot-imx-rel_imx_4.1.15_2.1.0_ga_lioker/文件夹中

5. 修改相关的配置文件:arch/arm/cpu/armv7/mx6/Kconfig

  技术图片

a. 仿照TARGET_IMX6ULL_等配置项添加自定义配置选项

技术图片

b. 添加自定义配置文件

技术图片

 

在解压uboot之后,通常还需要打补丁、配置和编译。如:

1. $ patch -p1 < u-boot-2012.04.01_100ask.patch

2. $ make 100ask24x0_config

3. $ make

其中,配置和编译都会调用uboot的顶层Makefile,接下来我会简单分析此过程

 

本文所使用的uboot中并没有补丁文件,因此只需要清除、配置和编译操作:

1. 清除:$ make ARCH=arm CROSS_COMPILE=arm-linux- distclean

2. 配置:$ make ARCH=arm CROSS_COMPILE=arm-linux- mx6ull_lioker_defconfig

技术图片

2. 编译:make V=1 ARCH=arm CROSS_COMPILE=arm-linux-

技术图片

 

配置过程通过scripts/kconfig/conf生成.config,若想获取更多信息可通过修改顶层Makefile中“Q = ”实现:

技术图片

技术图片

 

通过编译过程图,可以确定以下两点:

1. 编译过程所使用的链接文件和主汇编文件分别为u-boot.lds和arch/arm/cpu/armv7/start.S

2. 编译过程所生成的文件是u-boot,并通过拷贝命令生成u-boot.bin

 

但是我们需要烧写的并不是u-boot.bin,而是通过编译图中如下命令生成的u-boot.imx文件

make -f ./scripts/Makefile.build obj = arch/arm/imx-common u-boot.imx

u-boot.imx烧写过程请参考第二节

 

 

二、u-boot.imx烧写过程

本节使用SD卡进行烧写,步骤如下:

1. SD Card Formatter.exe中选中当前SD卡,点击Format按键(需要注意File system是否为FAT32)

技术图片 技术图片

2. ubuntu中执行$ ls /dev/sd*

技术图片

3. 虚拟机连接SD卡

技术图片

4. ubuntu中重新执行$ ls /dev/sd*,新出现的设备为SD卡(在我的系统里为sdc)

技术图片

5. 切换到u-boot目录,执行$ sudo dd if=u-boot.imx of=/dev/sdc bs=1k seek=1 conv=fsync

 

 

三、u-boot.imx分析

在分析时,我们可以通过Hex Editor Neo等hex查看器打开imx文件查看对应数值,如下图:

技术图片

 

imx文件构成可以在imx6ull datesheet的8.7一节中找到答案:

技术图片

布局如下图:

技术图片

接下来,我将一一对其进行介绍

 

1. IVT:用于存放程序地址、DCD地址等数据

根据imx6ull datesheet的Figure 8.1可以确定内部ROM在初始化时钟、DDR等外设后会将imx文件拷贝至DDR中

为正确读取imx文件,ROM将IVT定位在固定的地址,该地址由连接到芯片的引导设备确定,如下图:

技术图片

 

其结构如下表,其中每一项均占据32bit

技术图片

其header格式如下:

技术图片

其他项的结果分别为:

entry(代码链接地址):0x87800000

dcd地址:0x877ff42c

boot data地址:0x877ff420

self(IVT地址):0x877ff400

csf:0

 

2. boot data:用于记录程序的起始地址和大小

其结构如下图,其中每一项均占据32bit

技术图片

各项的结果分别为:

start(imx起始地址):0x877ff000

length(imx大小):0x0006c000

plugin:0

 

3. dcd:device configuration data,存储着地址和变量,用于重新设置时钟和DDR等外设

其结构如下图,其中每一项均占据32bit

技术图片

CMD的结构图下图,其中每一行均占据32bit

技术图片

dcd的大小为entry - dcd = 0xbd4

 

链接文件和主汇编文件我将在下一节中进行分析

 

以上是关于求助IMX6+Android4.4移植RTL8723AU驱动问题的主要内容,如果未能解决你的问题,请参考以下文章

IMX6开发板-Android4.4-串口屏蔽gps文档及测试例程

基于imx6安卓的RTL8723bs WiFi编译

iMX6开发板烧写Android系统

恩智浦IMX6开发板选哪家?迅为imx6开发板平台运行怎么样?

FS4412-Android4.4 HDMI移植的详细步骤

如何移植音频驱动到android4.4