转自: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设置):
- 起始扇区 尺寸 内容
- 0 444 Bootable flag
- 0 445-512 Legacy MBR
- 1 1536 GPT Partition table
- 34 8736 Stage-1 Bootloader
- 154 103552 U-Boot[位置依赖于stage1里面设置]
- 558 8192 U-Boot environment[位置依赖于uboot参数设置]
- 1290 2189216 uImage kernel[位置依赖于uboot环境参数设置]
- 16674 2787216 uImage initrd[位置依赖于uboot环境参数设置]
- 57088 4640 Stage-1 Bootloader (2nd copy)
- 57208 103568 U-Boot (2nd copy)
- 58344 2189216 uImage kernel (2nd copy)
复制代码
写入stage1到硬盘中:
- dd if=stage1.wrapped of=/dev/sdX seek=34 bs=512
- sync
复制代码 写入uboot到硬盘中:
- dd if=u-boot.wrapped of=/dev/sdX seek=154 bs=512
- dd if=u-boot.wrapped of=/dev/sdX seek=57208 bs=512
- sync
复制代码
写入uboot环境参数到硬盘中:
- dd if=u-bootenv.warpped of=/dev/sdX seek=558 bs=512
- sync
复制代码
写入kernel到硬盘中:
- dd if=uImage.warpped of=/dev/sdX seek=1290 bs=512
- dd if=uImage.warpped of=/dev/sdX seek=58344 bs=512
- sync
复制代码 写入Initrd到硬盘中:
- dd if=initrd.wrapped of=/dev/sdX seek=16674 bs=512
- sync
复制代码
解压一个rootfs文件到硬盘的第一个分区中:
- 首先创建挂载硬盘的目录:
mkdir /tmp/disk1 - 挂载硬盘第一个分区到目录:
mount /dev/sdX1 /tmp/disk1 - 解压rootfs文件到这个目录:
tar -C /tmp/disk1 -xvf /path/rootfs.gz #[压缩的rootfs的路径和文件名] sync
NAND设备mtd1中的数据结构:
- 起始点 长度 内容
- 0x00000000 0x00020000(128K)* encoded stage1 loader
- 0x00020000 0x00020000(128K)* encoded backup of stage1 loader
- 0x00040000 0x00020000(128K)* uboot copy 1
- 0x00060000 0x00020000(128K) uboot spare copy (unused)
- 0x00080000 0x00020000(128K) uboot spare copy (unused)
- 0x000a0000 0x00020000(128K)** boot environment
- 0x000c0000 0x00020000(128K)** spare boot env block (if first is bad)
- 0x000e0000 0x00020000(128K)** spare boot env block (If second is bad)
- 0x00100000 0x00020000(128K)* uboot copy 2
- 0x00120000 0x00020000(128K) uboot spare copy (unused)
- 0x00140000 0x00020000(128K) uboot spare copy (unused)
- 0x00160000 0x00020000(128K) ???/empty/garbage/unused
- 0x00180000 0x00020000(128K) ???/empty/garbage/unused
- 0x001a0000 0x00020000(128K) ???/empty/garbage/unused
- 0x001c0000 0x00020000(128K) ???/empty/garbage/unused
- 0x001e0000 0x00020000(128K) ???/empty/garbage/unused
- 0x00200000 0x00300000(3M) CE uImage copy 1 【kernel数据区】
- 0x00500000 0x00300000(3M) alarm uImage copy 1 【可替换为initramfs文件数据区】
- 0x00800000 0x00300000(3M) CE uImage copy 2 【kernel数据区,备份】
- 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中的各项数据:
- nanddump -n -s 0x20000 -l 0x20000 -f stage1.encoded.02 /dev/mtd1
复制代码 请根据NAND设备mtd1设备数据表结构,自行修改上述命令中的-s【起始点参数】-l【长度参数】-f【备份文件名】
写入stage1到NAND中:
- flash_erase /dev/mtd1 0x00 2
- nandbd -s stage1.wrapped /dev/mtd1
复制代码 [请不要用nandbd写入uboot和kernel数据,否则将出现异常]
写入已编码的stage1到NAND中【验证中】:
- flash_erase /dev/mtd1 0x00 2
- nandwrite -p -s 0x00000 /dev/mtd1 stage1.endoced
- 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默认参数列表:
- bootcmd=run boot_nand
- bootdelay=2
- baudrate=115200
- autoload=n
- netmask=255.255.0.0
- bootfile="uImage"
- kernflmode=s
- load_nand=nboot 60500000 0 200000
- load_nand2=nboot 60500000 0 800000
- boot=bootm 60500000
- boot_nand=run load_nand boot || run load_nand2 boot
- stdin=serial
- stdout=serial
- stderr=serial
- 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
- ethaddr=00:25:31:XX:XX:XX【你自己机器的mac地址】
- cesvcid=XXXXXXXXXXXX【每一台机器不一样的序列号】
- ceboardver=PPROHD1
- serverip=192.168.1.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参数,自行修改或添加参数:
- load_rd=nboot 60800000 0 500000 #【参数50000为写入的initrd文件位置】
- boot=bootm 60500000 60800000
- 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的命令:
- echo "deb http://download./download/repository sarge contrib" > /etc/apt/sources.list.d/webmin.list
- echo "deb http://webmin.mirror./repository sarge contrib" >> /etc/apt/sources.list.d/webmin.list
- cd /root
- wget http://www./jcameron-key.asc
- apt-key add jcameron-key.asc
- apt-get update
- apt-get install webmin
复制代码
|