移植fastboot到2440

11 篇文章 11 订阅

  前面分析过 dnw 的源码,发现 dnw 是将 usb 设备设置为 slave 模式,主机通过端点 0 来获取我们设置好的描述符,如果认为这些描述符符合 dnw 标准的话,便可以通过一个批量 Out 端点进行发送数据了。
  那么 fastboot 是什么东西,看上去非常复杂的样子,我在 tiny4412 上使用 fastboot 来刷各种东西 kernel system bootloader ,用起来非常简单,只需要输入一条 fastboot flash kernel uImage ,就能自动烧写完成,用起来真是非常方便。
  通过抓包分析,我发现 fastboot 只不过是 dnw 的升级版,相对于 dnw ,它多了一个批量输入端点,主机和设备之间有更多的交互。

Bus Hound 6.01 capture on Windows Vista (x64). Complements of www.perisoft.net

  Device - Device ID (followed by the endpoint for USB devices)
            (43) Android ADB Interface
            (48) Android ADB Interface
  Phase  - Phase Type
            CTL   USB control transfer       
            IN    Data in transfer           
            OUT   Data out transfer          
            USTS  USB status                 
  Data   - Hex dump of the data transferred
  Descr  - Description of the phase
  Cmd... - Position in the captured data


Device  Phase  Data                      Description       Cmd.Phase.Ofs(rep)
------  -----  ------------------------  ----------------  ------------------
  43.0  CTL    80 06 00 01  00 00 12 00  GET DESCRIPTOR           1.1.0        
  43.0  IN     12 01 10 01  00 00 00 08  ........                 1.2.0        
               d1 18 02 00  00 01 01 02  ........                 1.2.8        
               03 01                     ..                       1.2.16       
  43.0  CTL    80 06 00 02  00 00 09 00  GET DESCRIPTOR           2.1.0        
  43.0  IN     09 02 20 00  01 01 00 c0  .. .....                 2.2.0        
               19                        .                        2.2.8        
  43.0  CTL    80 06 00 02  00 00 20 00  GET DESCRIPTOR           3.1.0        
  43.0  IN     09 02 20 00  01 01 00 c0  .. .....                 3.2.0        
               19 09 04 00  00 02 ff 42  .......B                 3.2.8        
               03 00 07 05  81 02 40 00  ......@.                 3.2.16       
               00 07 05 03  02 40 00 00  .....@..                 3.2.24       
  43.0  CTL    80 00 00 00  00 00 02 00  GET STATUS               4.1.0        
  43.0  IN     01                        .                        4.2.0        
  43.0  CTL    00 09 01 00  00 00 00 00  SET CONFIG               5.1.0        
  43.0  CTL    80 06 00 02  00 00 09 00  GET DESCRIPTOR           6.1.0        
  43.0  IN     09 02 20 00  01 01 00 c0  .. .....                 6.2.0        
               19                        .                        6.2.8        
  43.0  CTL    80 06 00 02  00 00 20 00  GET DESCRIPTOR           7.1.0        
  43.0  IN     09 02 20 00  01 01 00 c0  .. .....                 7.2.0        
               19 09 04 00  00 02 ff 42  .......B                 7.2.8        
               03 00 07 05  81 02 40 00  ......@.                 7.2.16       
               00 07 05 03  02 40 00 00  .....@..                 7.2.24       
  43.0  CTL    80 06 03 03  09 04 40 00  GET DESCRIPTOR           8.1.0        
  43.0  USTS   c0010000                  canceled                 8.2.0        
  43.3  OUT    64 6f 77 6e  6c 6f 61 64  download                 9.1.0        
               3a 30 30 30  30 30 30 30  :0000000                 9.1.8        
               38                        8                        9.1.16       
  43.1  IN     44 41 54 41  30 30 30 30  DATA0000                10.1.0        
               30 30 30 38               0008                    10.1.8        
  43.3  OUT    31 31 31 31  31 31 31 31  11111111                11.1.0        
  43.1  IN     4f 4b 41 59               OKAY                    12.1.0        
  43.3  OUT    66 6c 61 73  68 3a 6b 65  flash:ke                13.1.0        
               72 6e 65 6c               rnel                    13.1.8        

  抛开主机识别设备过程,单看数据传输过程是十分简单的,首先主机将文件大小发送给设备,设备如果确定这么大小的文件可以接受那么返回给主机一个OKAY,然后主机就开始发送数据,待全部接受完成,设备发送一个 OKAY 返回给主机表示数据接受完成,主机发送 flash:kernel 命令从机将刚发送的数据烧写到 kernel 分区。是不是非常简单?
  其实友善的 superboot 也是基于 fastboot 协议来搞的,只不过它针对自家产品进行了封装,主机和设备之间的交互更为复杂,可以来看一眼。
  

