分享

Pogoplug Pro HD 折腾参考

 wedone 2013-07-20
转自:http://www./forum/viewthread.php?tid=1202434&extra=page%3D1&page=1
机器参数就不介绍了,冷门的CPU。本来首发小白论坛,结果被屏蔽了……

Pogoplug Pro根本不会因为刷机而变砖!除非你的硬件损坏。
但是错误的操作可能会导致NAND的原生系统不能启动,只能通过做启动硬盘来进行NAND修复。


文件共享如下:百度盘
initrd文件说明:
1.支持多个rootfs文件启动,也就是initrd会搜索/dev/sdx1文件目录,检查是否存在boot.from.here的启动标志文件,如果有该标志,initrd将会强制加载该设备为根目录(如存在多个标记,sdb1优先于sda1……以此类推),如果该根目录系统存在问题,则系统将可能启动失败。
debian 7 rootfs文件说明:
1.灯光信号被改变,橘色灯光被设置为内置SATA硬盘读写指示灯;板载蓝色灯变为闪灯,绿色灯亮度被调低并且启动后会常亮;
2.通过pogoplug的blparam工具自动检查nand设备里面记录的mac地址并自动设置,如果nand设备的uboot参数里面的mac信息等出现错误,可能无法正常启动设备,需要自行调整和配置etc/network/pre-up.d目录的下的文件。磁盘镜像文件说明:
1.磁盘镜像文件可以用winhex恢复,系统是用于256M内存的版本,rootfs分区占用4G大小。

stage1和uboot相关文件应用于nand和sata设备存在不一致,文件名中存在s(sata)和n(nand)用于区分。

默认用户名和密码均为:root

如下操作中,涉及各种.warpped文件名和/dev/sdX设备名需要你针对你本机的具体情形进行修改和调整。
应用于NAND和硬盘设备的stage1和uboot文件不通用,请自行根据情况选择。


【如下各个动作均为分离,请自行根据情形进行组合使用】


创建一个可启动的SATA硬盘设备:
【分区命令使用parted,如机器linux环境未安装,请先安装parted包。】
  • 1.清空前32M,使其为空白;
    dd if=/dev/zero of=/dev/sdX bs=1M count=32
  • 2.设置系统分区格式表类型;
    parted /dev/sdX mklabel msdos
    [这是一个设置分区格式表为msdos格式的命令,也可以分区格式为gpt]
  • 3.划分第一个分区,用于linux的根目录系统,第一个分区前需要保留32M未分区的空间,用于保存系统的stage1、uboot和kernel等核心数据;
    parted /dev/sdX mkpart primary 33554432B 8623489023B
    [这个命令划分第一个分区从32M开始,第一个分区大小为8G,想要分区为其他大小,请自行计算,上述命令最后两个参数分别为起始点和结束点]
  • 4.格式化第一个分区,使其为linux根目录分区,系统分区格式可以为ext2或者ext3;
    mkfs.ext3 /dev/sdX1
    [本命令将分区格式化为ext3格式]
  • 5.【可选】将硬盘剩余空间分为第二个数据分区并格式化;
    parted /dev/sdX mkpart primary 8623489024B 100%
    mkfs.ext3 /dev/sdX2
  • 6.接下来需要做的过程:
  • 1.写入硬盘可启动标志的隐藏扇区数据;
  • 2.写入stage1到硬盘;
  • 3.写入uboot到硬盘;
  • 4.写入uboot环境参数到硬盘;
  • 5.写入kernel到硬盘;
  • 6.写入initd到硬盘;
  • 7.解压rootfs到硬盘的第一个分区;


写入硬盘可启动标志数据到隐藏扇区:
  • Pogoplug优先会从SATA硬盘启动并载入硬盘中的stage1数据,但是需要硬盘内包含一个特殊标记数据。如下命令就是写入这些标志数据到硬盘上。
  • 如果需要备份原始数据,请执行:
    dd if=/dev/sdX of=bootrom.bak bs=1 count=444
  • 写入命令:
    dd if=bootrom.warpped of=/dev/sdX
    sync

可启动SATA硬盘前32M数据结构(基于官方修改,制作非官方系统启动盘,参考Iomega HMNHDCE设置):
  1.         起始扇区        尺寸        内容
  2.         0        444        Bootable flag
  3.         0        445-512        Legacy MBR
  4.         1        1536        GPT Partition table
  5.         34        8736        Stage-1 Bootloader
  6.         154        103552        U-Boot[位置依赖于stage1里面设置]
  7.         558        8192        U-Boot environment[位置依赖于uboot参数设置]
  8.         1290        2189216        uImage kernel[位置依赖于uboot环境参数设置]
  9.         16674        2787216        uImage initrd[位置依赖于uboot环境参数设置]
  10.         57088        4640        Stage-1 Bootloader (2nd copy)
  11.         57208        103568        U-Boot (2nd copy)
  12.         58344        2189216        uImage kernel (2nd copy)
