uboot之u盘启动kernel

AT91SAM9260

U-BOOT

OHCI

 

对于 U 盘启动 kernel, 先通过了解整个框架,在细说 USB 枚举(包括 HUB ,OHCI 等内容

 

一.            总体流程

U-BOOT 中, USB HOST 是可以不支持的,如果需要 U 盘启动内核时,会使用此功能。

U_BOOT_CMD 中有 usb host 的命令结构,具体调用的是 do_usb ,若使用 USB storage U 盘),则同时会有 do_usbboot

使用 U 盘启动内核的过程一般是,(举例)

do_usb 函数中添加如下代码,

if (strcmp(argv[1], "boot") == 0) {

                            char *s;

              s=getenv("boot");

              run_command(s,0);

              return 0;

       }

插上 U 盘之后,进入命令行模式,先写命令 usb start 启动 HUB U 盘设备,然后配置环境变量,如 boot=usbboot ,接着写命令 usb boot ,如上代码所示,取得环境变量之后,就会调用 do_usbboot 完成 U 盘启动 kernel image

首先分析 do_usb do_usbboot USB storage 部分分析

do_usb--------usb_init,usb_init 主要调用 usb_lowlevel_init usb_scan_devices

识别设备之后,如果配置了 USB storage ,则会调用 usb_stor_scan 配置 U 盘,接着输入命令 usb boot 就会调用 do_usbboot

 

二.            Usb_low_init

usb_low_init 主要流程如下,

a)      配置外部时钟,使能时钟,寄存器为 PCER SCER

b)      配置 host controller 相关变量,包括

gohci,ghcca[0],phcca,ohci_dev,gtd,ptd,urb_priv

c)      hc_reset

写命令到 host controller control 寄存器, reset ,等待 reset 结束 ( 不懂为啥用两次 reset)

d)     hc_start

 

更新说明: V1.70 1.改进了对于大容量U的操作 ================================================ V1.68 1.增加导出重要扇区功能,供改进软件用 ================================================ V1.67 1.支持多合一读卡器的制作,能找到读卡器的有卡插槽 2.在多处增加了数据可能丢失的警告 ================================================ V1.66 1.增加写保护跳过对话框,允许用户跳过写保护提示 2.增加备份和恢复磁的功能,类似克隆 3.可自定制启动文件包 ================================================ V1.65 1.增加写保护检测功能 2.提示拔时首先软件弹出U 3.在WMI不能使用时枚举磁 ================================================ V1.64 1.在C根目录生成日志文件,以调查打不开磁的问题 ================================================ V1.63 1.对设备名太长不予列出 2.提示文字考虑其长度,以免超出提示框 3.对不支持的方式不禁用 4.增加TIP提示完整信息 5.增加了多语言支持功能 ================================================ V1.62 1.解决了ZIP模式兼容性问题 2.增加了“固定磁”和“移动磁”的图标提示 3.对HDD/ZIP/FDD模式的应用范围做了限制 4.向磁中增加MSDOS.SYS以避免启动时出现WINDOWS菜单 ================================================ V1.61 1.解决了取消格式化后无法操作的问题 2.编写了使用说明 ================================================ V1.6 1.解决了磁容量问题,现在可以准确计算出U的容量 了,已在多种U上进行试验 2.增设了“引导处理”功能,可以不损伤原有数据使其 能够引导,类似DOS的SYS.COM命令 3.读取U的名称 4.根据接口类型判断U,而不是根据容量或者移动属性 判断,这样USB硬盒也可处理,而IDE硬不会被误操作 5.更新了引导区启动代码,USB-FDD模式可用了,在SIS630 主板上验证通过(AMI BIOS,仅支持USB-FDD) ================================================ V1.5 1.解决了“磁未格式化”的问题,凡是使用USBoot后 提示说磁未格式化的朋友请重新试用。 ================================================ V1.4 各位热心网友,请试用新的ZIP方式和FDD方式,HDD方 式未作变更,不必试验了。 1.增加了“重置”功能,如果发现USBOOT设置的参数不对 可以使用此功能将U的引导扇清空,然后用原配工具重 新格式化; 2.将原来的ZIP方式更名为FDD方式,增加了ZIP方式,ZIP 方式和HDD方式均有分区表,但ZIP方式参数和HDD方式不 同;从一些热心网友反馈的数据看,各种不同U之间参 数差别很大,大体分为32扇和63扇两类。 3.增加了自动停止U功能,不用等待U灯灭,只要提示 拔即可动手了; 其实和ZIP或HDD并无实质区别,一些PC根本就不设置 USB-ZIP还是USB-HDD,只有一个USB-STORAGE启动; U启动和PC关系很大,有的PC无论用什么参数都可以 启动,有的则很挑;同样的U在这台机器可以,在另 一台试遍FDD/ZIP/HDD都不行;筹划采用一种统一的方式, 彻底解决这个问题; ================================================ V1.3 由于暂时无法获得磁“剩余扇”,因此做了一个 额外处理,将用柱面数弥补剩余扇,这样可以减少磁 空间减少的情况,但是请大家注意,磁空间可能会多 计算!对于16M的误差很小,对于32M的误差在4M左 右,对于128M的误差在8M左右。后果是当磁接近满 时,会提示找不到对应扇区,但是不会浪费U的空间了! ================================================ V1.2
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值