本帖最后由 picc745514 于 2019-10-1 09:11 编辑
4 p$ n, v1 R& d: N* m
9 s- n) c. u E/ p6 X$ T' O违规没有?版主。。。。。* C( ]( Q# z6 z7 x# ~( ~
原作者 hanwckf 原地址https://www.jianshu.com/p/77e529fb35f9
: I2 E! |2 |( ^% |( e' X简介猫盘又是一款矿难机,配置如下 - CPU: Marvell ARMADA A3720 1.0Ghz 2xCortex-A53
- RAM: 512M DDR3
- eMMC: 8G HS200
- 网络: Marvell 88e1512 千兆phy
- 外设: 原生SATA,主板引出USB2.0和TTL,带1个风扇和aw2013控制的三色LED
- 电源: 5V3A9 L. \3 f/ p: L- y) p$ @
由于espressobin开发板的配置与本机器比较接近,所以内核是通用的,但是需要适配dts,适配好的dts请看参考资料里面的Github仓库 Marvell目前提供有4.4和4.14的bsp内核(猫盘原厂固件就是4.4bsp内核),另外linux主线内核对armada的支持也不错,espressobin的armbian固件就是采用主线内核(4.19 LTS),我会尽快更新build-catdrive加入4.19内核的armbian固件(此固件不重新编译内核,仅适配dtb,因此phy的LED不会闪烁,三色LED也不工作) 在build-catdrive中的其他固件均采用Marvell的4.14 bsp内核,已经加入了aw2013的驱动,LED正常工作,可以通过sysfs控制,在系统poweroff之后LED熄灭。另外网口的LED灯也会闪烁。 猫盘通过spi nor flash启动的,rootfs放在emmc中,若不慎刷砖,只需用编程器刷spi flash即可救砖 原厂的uboot无法保存环境变量(复位后自动恢复默认env),因此需要刷入新的uboot,然后在新uboot中启动U盘/硬盘的临时系统,最后将新的rootfs镜像写入emmc 资料下载(刮刮码)- flash-image.bin https://github.com/hanwckf/bl-armada-3720/releases/tag/v2019-07-22
- img镜像 https://github.com/hanwckf/build-catdrive/releases/tag/v2019-09-17
- 原厂资料备份,提取码: qc7c https://pan.baidu.com/s/1yikyr60_VpbHhOgpH8crgw/ S* x$ j" f: e' g% }1 e8 O3 o
准备工作- 空的2.5寸硬盘(需要移动硬盘盒或者易驱线)或U盘(需要将USB母座接到主板上的USB排针上,见下图)
- USB转TTL线,如ch340等,按下图接线,波特率为115200,注意千万别接VCC0 E7 l6 g0 g; k$ r4 x7 w. }9 p0 m( [
8 K9 r* x3 W9 y) [4 w' }' M 7 C9 M1 @( J6 d& w& M* R* F) o
UART与USB排针
0 M# q5 R! T f/ `) n$ T. V! [
& G: _; _8 o7 f4 N6 ^4 E B 刷入uboot: 方法1- U盘/硬盘格式化为mbr的ext4或fat32分区,将flash-image.bin复制到其根目录下,然后插到猫盘上1 L$ d3 P8 q; Z1 M& w
接好TTL后上电,在倒计时结束前反复按回车进入原厂uboot# i! _( v% i) K
在uboot控制台依次输入以下命令:
% i8 A2 a3 Z' a0 U% \ ~
setenv bootargs "console=ttyMV0,115200 root=/dev/mmcblk0p1 rootwait rw init=/bin/sh"ext4load mmc 0:1 0x1000000 boot/armada-3720-customer0.dtb5 p% W- A; _" K
ext4load mmc 0:1 0x2000000 boot/Image5 F% I1 ?* J. X+ V( V1 w5 k
booti 0x2000000 - 0x1000000
! p- N# j) a* \6 @) E0 s |
等待系统启动完成进入无需登陆的shell - 进入shell后依次输入以下命令(这一步是把flash-image.bin复制到emmc的第2分区上)# j* }0 Y) E8 h9 w, w
当同时插入U盘和硬盘的时候,有可能需要挂载/dev/sdb1
7 e9 S3 }$ F) X
mount -t proc /proc
! S. }+ Y% q/ `6 `mount /dev/mmcblk0p2 /media/ p6 p6 E* @, p2 ~3 {1 i4 G
mount /dev/sda1 /mnt. s9 ~# f# o0 d( Q# t# C) r% {
cp -f /mnt/flash-image.bin /media
/ B6 A& E& d, n% h6 u) X. p: p8 [umount /media
0 `. C. J* c# M; O0 R6 W4 h$ |umount /mnt | 0 L" \3 v6 g( p" p- ]. M' w( j' p
然后直接拔电 - 上电,在倒计时结束前反复按回车再次进入原厂uboot
4 d# P4 ^* y1 E- f- Q0 d8 `在uboot控制台依次输入以下命令 (切勿在uboot控制台中反复按回车)
( i4 ^% D$ w9 N* [+ R& }
ext4load mmc 0:2 0x1000000 flash-image.bin
) o1 J6 ~+ u9 I3 G7 v# {sf probe
5 K: u" J( C; J, y/ xsf erase 0x0 0x200000
7 s. t; U+ X; K, esf write 0x1000000 0x0 0x200000
! {9 _1 x% ]1 S | / m; v1 M4 T+ E& r
- 确保上一步的命令正常执行完毕之后,输入reset复位,然后在倒计时结束前反复按回车进入新uboot
9 S3 D) |- X1 p在uboot控制台依次输入以下命令,注意mac地址要改成你自己的) N$ G" a r/ c5 T
env default -a
D C) j r* I6 [( A1 Ksetenv ethaddr "4c:65:a8:10:e2:55"6 [; Q* g5 {( f$ k
saveenv
& e3 f4 X3 x" R# l. h此时新uboot已经部署完毕,可以直接拔电准备下一步操作 刷入uboot: 救砖如果在常规步骤中操作失误,导致上电后不能进入uboot控制台,则需要拆下板子上面的spi flash, 用编程器将flash-image.bin写入spi flash, 再焊回去, 之后按照常规操作的第4步恢复环境变量和mac地址即可
: o7 }; v: W `3 a8 J# `% C% n3 \2 A! J除此之外,还可以使用A3700-utils中提供的wtptp串口工具救砖(需要Linux环境),具体操作请看参考资料 刷emmc确保已经正确刷入新uboot,将img镜像解压后用etcher或者其他工具写入硬盘或者U盘, 插回板子上 - 对于硬盘刷机:
7 b! P- A% u$ q! j上电,在倒计时结束前反复按回车进入新uboot. q5 u9 \# \3 {% `4 \$ Z# B
在uboot控制台依次输入以下命令: setenv boot_targets "sata mmc0 usb"+ G8 p4 I9 F! D% q5 @9 t
boot |
0 Y$ {3 R+ C% Y, k: S' ^
- 对于U盘刷机:
) M& y. i7 I, S. c. z4 X插好U盘后直接上电即可
0 j6 F' n% M$ I
进入U盘/硬盘的临时系统后(应该是一个alpine,用户名:root;密码:admin),运行 emmc-install.sh等待刷入完成,然后输入poweroff关机,输出示例如下:
. Y M$ w1 i/ o* |1 Oalpine:~# emmc-install.sh flash emmc... 1000MiB 0:00:33 [29.8MiB/s] [================================>] 100% 7+7144 records in 7+7144 records out 1048576000 bytes (1.0 GB, 1000 MiB) copied, 34.5134 s, 30.4 MB/s flash done, please unplug USB drive and reboot now! alpine:~# poweroff
+ u* h+ N: T6 G/ ]如果是用U盘刷机的话则需要拔掉U盘后再启动,即可进入新系统,而对于硬盘刷机则无需拔除硬盘,可在新系统中直接将其格式化 在刷好新uboot之后,若要刷入build-catdrive中的其他linux发行版,直接从刷emmc这一步开始即可
* @( R6 s" \: ^由于猫盘内存较小,建议设置1GB的swap,具体操作请看下面 系统相关设置
+ l5 V5 Y/ ^* ?6 c3 \
( r6 H j/ f$ D! m8 n; m% m" B5 p1 P: f! R l3 t0 n" y
dd if=/dev/zero of=/swapfile bs=1M count=1000 #创建1GB的swap/ u4 @" r( d: s, N
chmod 600 /swapfile0 |1 S. M. B6 u( c& q7 p
mkswap /swapfile
! l |; m- n. j0 o1 V& Kecho "/swapfile swap swap defaults 0 0" >> /etc/fstab6 y3 P: d4 [$ [' _3 J8 \
2 t( ?, C( V) Z' Z* i; I
2 K8 b7 b! S8 c! r% e
/ ]* Z" C3 q6 e; a
, Y. |# k/ e2 {; f; m5 i5 V5 S风扇控制(主线内核不可用)
# j% E1 V/ O4 ^, j: q2 }
2 t' Z, K' z3 Z% R5 t' u9 ^' [" ~: d3 M' z' v4 D
5 q7 t, I j3 m) Techo 0 > /sys/class/thermal/cooling_device0/cur_state #关闭风扇
& M* Z9 F. J6 H6 V" S6 f# `echo 1 > /sys/class/thermal/cooling_device0/cur_state #打开风扇% Y; j1 C. t& {' g5 I- l' x
8 ]* X4 m8 B1 k: B S6 j5 E! y
' D) W& }& ?4 i% r1 M
0 j4 a9 I4 I$ c$ u! T' N
$ d# o/ O6 g% u! r5 C6 a3 V; w( ]# hLED灯控制(主线内核不可用)
3 U& a+ y4 c' J; b$ e; z7 K
: k9 }! v/ ~) k( r$ E1 E
?" e2 \, g- vecho 0 > /sys/class/leds/blue/brightness #关闭蓝灯 c) f$ l. `, l* r) j. g _0 ?
echo 255 > /sys/class/leds/green/brightness #点亮最高亮度的绿灯
: q8 ?: E {" k* U" e4 K" d$ t- h( D3 kecho 128 > /sys/class/leds/red/brightness #点亮中等亮度的红灯6 M- K+ I: U" x$ s% V6 I* i8 x4 X
echo 2 > /sys/class/leds/red/blink #点亮红色呼吸灯,可设为其他值8 ^+ h9 C$ S" l1 g& K. U0 _
echo 0 > /sys/class/leds/green/blink #关闭绿色呼吸灯
9 _1 Y+ u/ s1 S$ i0 Z1 p# b9 p; r0 P( L; w$ V" |7 z/ G/ k
9 A2 w! l, n6 z
/ P$ ~. i, ?: U" w0 T% F/ l) t; ]( T
* W, `: u8 S+ i2 g, t. U硬盘休眠9 y7 r$ e9 b: @" L$ p, \5 j1 J& h0 I
build-catdrive中的固件已经设置好10分钟无操作自动休眠硬盘,如果需要调整时长,请修改/etc/udev/rules.d/99-hdparm.rules里面的hdparm -S之后的参数,默认值是120(10分钟)
; m8 i) n$ K/ C* i& C# \: A; @ ACTION=="add", SUBSYSTEM=="block", KERNEL=="sd*",ENV{ID_BUS}=="ata", ENV{DEVTYPE}=="disk", RUN+="/sbin/hdparm -S 120 $env{DEVNAME}"- 读写uboot环境变量
4 y# B( ?8 K+ k# N7 y0 K0 d fw_setenv foo barfw_printenv uboot其他操作- 在新uboot里从U盘根目录中刷入uboot
2 ^% }6 {' O2 {0 J bubt flash-image.bin spi usb- 在新uboot里从tftp中刷入uboot2 A7 ] e; k: G, W$ Q
setenv ipaddr 192.168.1.100 #设定本机4 I+ R! S7 h( A
ipsetenv serverip 192.168.1.2 #设定tftp服务器" R: E( r W& `! l8 S: N% k5 S2 a
ipbubt flash-image.bin spi tftp- 在新uboot里改变启动顺序
* w. L- o) j& ~! l8 ? setenv boot_targets "usb sata mmc0" #默认为usb->mmc0->satasaveenv 已知问题- 主线内核中无法控制风扇的gpio(会导致以太网phy重新复位),所以poweroff后风扇不停" Z% q: d! H" N
* ~ c. f0 ~2 E
' I v7 t, n G. K
/ E. o" X( D5 l4 ]8 m/ s
& {% C( c: X* g+ \' d2 L$ Z3 c7 ?( @3 E
1 J( P6 `/ n: g8 b% u7 Q5 l
+ b8 n+ S" u. `; A- q- y+ g! v, z3 E, I" ~" G/ J: C6 m0 u K! I
|