复制代码



写入stage1到硬盘中:
  1. dd if=stage1.wrapped of=/dev/sdX seek=34 bs=512
  2. sync
复制代码

写入uboot到硬盘中:
  1. dd if=u-boot.wrapped of=/dev/sdX seek=154 bs=512
  2. dd if=u-boot.wrapped of=/dev/sdX seek=57208 bs=512
  3. sync
复制代码


写入uboot环境参数到硬盘中:
  1. dd if=u-bootenv.warpped of=/dev/sdX seek=558 bs=512
  2. sync
复制代码


写入kernel到硬盘中:
  1. dd if=uImage.warpped of=/dev/sdX seek=1290 bs=512
  2. dd if=uImage.warpped of=/dev/sdX seek=58344 bs=512
  3. sync
复制代码

写入Initrd到硬盘中:
  1. dd if=initrd.wrapped of=/dev/sdX seek=16674 bs=512
  2. sync
复制代码


解压一个rootfs文件到硬盘的第一个分区中:
  • 首先创建挂载硬盘的目录:
    mkdir /tmp/disk1
  • 挂载硬盘第一个分区到目录:
    mount /dev/sdX1 /tmp/disk1
  • 解压rootfs文件到这个目录:
    tar -C /tmp/disk1 -xvf /path/rootfs.gz #[压缩的rootfs的路径和文件名]
    sync


NAND设备mtd1中的数据结构:
  1.         起始点         长度         内容
  2.         0x00000000 0x00020000(128K)* encoded stage1 loader
  3.         0x00020000 0x00020000(128K)* encoded backup of stage1 loader
  4.         0x00040000 0x00020000(128K)* uboot copy 1
  5.         0x00060000 0x00020000(128K) uboot spare copy (unused)
  6.         0x00080000 0x00020000(128K) uboot spare copy (unused)
  7.         0x000a0000 0x00020000(128K)** boot environment
  8.         0x000c0000 0x00020000(128K)** spare boot env block (if first is bad)
  9.         0x000e0000 0x00020000(128K)** spare boot env block (If second is bad)
  10.         0x00100000 0x00020000(128K)* uboot copy 2
  11.         0x00120000 0x00020000(128K) uboot spare copy (unused)
  12.         0x00140000 0x00020000(128K) uboot spare copy (unused)
  13.         0x00160000 0x00020000(128K) ???/empty/garbage/unused
  14.         0x00180000 0x00020000(128K) ???/empty/garbage/unused
  15.         0x001a0000 0x00020000(128K) ???/empty/garbage/unused
  16.         0x001c0000 0x00020000(128K) ???/empty/garbage/unused
  17.         0x001e0000 0x00020000(128K) ???/empty/garbage/unused
  18.         0x00200000 0x00300000(3M) CE uImage copy 1        【kernel数据区】
  19.         0x00500000 0x00300000(3M) alarm uImage copy 1        【可替换为initramfs文件数据区】
  20.         0x00800000 0x00300000(3M) CE uImage copy 2        【kernel数据区,备份】
  21.         0x00b00000 0x00300000(3M) alarm uImage copy 2        【可替换为initramfs文件数据区,备份】
复制代码


备份NAND的stage1:
nanddump -n -l 0x20000 -f stage1.encoded.01 /dev/mtd1
nanddump -n -s 0x20000 -l 0x20000 -f stage1.encoded.02 /dev/mtd1


备份NAND的mtd中的各项数据:
  1. nanddump -n -s 0x20000 -l 0x20000 -f stage1.encoded.02 /dev/mtd1
复制代码

请根据NAND设备mtd1设备数据表结构,自行修改上述命令中的-s【起始点参数】-l【长度参数】-f【备份文件名】


写入stage1到NAND中:
  1. flash_erase /dev/mtd1 0x00 2
  2. nandbd -s stage1.wrapped /dev/mtd1
复制代码

[请不要用nandbd写入uboot和kernel数据,否则将出现异常]


写入已编码的stage1到NAND中【验证中】:
  1. flash_erase /dev/mtd1 0x00 2
  2. nandwrite -p -s 0x00000 /dev/mtd1 stage1.endoced
  3. nandwrite -p -s 0x20000 /dev/mtd1 stage1.endoced