Bus Hound 6.01 capture on Windows Vista (x64). Complements of www.perisoft.net

  Device - Device ID (followed by the endpoint for USB devices)
            (32) FriendlyARM Superboot Interface
  Phase  - Phase Type
            CTL   USB control transfer       
            IN    Data in transfer           
            OUT   Data out transfer          
  Data   - Hex dump of the data transferred
  Descr  - Description of the phase
  Cmd... - Position in the captured data


Device  Phase  Data                      Description       Cmd.Phase.Ofs(rep)
------  -----  ------------------------  ----------------  ------------------
  32.0  CTL    80 06 00 01  00 00 12 00  GET DESCRIPTOR           1.1.0        
  32.0  IN     12 01 10 01  ff 00 00 08  ........                 1.2.0        
               d1 18 02 00  00 01 01 02  ........                 1.2.8        
               00 01                     ..                       1.2.16       
  32.0  CTL    80 06 00 02  00 00 09 00  GET DESCRIPTOR           2.1.0        
  32.0  IN     09 02 20 00  01 01 00 c0  .. .....                 2.2.0        
               19                        .                        2.2.8        
  32.0  CTL    80 06 00 02  00 00 20 00  GET DESCRIPTOR           3.1.0        
  32.0  IN     09 02 20 00  01 01 00 c0  .. .....                 3.2.0        
               19 09 04 00  00 02 ff 42  .......B                 3.2.8        
               03 00 07 05  81 02 40 00  ......@.                 3.2.16       
               00 07 05 03  02 40 00 00  .....@..                 3.2.24       
  32.0  CTL    80 00 00 00  00 00 02 00  GET STATUS               4.1.0        
  32.0  IN     01                        .                        4.2.0        
  32.0  CTL    00 09 01 00  00 00 00 00  SET CONFIG               5.1.0        
  32.0  CTL    80 06 00 03  09 04 40 00  GET DESCRIPTOR           6.1.0        
  32.0  IN     04 03 09 08               ....                     6.2.0        
  32.3  OUT    53 4b 49 50  49 4e 46 4f  SKIPINFO                 7.1.0(3)     
  32.1  IN     65                        e                        8.1.0(3)     
  32.3  OUT    47 45 54 48  57 20 30     GETHW 0                 13.1.0        
  32.1  IN     20 53 75 70  65 72 62 6f   Superbo                14.1.0        
               6f 74 2d 32  34 34 30 20  ot-2440                 14.1.8        
               56 65 72 73  69 6f 6e 3a  Version:                14.1.16       
               20 31 2e 33  61 28 32 30   1.3a(20                14.1.24       
  32.3  OUT    47 45 54 48  57 20 31     GETHW 1                 15.1.0        
  32.1  IN     20 43 50 55  3a 20 53 33   CPU: S3                16.1.0        
               43 32 34 34  30 20 34 30  C2440 40                16.1.8        
               30 4d 48 7a               0MHz                    16.1.16       
  32.3  OUT    47 45 54 48  57 20 32     GETHW 2                 17.1.0        
  32.1  IN     20 52 41 4d  3a 20 36 34   RAM: 64                18.1.0        
               4d 42                     MB                      18.1.8        
  32.3  OUT    47 45 54 48  57 20 33     GETHW 3                 19.1.0        
  32.1  IN     20 4e 41 4e  44 3a 20 32   NAND: 2                20.1.0        
               35 36 4d 42  28 53 4c 43  56MB(SLC                20.1.8        
               29 20 49 44  3a 45 43 44  ) ID:ECD                20.1.16       
               41 31 30 39  35           A1095                   20.1.24       
  32.3  OUT    47 45 54 48  57 20 34     GETHW 4                 21.1.0        
  32.1  IN     20                                                22.1.0        
  32.3  OUT    47 45 54 49  4e 46 4f     GETINFO                 23.1.0        
  32.1  IN     31 20 55 6e  6b 6e 6f 77  1 Unknow                24.1.0        
               6e 20 63 6f  6d 6d 61 6e  n comman                24.1.8        
               64                        d                       24.1.16       
  32.3  OUT    47 45 54 49  4e 46 4f     GETINFO                 25.1.0(26)    
  32.1  IN     31 20                     1                       26.1.0(26)    

  主机会获取开发板型号,nandflash 型号大小等等信息,其实只要按照它这个格式进行数据交互,我们就可以借助于 minitools 来烧写我们的开发板了,但是我认为没比较搞这么复杂,原生的 fastboot 足以满足我们的需求。

想仔细分析原理的同学建议看一下我整理的一下代码:

dnw fastboot学习源码

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值