zoukankan      html  css  js  c++  java
  • 蜂鸟A20开发板刷 cubietruck 的 SD 卡固件

    美睿视讯 为蜂鸟A20准备的 MerriiLinux 功能非常简陋。所以能用上主流的 debian 或者 LUbuntu 就可以说是非常迫切的需求了。蜂鸟A20(Merrii Hummingbird A20)从硬件配置上来说非常接近 cubietruck ,相同的全志A20,相同的千兆PHY 芯片 RT8211E ,相同的wifi Bluetooth芯片 AP6210。但内存和闪存比 cubietruck 要小。
     

    准备工作:

    1.编译蜂鸟专用 uboot (主要是为了激活网卡。如果不想编译uboot,可以参考后面安装 NAND 镜像的解决方案)
    说明:蜂鸟GMAC电源由 GPIO 口控制。蜂鸟 SDK 会在内核GMAC模块 sunxi_gmac.ko 初始化时候,读取 3g_para.gmac_pwr ,然后设置此 GPIO 口设为 1。而 cubietruck 硬件的 GMAC 电源不由 GPIO 口控制,所以 cubietruck 的内核GMAC模块不会打开电源。
    编译器推荐 GCC linaro 4.6
     
    git clone https://github.com/boytm/u-boot-sunxi.git # 我已经提交了merge request,成功后可以直接拷主分支的 https://github.com/linux-sunxi/u-boot-sunxi.git
    make Merrii_Hummingbird_A20_config CROSS_COMPILE=arm-linux-gnueabi-
    make CROSS_COMPILE=arm-linux-gnueabi-
    编译完成后会生成 spl/sunxi-spl.bin,u-boot.img 以及整合了两者的 u-boot-sunxi-with-spl.bin 。
     
    这里简单介绍下 uboot 和 SD 卡分区情况
    sector start size
       0      0   8KB Unused, available for partition table etc.
      16      8  32KB Initial SPL loader 
      80     40 504KB u-boot  (sector 64 / 32KB for 2013.07 and earlier)
    1088    544 128KB environment
    1344    672 128KB Falcon mode boot params
    1600    800  ---- Falcon mode kernel start
    2048   1024     - Free for partitions (higher if using Falcon boot)
    Free for partitions 一般是 boot 分区 和 rootfs 分区(大小取决于发行版),这两个分区,可以通过分区表查看到,是正常的分区。
     
     
    2.下载 cubietruck 的SD卡镜像 ct-lubuntu-card-v2.0,并解压
     
     
    3.从 蜂鸟A20 中提取硬件配置文件
    注意: 蜂鸟自带 sys_config.fex 并不完全适用于 cubietruck 系统。
    比如:
    wifi 驱动,蜂鸟的驱动会读 ap6xxx_wl_host_wake,但 cubietruck 的驱动会读 gpio_pin_2;
    gmac 驱动,蜂鸟的驱动会载入时候读 gmac_pwr, 但 cubietruck 压根不用 GPIO 控制 GMAC 电源;
     

    刷机步骤:

    1.确定SD卡设备的名称,如果是u盘连接,则这里是 /dev/sd[abcd] 之类
    card=/dev/mmcblk0
     
    2.刷入SD卡镜像 ct-lubuntu-card-v2.0 到 SD 卡
    dd if=ct-lubuntu-server-tsd-tfcard-v2.0.img of=${card}
     
    3.替换SD卡中 uboot 区域(Initial SPL loader 开始,free partition 之前) 为自己编译的 uboot
    card=/dev/mmcblk0
    dd if=u-boot-sunxi-with-spl.bin of=${card} bs=1024 seek=8
     
    4.此时能看到SD卡被分为2个区了 。通过 fdisk -l 可以看到 两个分区,我这里是 mmcblk0p1 和 mmcblk0p2
     
    5.修改 script.bin
    需要修改 usbc 节点的配置(cubietruck 的配置导致只有一个USB口可用)
    [usbc0]
    usb_used            = 1
    usb_port_type       = 2
    usb_detect_type     = 1
    usb_id_gpio         = port:PH04<0><1><default><default>
    usb_det_vbus_gpio   = "axp_ctrl"
    usb_drv_vbus_gpio   = port:PB09<1><0><default><0>
    usb_ac_enable_gpio  = port:PH05<1><0><default><0>
    usb_restrict_gpio   = 0
    usb_host_init_state = 0
    usb_restric_flag    = 0
    usb_restric_voltage = 3550000
    usb_restric_capacity= 5
    
    ;-------------------------------------------------------------------------------
    ;---       USB1控制标志
    ;------------------------------------------------------------------------------
    [usbc1]
    usb_used            = 1
    usb_port_type       = 1
    usb_detect_type     = 0
    usb_drv_vbus_gpio   = port:PH02<1><0><default><0>
    usb_restrict_gpio   = 
    usb_host_init_state = 1
    usb_restric_flag    = 0

     SATA 电源管脚 (注意,audio占用了 PH15口,需要禁用它)

    [sata_para]
    sata_used = 1
    sata_power_en = port:PH15<1><default><default><1>
    
    [audio_para]
    audio_used = 0
    audio_pa_ctrl = port:PH15<1><default><default><0>

    注意:以上只是常用的 GPIO 口,其它 GPIO 口可能也存在配置不正确的,这就需要你自己对照 Merri 蜂鸟 的电路图的管脚去核对了。

    备注:如何修改 script.bin,可参考 http://docs.cubieboard.org/tutorials/common/edit_the_system_configuration 。

     
     

    注意:

    当前镜像启动参数有点问题,需要挂载 SD-card 第一个boot分区,修改启动参数(错误的设置为第2个sd卡了) 
    mount ${card}p1 /mnt
    vi /mnt/uEnv.txt
    修改 root 的值,从 mmcblk1p2 改为 mmcblk0p2
    root=/dev/mmcblk0p2
    umount ${card}p1
     
     
     

    刷 NAND 版本:

    蜂鸟A20开发板刷 cubietruck 的 nand 版本后可正常启动 wifi,但网卡没法启动。报错如下
     
    root@cubietruck:~# ifconfig eth0 up 
    <6>sunxi_gmac: probed 
    <4>eth0: No PHY found 
     
    这里不修改uboot (因为 sunxi uboot nand 版很简单就是把全志 uboot 的 nand 作了开源替换,而且也不是活跃开发状态),改用内核模块 gpio_sunxi 驱动网卡。
    修改 script.bin
    [gpio_para]
    gpio_used = 1
    gpio_num = 2
    ; gmac power
    gpio_pin_1 = port:PH16<1><default><default><1>

    在 /etc/rc.local 中的 exit 0 前插入

    echo 1 > /sys/class/gpio/export
    echo out > /sys/class/gpio/gpio1_ph16/direction
    echo 1 > /sys/class/gpio/gpio1_ph16/value
    sleep 5 && ifconfig eth0 up # 稍微延迟等待 gmac 驱动加载成功后再启用网卡

    重启即可

     
     
     
     
     参考文档:
    http://sunxi.org/Bootable_SD_card
    http://linux-sunxi.org/GPIO
    http://docs.cubieboard.org/tutorials/common/edit_the_system_configuration
     
  • 相关阅读:
    Java IO流-NIO简介
    Java IO流-Properties
    Java IO流-序列化流和反序列化流
    Codeforces Round #371 (Div. 1) C
    bzoj 2326 矩阵快速幂
    IndiaHacks 2016
    HDU
    Educational Codeforces Round 51 (Rated for Div. 2) F
    Codeforces Round #345 (Div. 1) D
    Codeforces Round #300 E
  • 原文地址:https://www.cnblogs.com/JesseFang/p/4037501.html
Copyright © 2011-2022 走看看