当uboot正常时,
安装ADB。ADB 全称 Android Debug Bridge,用于与 Android 设备进行交互。
这里建议用驱动精灵安装,安装好后进入设备管理器可以看到“Android Phone”,就说明驱已经安装好啦。
- 进入uboot
- 输入分区命令“fdisk -c 0”。
fatformat mmc 0:1
ext3format mmc 0:2
ext3format mmc 0:3
ext3format mmc 0:4
3.在 PC 机上运行“USB_fastboot_tool”-->“platform-tools”文件夹中的文件 “cmd.exe”(cmd.exe 可执行文件是 Windows 自带的命令行工具,如果用户使用的不是 Win7 系统,假如提示版本不兼容,请使用用户自己 Windows 系
重点来了,OTG接口烧写后发现uboot启动异常,并且报错。发现uboot的每种封装不一样,迅为的分scp pop封装,分别有1G和2G内存两种。
步骤——uboot烧错了怎么办,只能从TF卡启动,启动后在烧到emmc当中去。
1.制作开发板启动的TF卡,将TF插上电脑进入ubuntu识别,遇到一个问题,ubuntu怎么都识别不出新的盘符,df –l 命令查看
把SD卡接入读卡器,让VMware软件位于窗口最前面,然后把读卡器接入电脑。
点击VMware菜单“VM” ->“Removable Devices”, 找到新出现的USB存储设备,点击“Connect”。
注意:如果菜单里没有新的设备出现,原因是VMware的USB服务未启动。可用以下方式启动:打开“控制面板”->“系统和安全”->“管理工具”->“服务”,找到“VMware USB Arbi trat ion Service”双击启动它。然后重启VMware软件。
2.识别到U盘后连接到ubuntu,拷贝用户光盘“06_源码_uboot 和 kernel”文件夹中的文件“iTop- 4412_uboot_xxx”到 Ubuntu 系统中解压,得到文件夹“ iTop4412_uboot“,拷贝对应核心板的文件“u-boot-iTOP-4412.bin”到前面解压出来的文件夹" iTop4412_uboot "中。然后我们进入前面解压出来的文件夹" iTop4412_uboot"中。
3.烧写文件“u-boot-iTOP-4412.bin”到 TF卡,一定要清楚哪个盘符是TF卡的,在 Ubuntu 命令行中,执行命令“./mkuboot /dev/sdx”(“sdx”就是前面查到的 TF 卡盘符名,不要带数字,比如 df -l 看到的 tf 卡是/dev/sdb0,这个 0 不要带,直接写sdb
如图TF卡制作成功。
3.将开发板的拨码开关置于 TF 卡启动模式,先插入经过上一步处理的 TF 卡,启动开发 板,进入 uboot 模式,对 TF 卡进行分区,具体操作如下。 在超级终端中,执行下面的命令。
— fdisk -c 1 300 300 300
— fatformat mmc 1:1
— ext3format mmc 1:2
— ext3format mmc 1:3
— ext3format mmc 1:4
4.将 TF 卡重新插入 PC 机,并在 TF 卡上新建文件夹“sdupdate”,将 uboot 等四个 文件拷贝到“sdupdate”文件夹中,也可以选择只拷贝 uboot 文件。
5.再将 TF 卡插入开发板,设置开发板为 TF 卡启动模式,然后启动开发板。对 eMMC进行格式化分区命令以及擦除命令,最后使用命令“sdfuse flashall”,就可以将 uboot、内 核以及文件系统更新到开发板的 eMMC。
6.烧写镜像完成之后,将开发板设置为 eMMC 启动模式,开发板就可以正常启动了。 如果上一步只选择烧写了 uboot,然后可以使用 fastboot 或者 TF 卡来进一步烧写内核或者 文件系统的镜像。
问题:TF烧录的uboot启动后查看emmc 使用命令disk -c 0一直会报错,错误如下。
烧录迅为官方的uboot也会报emmc的错误。
原因是:mmc 升级之后,如果使用老的镜像(201805 月之前的代码),会打印 mmc 的错 误,并无法启动。这是因为在默认的 mmc 驱动源码中有几行判断 mmc 版本的代码,随着时 间流逝,mmc 硬件版本一直在升级,导致超出了预留的 mmc 版本号,其实 mmc 硬件驱动 是一模一样的,只需要注释掉 mmc 驱动中版本判断的代码即可。
可以找迅为售后要最新的源码镜像,也可以自己改。
自己改的步骤如下。
1 mmc 驱动修改 mmc 驱动要修改的文件为内核源码“/drivers/mmc/core/”下的 mmc.c 驱动文件。 在该驱动文件下找到函数“mmc_read_ext_csd”,如下图所示。
在“mmc_read_ext_csd”函数中的判断 mmc 硬件版本代码部分如下图所示。
请注意,可能在部分开发板中已经简单修改,但是还是存在 mmc 升级之后可能无法使用 的情况,这里可以直接将其中的版本报错返回的代码注释掉。
将 err = -EINVAL;
goto out;
直接注释掉重新编译是最简单的修改方法。 也可以如下所示修改,这部分判断版本范围直接修改为打印版本号。
#if 0
printk(KERN_ERR "%s: unrecognised EXT_CSD revision %d\n", mmc_hostname(card->host), card->ext_csd.rev);
err = -EINVAL;
goto out;
#else
printk(KERN_ERR "%s: EXT_CSD revision %d\n", mmc_hostname(card->host), card->ext_csd.rev);
#endif
2.4412 的 uboot 修改
mmc 硬件升级之后,uboot 部分,除了 4412 开发板需要简单修改,其它开发板不影 响。 将 4412 的 uboot 源码下的 drivers/mmc 目录下的 mmc.c 文件替换为压缩包中 4412uboot 文件夹下的 mmc.c 文件即可