复制代码



写入uboot到NAND中:
flash_erase /dev/mtd1 0x40000 3
flash_erase /dev/mtd1 0x100000 3
nandwrite -p -s 0x40000 /dev/mtd1 u-boot.wrapped
nandwrite -p -s 0x100000 /dev/mtd1 u-boot.wrapped


写入kernel、uboot、initd数据到NAND中:
  • 根据NAND设备数据结构,首先擦除对应数据:
    flash_erase /dev/mtd1 0x40000 3
    【请自行修改最后的两个参数,第一个参数为起始点,第二个参数为块数量,一个块大小为128K,1M为8个数据块】
    【如果需要写入kernel和inited,一般用3M的数据空间,数据块数量为24】
  • 写入相应文件:
    nandwrite -p -s 0x200000 /dev/mtd1 uImage.wrapped
    【请自行修改最后两个参数,第一个参数为起始点,第二个参数为需要写入的文件名】


NAND里面的uboot启动参数说明:
  • NAND里面的启动参数,可以通过uboot的命令行环境进行修改和保存,在linux环境下,可以通过官方工具blparam进行修改;
  • 官方工具修改uboot参数命令行示例:
    blparam bootcmd="run boot_nand"
  • 官方工具删除一个多余的uboot参数命令行示例:
    blparam bootcmd


官方uboot默认参数列表:
  1.         bootcmd=run boot_nand
  2.         bootdelay=2
  3.         baudrate=115200
  4.         autoload=n
  5.         netmask=255.255.0.0
  6.         bootfile="uImage"
  7.         kernflmode=s
  8.         load_nand=nboot 60500000 0 200000
  9.         load_nand2=nboot 60500000 0 800000
  10.         boot=bootm 60500000
  11.         boot_nand=run load_nand boot || run load_nand2 boot
  12.         stdin=serial
  13.         stdout=serial
  14.         stderr=serial
  15.         bootargs=root=ubi0:rootfs ubi.mtd=2,512 rootfstype=ubifs console=ttyS0,115200 elevator=cfq mac_adr=0x00,0x30,0xe0,0x00,0x00,0x01 mem=128M poweroutage=yes
  16.         ethaddr=00:25:31:XX:XX:XX【你自己机器的mac地址】
  17.         cesvcid=XXXXXXXXXXXX【每一台机器不一样的序列号】
  18.         ceboardver=PPROHD1
  19.         serverip=192.168.1.20
  20.         ipaddr=192.168.1.122
复制代码



有关启动过程的说明:
本机的Linux启动过程为:
  • 1.stage1
  • 2.u-boot[stage2]
  • 3.kernel
  • 4.initrd[非必须过程,通过调整uboot参数确定是不是载入]
  • 5.rootfs


修改NAND里面的uboot参数,载入Initrd:【需首先写入initrd到NAND中】
参考修改NAND的uboot参数,自行修改或添加参数:
  1. load_rd=nboot 60800000 0 500000  #【参数50000为写入的initrd文件位置】
  2. boot=bootm 60500000 60800000
  3. boot_nand=run load_nand load_rd boot || run load_nand2 load_rd boot
复制代码



有关多系统启动说明:
  • 1.系统优先尝试从SATA设备启动,SATA设备必须具备前文所述内容;
  • 2.不管系统是从NAND设备启动,还是SATA设备启动,均可以先载入initrd,initrd可以预先读取系统已挂载的USB存储设备,可以将rootfs调整为usb设备,也就是可以实现自己制作多个不同系统的usb rootfs设备,然后插入那个usb系统就启动那个usb系统。
  • 3.将发布的initrd文件将优先从最后一个可启动的usb设备载入usb rootfs。前置条件为usb设备根目录中存在【boot.from.here】标记文件。


有关可启动USB设备【支持U盘,USB读卡器等等设备】的制作:
  • 1.将USB设备第一个分区格式化为ext3格式;
  • 2.将完整的rootfs文件,包括与kernel配套的modules文件等等解压到USB设备的第一个分区中;
  • 3.设立启动标记文件【boot.from.here】;
    touch /[pathtousbroot]/boot.from.here


Debian下面安装webmin的命令:
  1.         echo "deb http://download./download/repository sarge contrib" > /etc/apt/sources.list.d/webmin.list
  2.         echo "deb http://webmin.mirror./repository sarge contrib" >> /etc/apt/sources.list.d/webmin.list
  3.         cd /root
  4.         wget http://www./jcameron-key.asc
  5.         apt-key add jcameron-key.asc
  6.         apt-get update
  7.         apt-get install webmin
复制代码

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多