‘壹’ 如何设置uboot命令让板子从emmc启动
Arm板系统文件一般有三个——bootloader(uboot)、kernel(uImage)及根文件系统(rootfs)。在arm板上电后,按uboot->kernel->rootfs的顺序依次启动。由于开发板上有多种存储介质,三个文件可以放在任何可以存储的介质上,因此也就导致文件的多种启...
‘贰’ arm开发板emmc报错怎么检查硬件错误
1.linux系统启动方式
bootloader->kernel->system
在嵌入式系统中内存为DRAM,inand flash 都不能直接启动需要被初始化。其中初始化程序在(bootloader中)。
解决思路是通过内部irom中的bl0代码引导执行uboot。
启动uboot可以有多种方式,可以使用内部emmc启动,sd卡启动,usb启动等多种方法。
由于优先级不同,用sd卡启动时除了必要的硬件配置(拨码开关等)也必须破坏内部emmc中的uboot才能通过sd卡启动uboot。
在linux系统下破坏uboot的方法:
破坏iNand中的bootloader以从SD2启动
linux下:
busybox dd if=/dev/zero of=/dev/block/mmcblk0 bs=512 seek=1 count=1 conv=sync
sync
uboot下:
‘叁’ ARM里bootloader一般放在NAND FALSH哪个地址是不是从0X0地址开始 那中断向量表呢
是0地址,中断向量表(应该叫异常向量表)放在bootloader的最开始,bootloader可以放在nor里也可以放在nand里,由启动类型确定
‘肆’ 如何在bootloader中访问emmc的各寄存器
首先你需要在bootloader中移植emmc驱动,通常bootloader中有的。
然后设置cmdline(还是commandline,记得不太清楚),这个是能设置启动分区的。
在代码中是能找到任何一个分区的,之前做bootloader的时候有用到过。
‘伍’ 安卓开机卡在logo变砖了,清除emmc有用吗清除emmc就是恢复出厂设置吗
Android系统开机的时候停止在android logo界面说明系统已经无法启动了,可能是手机在线ota升级后没有自动双清,导致系统缓存混乱,或者删除了系统必备apk,或者是替换了不同版本的apk,造成无法开机。
建议进入Recovery模式执行双清wipe操作。
Recovery模式指的是一种可以对安卓机内部的数据或系统进行修改的模式(类似于windows PE或DOS)。在这个模式下可以刷入新的安卓系统,或者对已有的系统进行备份或升级,也可以在此恢复出厂设置。
进入recovery的方法:
1、将手机完全关机后,按住音量键下+电源键,进入bootloader界面(部分手机可能不同,多数是音量上或下+电源键);
2、按音量键将光标移动到recovery那一行;
3、按电源键,之后手机会自动重启进入recovery模式。
其中音量键为光标选择键,可以用来移动光标,电源键则是确认键。
双wipe步骤如下:
在recovery模式下,用音量下键选择wipe data/factory reset这项。
按HOME键执行wipe data/factory reset命令后再用音量下键选择Yes -- delete all user data并按HOME键执行命令。
执行Yes -- delete all user data命令后,表示开始执行。
按音量下键选择wipe cache partition命令并按HOME键执行。
执行wipe cache partition命令后,音量下键选择Yes -- Wipe Cache并按HOME键执行命令。
执行Yes -- Wipe Cache命令后,表示wipe cache partition也执行成功了。
wipe data/factory reset和wipe cache partition执行成功后 选择 reboot system now 重启系统即可。
‘陆’ 你好Bootloader解锁码怎么弄
如果您的手机已root,您可以直接用dd if命令提取bootloader分区镜像文件;如果您的手机已root,您可以网上找刷机包提取emmc_appsboot.mbn文件。文件用文本浏览器打开。文件前面好大一段可能内含解锁码的乱码文段(不用16进制编辑器的情况下),中间一小段是可以看懂的英文,后面是空的。解锁码可能是0123456789ABCDEF(老机型)或为空(直接使用fastboot oem unlock命令解锁),如果不是那就文件中搜索test key找与他最邻近的一串解锁码(有时不一定是16位:理论上解锁码可重复使用)。部分机型与上述机型略有出入。
‘柒’ 小7莫名其妙的废了,开不了机,求助
本文章基于360论坛小C的总结,结合本人遇到问题,加以补充。
QPST工具目前支持Windows 2000/XP和32位Windows Vista/7系统,暂不支持64位Windows Vista/7系统。
注意:该步骤帮助你的Qualcomm平台裸机更新相应的bootloader/fastboot等操作,或者手机产线上的首次裸机下载,请勿断电或拔下电池!
一、 QPST工具安装
解压72-V1400-138_2.7.395.rar(参见本文最后下载链接),双击setup.exe文件,运行安装程序。
二、 操作步骤
1、 端口识别
待处理手机插入USB数据线连接PC,设备管理器将识别出QDLoader 9008端口,否则该手机不在本文介绍的处理范围内。
如果未能识别驱动,提示有““Qhsusb-Dload””则需安装相应的驱动,请下载小米工具MiPhone2.11.6(参见本文最后下载链接) 安装即可安装驱动。
2、 工具配置
进入 开始 ->所有程序 -> QPST eMMC Software Download打开工具;
工具界面如下图所示。
本 人使用win7 32bit 在打开"QPST eMMC Software Download"弹出提示 “Failed to connect QPST server”, 折腾半天搞不清楚为什么。最终在一篇帖子的帮助下,尝试将"QPST eMMC Software Download"使用XP兼容模式运行,最终可以成功运行。
如下图,右键点击并选择“兼容性疑难解答”->"尝试建议的设置"->"测试程序的兼容性设置"中测试程序,即可启动。
之后再次进入主程序菜单,单击"QPST eMMC Software Download"即可。
请按照下述各项描述仔细配置:
1) 连接手机
如果显示No Ports Active或No Phone Connnected,请在电脑状态栏的蓝色地球图标上点击右键,选择Qpst Configuration。
选择Ports页面,点击Add New Port按钮。
选中QDLoader 9008一列,点击OK按钮。
此时,Ports页面将显示出刚才添加的COM口信息,且状态为Download。
在下载工具界面点击Browse按钮,选择COM口,点击OK,主界面将显示出已连接手机。
2) 界面配置
如下图所示,四个复选框都要选中;Flash Programmer file name和Boot Image分别写入MPRG8X25.hex和8X25_msimage.mbn;SPC写入000000。
3) 版本配置
点击Load XML def按钮,选择升级包msm7627a文件夹中的rawprogram0.xml文件。
点击Load patch def按钮,选择升级包SSNSKMLY文件夹中的patch0.xml文件。
勾选Search path 2,点击浏览按钮,选中升级包SSNSKMLY文件夹。
至此,全部配置均已完成,如下图所示。
4) 版本下载
点击Download按钮,开始下载版本,如下图所示。
以下图示表示正在下载版本。
下图表示下载完成。注意,下载完成的标志为:Log区出现write complete。
以上步骤3)和步骤4)中program bootloader 和 program emmc在高通默认的下载方式中,两者是分开下载的,参见如下:首先program bootloader
接着program emmc devices:
到此通过QPST 更新fastboot bootloader和EMMC 分区配置完成, 用户可以重启系统进入fastboot 模式更新系统文件。
ADB和fastboot操作在此略去。
工具驱动和相关文件下载:
MIUI QHSUSB-DLOAD driver MiPhone2.11.6
Coolpad HSUSB adb driver (vista64 and WinXP32 bit)
MIUI APQ8064/MSM8960/MSM8930 QPST image (mbn/hex)
DB APQ8060 GingerBread/ICS QPST image files (mbn/hex/patch0...)
Qualcomm QPST-2.7.399
Qualcomm FMT/DIAG(USB serial) port driver
‘捌’ uboot201407如何查看从哪启动SD卡还是EMMC
Arm板系统文件一般有三个——bootloader(uboot)、kernel(uImage)及根文件系统(rootfs)。在arm板上电后,按uboot->kernel->rootfs的顺序依次启动。由于开发板上有多种存储介质,三个文件可以放在任何可以存储的介质上,因此也就导致文件的多种启动方式。本文就来讨论,以上三个文件对应不通存放位置的不同启动配置。
一般开发板上会有flash(Nor or NAND),mmc,emmc,sd卡等。系统文件可以烧写在其中的任意一种上,因此也就对应不通的启动。在开发过程中,有时经常需要改动内核,或者修改应用程序,如果每次都修改后都重新烧写到板上的存储介质,会比较麻烦。因此,为方便调试,uImage和rootfs还可以从网络启动,即nfs启动。但uboot只能从板上介质启动。
启动过程其实是先将要启动的文件从存储位置拷贝到内存空间,再在内存中运行。因此所谓不同位置启动,也就是从不同位置拷贝而已。
下面我们以开发板启动为例,分别介绍三个文件从不同位置启动的过程方法。我使用的开发板上有emmc和两个sd卡。我们按照启动顺序,依次介绍。
首先是uboot启动。Uboot是三个系统文件中第一个启动的,对它的拷贝工作由cpu中的固件决定。固件中支持从几个位置拷贝uboot,它就能存放在几个位置上。至于每次启动具体从其中的哪里开始,硬件拨码开关决定,对应拨码在开发板手册上能查到。启动之前,先将uboot的二进制文件拷贝到对应介质。有两种不同方法烧写,如下:
1. uboot二进制文件拷贝到emmc,是通过芯片供应商的下载工具软件烧写完成;
2. 拷贝到sd卡是在linux下,通过dd命令完成的。
烧写完成后,将启动拨码拨到对应位置即可启动uboot。
然后介绍kernel文件(uImange)和rootfs的启动。如上所述,uImage和rootfs可以从emmc、sd卡或nfs拷贝到内核启动。具体的启动位置由uboot中的参数传递的内容决定。这些参数的内容在uboot中有写死的值,也可以在uboot启动阶段进入到命令输入界面,修改这些参数的值,来改变启动位置。(作者:围补)
进入uboot命令界面后,输入如下一段命令,修改启动参数,并重启。
setenv loadaddr 0x10800000
setenv bootargs_base 'setenv bootargsconsole=ttymxc0,115200'
setenv bootargs_mmc 'setenv bootargs${bootargs} root=/dev/mmcblk0p1 rootwait rw video=mxcfb1:dev=ldb,LDB-XGA,if=RGB666video=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB24 ip=dhcp'
setenv bootcmd_mmc 'run bootargs_basebootargs_mmc;mmc dev 1;mmc read ${loadaddr} 0x800 0x2000;bootm'
setenv bootcmd 'run bootcmd_mmc'
saveenv
run bootcmd
命令输入完后,重启开发板,即可按照上述命令中设置的参数来启动系统。
下面我们来分析一下uboot阶段输入的启动参数的意义,以便读者自己修改相关内容,让板子从自己需要的位置启动。
首先介绍几个命令。是在上面看到最多的setenv命令,该命令使用来设置或删除某个环境变量的。当setenv后面只带一个参数,该参数必须为已有的变量名,输入命令回车后该变量即被删除;当setenv后面有多个参数,将把其后第一个参数作为环境变量,后面其他参数作为该变量的值或内容。
第二个要解释的命令mmc。在uboot命令界面中敲入mmc,回车,能够看到其多个用法:
Usage:
mmc read addr blk# cnt
mmc write addr blk# cnt
mmc erase blk# cnt
mmc rescan
mmc part - lists available partition on currentmmc device
mmc dev [dev] [part] - show or set current mmcdevice [partition]
mmc bootpart [dev] [part] - show or set bootpartition
mmc list - lists available devices
解释一下其中几个用法:
mmc read addr blk# cnt 用来将硬盘(emmc/sd)中的内容读取到内存中。其中addr指内存中的目标位置起始地址,blk#指被拷贝内容起始存储块的块号,cnt指要被拷贝的块数。一般每个块的大小为512byte。
mmc dev [dev] [part] - show or set current mmc device [partition] 显示或设置当前设备。命令mmc dev即为显示当前是哪个device;mmc dev #意为设置“#”为当前设备。
第三个命令saveenv是保存环境变量的意思。环境变量设置后,使用该指令保存,下次重启时会按照上次保存的设置启动,就不用再次设置了。
最后,run命令比较明显,“运行”的意思。一般加在某内容为可执行命令的变量前。
再来说明一下变量。在上述参数设置命令中,参数bootargs和bootcmd是uboot的参数,其功能和名称不能被改变,其他都是用户自定义的变量,可以改变其名称。其中bootargs代表由uboot传给内核的参数;bootcmd是uboot启动时,系统自动加载的命令序列。如果设置了启动参数后,想让系统下次自动按照本次设置的方式启动,则一定要把拷贝和启动内核的语句设置为bootcmd的值,否则下次启动无法自动加载并启动内核。(作者围补)
介绍完重要的命令及uboot环境变量后,我们再来看上面的启动参数设置命令行:
setenv loadaddr 0x10800000
setenv bootargs_base 'setenv bootargsconsole=ttymxc0,115200'
setenv bootargs_mmc 'setenv bootargs${bootargs} root=/dev/mmcblk0p1 rootwait rwvideo=mxcfb1:dev=ldb,LDB-XGA,if=RGB666video=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB24 ip=dhcp'
setenv bootcmd_mmc 'run bootargs_basebootargs_mmc;mmc dev 1;mmc read ${loadaddr} 0x800 0x2000;bootm'
setenv bootcmd 'run bootcmd_mmc'
saveenv
run bootcmd
按照上面对命令和参数的讲解,做一些变量的替换之后,可以看到,此处只做了两件事,一是设置环境变量bootargs的值,二是设置bootcmd的值,并保存。其中bootargs的值传递给内核,用来初始化一些设备和启动rootfs;bootcmd的值用来启动内核,即自动加载的命令序列。(最后一句run bootcmd是启动,不再是设置命令了。)
对上述命令中,采用如此多自定义变量的原因是,有些调试工具命令行输入不能过长,因此用中间自定义变量缩短一次性输入的命令行长度。我们将不必要的自定义变量做替换掉,然后来分析其内容。
setenv bootargs console=ttymxc0,115200root=/dev/mmcblk0p1 rootwait rw video=mxcfb1:dev=ldb,LDB-XGA,if=RGB666 video=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB24ip=dhcp
setenv bootcmd 'mmc dev 1;mmc read0x10800000 0x800 0x2000;bootm'
saveenv
run bootcmd
将自定义变量替代掉后,能看到,参数设置其实就是做了对两个系统环境变量赋值的工作。下面具体分析各变量值得内容。
对bootargs的赋值,对要是跟rootfs启动相关。内容是一个很大的字符串,不同项之间由空格隔开,也可以把由空格隔开的多项看做是多个参数。
第一项是console=ttymxc0,115200是选择操作台,并设置波特率。
中间几项root=/dev/mmcblk0p1 rootwait rw,是对rootfs启动位置设置root=/dev/mmcblk0p1是指从设备mmcblk0的p1分区挂载rootfs。那么mmcblk0到底是哪个设备呢?由于文件系统的挂载是在kernel启动后进行的,而内核启动后会安装linux的分配方式给现有设备分配名称,因此可对应区分设备。我使用的开发板上,emmc即为mmcblk0设备,sd安装挂载顺序依次后排。如果多个卡槽在系统启动前都插上了sd卡,系统会安装sd卡槽所在接口号依次分配设备名称号。比如,两个sd卡槽,slot2和slot3(对应总线号),只插一个sd开始,无论在哪个槽都是mmcblk1;但两个都插上sd时,在slot2中的是mmcblk1,slot3中的则是mmcblk2。Ok,至此,从哪个设备挂载rootfs已经很清楚了。后面两个参数,rw是声明启动权限,即以读写方式启动;rootwait是指等待设备/dev/mmcblk0p1设备就绪后才尝试挂载rootfs。如果没有此参数,linux内核启动时可能会在存储设备尚未就绪是就尝试挂载rootfs,此时肯定挂载失败,那么启动也就失败了。
最后的几个参数,video=mxcfb1:dev=ldb,LDB-XGA,if=RGB666video=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB24 ip=dhcp,是做一些设备初始化的,主要是对视频设备和网络,对不需要视频设备的嵌入式系统可以不设置此项,ip也可以单独设置。
然后是第二个环境变量bootcmd的设置,主要跟kernel启动相关。
setenv bootcmd 'mmc dev 1;mmc read0x10800000 0x800 0x2000;bootm'
设置bootcmd内容为命令序列,用用单引号包围,命令间由分号分隔。
按照上面对mmc命令的讲解,第一个命令mmc dev 1,意思是将dev 1设置为当前设备。这里就是uImage启动(拷贝)的位置。在我使用的开发板上,dev 1指放在卡槽slot2中的sd卡。此处由于linux内核没有启动,设备名称不能按照linux分配方式确定。在我使用的开发板上,dev 2是放在卡槽slot3中的sd卡,dev3是emmc。对此句做相应修改,即可更改内核启动位置。
mmc read 0x10800000 0x800 0x2000这句大家也应该可以明白意思了,即将存储设备上从块号0x800开始的0x2000个存储块的东西拷贝到内存0x10800000开始的空间内。
bootm也是uboot命令,用于加载uboot能辨认的操作系统映像。
‘玖’ 求解BootLoader具体解锁原理
解锁原理:在bootloader所在分区写入一个标记,但我也不知道那个标记是什么。好像不同品牌手机标记都不一样。bootloader分区名称:aboot
这个是可以的。需要的条件:你的设备root过且可以授权,可以刷入aboot。并且你得有已解锁的aboot可刷(来自已解bootloader的机友提供的aboot分区文件)。
使用16进制编辑器破解版(过大文件不允许用户未冲钱编辑保存)文件前面好大一段可能内含解锁码的乱码文段(不用16进制编辑器的情况下),中间一小段是可以看懂的英文,后面是空的。解锁码可能是0123456789ABCDEF(老机型)或为空(直接使用fastboot oem unlock命令解锁),如果不是那就文件中搜索test key找与他最邻近的一串解锁码(有时不一定是16位:理论上解锁码可重复使用)。部分机型与上述机型略有出入。
希望能帮到您。祝您解锁成功。