本帖最后由 picc745514 于 2019-10-1 09:11 编辑 2 D+ W! m8 N3 k7 O& a6 S
5 l/ d2 S1 p7 ]9 R9 M: A违规没有?版主。。。。。& i/ i% Z7 h+ _8 G; A
原作者 hanwckf 原地址https://www.jianshu.com/p/77e529fb35f98 { {+ l" ~. U0 c8 L( z# W
简介猫盘又是一款矿难机,配置如下 - CPU: Marvell ARMADA A3720 1.0Ghz 2xCortex-A53
- RAM: 512M DDR3
- eMMC: 8G HS200
- 网络: Marvell 88e1512 千兆phy
- 外设: 原生SATA,主板引出USB2.0和TTL,带1个风扇和aw2013控制的三色LED
- 电源: 5V3A
! D5 K' H$ o2 Z4 Y: G
由于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
1 c+ r2 z6 Y9 `4 u0 ]% ]
准备工作- 空的2.5寸硬盘(需要移动硬盘盒或者易驱线)或U盘(需要将USB母座接到主板上的USB排针上,见下图)
- USB转TTL线,如ch340等,按下图接线,波特率为115200,注意千万别接VCC# G9 {& k1 R9 C2 Q& A$ {5 C
3 t; u; n; ^2 S1 U# G0 C0 x+ A- u
, c4 ^- u P0 l- L! q
UART与USB排针
8 P7 t' Q. g% s. `+ a* U8 y" p: X' D / `1 J1 `3 N \, S" v
刷入uboot: 方法1- U盘/硬盘格式化为mbr的ext4或fat32分区,将flash-image.bin复制到其根目录下,然后插到猫盘上
% X+ B% S3 S: r x+ M接好TTL后上电,在倒计时结束前反复按回车进入原厂uboot
+ {7 R; O. n) ^# I% W在uboot控制台依次输入以下命令:) ]( T1 g: ~$ h R" |, A/ p0 b
setenv bootargs "console=ttyMV0,115200 root=/dev/mmcblk0p1 rootwait rw init=/bin/sh"ext4load mmc 0:1 0x1000000 boot/armada-3720-customer0.dtb, @3 n* H1 b, T5 k
ext4load mmc 0:1 0x2000000 boot/Image
1 A9 S1 T, |* h; m }; Jbooti 0x2000000 - 0x1000000
- e7 j8 n2 e4 V: }5 B* R# F |
等待系统启动完成进入无需登陆的shell - 进入shell后依次输入以下命令(这一步是把flash-image.bin复制到emmc的第2分区上), z) s5 Z' n* W; y, V/ s; C
当同时插入U盘和硬盘的时候,有可能需要挂载/dev/sdb1
+ M* M5 c# ]$ a3 _7 _
mount -t proc /proc
. L. k3 x, |6 V4 \' G2 k, B. jmount /dev/mmcblk0p2 /media3 v7 C. U2 g' O$ K
mount /dev/sda1 /mnt
2 z/ o; X; d9 ?cp -f /mnt/flash-image.bin /media, T6 ? ^8 M* D1 \( Z
umount /media
" k6 Y2 M5 N9 j$ _' F6 L) Qumount /mnt |
6 M& c6 L6 ?/ R5 ]* r3 o8 @0 K然后直接拔电 - 上电,在倒计时结束前反复按回车再次进入原厂uboot4 Y( g2 B& C1 W0 j2 m* C
在uboot控制台依次输入以下命令 (切勿在uboot控制台中反复按回车)
8 G9 d5 P5 ?' Z% I. L
ext4load mmc 0:2 0x1000000 flash-image.bin [& S6 b* c5 g+ V% Q7 T6 i8 w
sf probe
1 q# ^/ h) ?0 U' ?sf erase 0x0 0x2000002 |) U8 \) T. h4 J8 A
sf write 0x1000000 0x0 0x200000
& [+ D7 i5 P3 |8 l+ C+ Q | / G0 I. m7 N+ Y
- 确保上一步的命令正常执行完毕之后,输入reset复位,然后在倒计时结束前反复按回车进入新uboot
1 r+ {! i8 r. f& R0 t" ^在uboot控制台依次输入以下命令,注意mac地址要改成你自己的
4 Y9 V9 s) d6 G! k2 A# L
env default -a; L% U2 c4 @( q1 S
setenv ethaddr "4c:65:a8:10:e2:55"
( n) }) i0 @! ?. \( F3 I" \9 Z+ s- Hsaveenv
1 g* w4 ]) c) ~8 P* z$ o此时新uboot已经部署完毕,可以直接拔电准备下一步操作 刷入uboot: 救砖如果在常规步骤中操作失误,导致上电后不能进入uboot控制台,则需要拆下板子上面的spi flash, 用编程器将flash-image.bin写入spi flash, 再焊回去, 之后按照常规操作的第4步恢复环境变量和mac地址即可0 w4 ]; B7 h) V3 J1 A
除此之外,还可以使用A3700-utils中提供的wtptp串口工具救砖(需要Linux环境),具体操作请看参考资料 刷emmc确保已经正确刷入新uboot,将img镜像解压后用etcher或者其他工具写入硬盘或者U盘, 插回板子上 - 对于硬盘刷机:
9 o3 X& B2 T3 y, a+ ` E上电,在倒计时结束前反复按回车进入新uboot" \2 f+ J$ h/ k N8 o+ h
在uboot控制台依次输入以下命令: setenv boot_targets "sata mmc0 usb"
l0 I$ p$ P) w! o Gboot | 5 [$ Y1 _1 K% ^4 K/ x
- 对于U盘刷机:
8 h2 u! V8 D' g8 _插好U盘后直接上电即可
# M3 B7 t4 o1 y
进入U盘/硬盘的临时系统后(应该是一个alpine,用户名:root;密码:admin),运行 emmc-install.sh等待刷入完成,然后输入poweroff关机,输出示例如下:
% L6 s+ Z- V& p; Q7 Walpine:~# 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 % R$ }5 n1 B+ T6 ~$ I
如果是用U盘刷机的话则需要拔掉U盘后再启动,即可进入新系统,而对于硬盘刷机则无需拔除硬盘,可在新系统中直接将其格式化 在刷好新uboot之后,若要刷入build-catdrive中的其他linux发行版,直接从刷emmc这一步开始即可! Z3 i: w/ r# d' F$ y
由于猫盘内存较小,建议设置1GB的swap,具体操作请看下面 系统相关设置- 设置swap
' t1 W% ]) n2 h; }, [5 w
0 |0 o3 ]4 t# ~8 |/ g# }7 d8 a# C; D; T, E; N$ B* ~6 |4 x
% c! y# c# K5 i/ ?. s
dd if=/dev/zero of=/swapfile bs=1M count=1000 #创建1GB的swap' l2 C; c2 ?: ~- }$ |, x3 R
chmod 600 /swapfile" M# a: Q1 i3 I, o: K. H- x1 T
mkswap /swapfile
0 \. }0 _5 q7 b3 P0 f5 yecho "/swapfile swap swap defaults 0 0" >> /etc/fstab* q" W) J- M- _, p& w
/ a6 B" p! ]% u3 I% R; e( X
, ?0 N" q/ g. W5 \. }& Y7 `
3 t z r$ Q* Z1 h" H* K+ \
8 ^/ {1 l' n# p
风扇控制(主线内核不可用)
& C$ p, Z- e5 Q/ O% K7 n6 }1 e5 \
( J9 B; e0 o E" R/ X; O
8 o; b: B. \+ z0 j0 \
% n1 o( F9 {+ recho 0 > /sys/class/thermal/cooling_device0/cur_state #关闭风扇! v9 H9 U, l5 w! X9 t8 W. W
echo 1 > /sys/class/thermal/cooling_device0/cur_state #打开风扇
. z# r9 t* b# _& T9 ?% n" ^' \& |1 G& ^: ^; ^( P- I. w; V
' v( f; u. M3 k
9 P$ C+ w; V. y0 g7 m5 v, U
. ^( u& j; ^7 V- V# v; FLED灯控制(主线内核不可用) - t( F' g, ^: O9 |" E% ^- x2 g
. |/ A9 C1 B$ W* [$ S
6 L* E4 |: i, H0 j' K( H" H T
echo 0 > /sys/class/leds/blue/brightness #关闭蓝灯
' h/ h) w7 e( l) M: e" m7 s- Fecho 255 > /sys/class/leds/green/brightness #点亮最高亮度的绿灯: K" H, o2 O* S$ u. r
echo 128 > /sys/class/leds/red/brightness #点亮中等亮度的红灯0 V, \/ b% ^! w& x5 p! J
echo 2 > /sys/class/leds/red/blink #点亮红色呼吸灯,可设为其他值
p6 o7 | L$ m+ b% ?, Uecho 0 > /sys/class/leds/green/blink #关闭绿色呼吸灯) a! n m4 u/ Q/ `* i8 i
0 A L% G. E1 @4 |0 u- ~ ) c2 o8 ?& [. M3 q1 n2 E
# r. L8 M) r1 t8 q
4 J" C& `+ j1 T, F7 d硬盘休眠
# z4 ]) [+ E! H1 `6 Ebuild-catdrive中的固件已经设置好10分钟无操作自动休眠硬盘,如果需要调整时长,请修改/etc/udev/rules.d/99-hdparm.rules里面的hdparm -S之后的参数,默认值是120(10分钟)
( W% i3 }8 S; q; w' T1 U% i) u ACTION=="add", SUBSYSTEM=="block", KERNEL=="sd*",ENV{ID_BUS}=="ata", ENV{DEVTYPE}=="disk", RUN+="/sbin/hdparm -S 120 $env{DEVNAME}"- 读写uboot环境变量" {; o) Q8 k( k( a7 ~
fw_setenv foo barfw_printenv uboot其他操作- 在新uboot里从U盘根目录中刷入uboot; f1 W) F' K/ F0 b7 i3 [
bubt flash-image.bin spi usb- 在新uboot里从tftp中刷入uboot- E$ W' M0 E. o- V. x6 \6 K
setenv ipaddr 192.168.1.100 #设定本机
* F) f" m: P! sipsetenv serverip 192.168.1.2 #设定tftp服务器# q9 j) u% [4 R* A2 q
ipbubt flash-image.bin spi tftp- 在新uboot里改变启动顺序# x. t# T& P4 X$ c9 V/ B, F
setenv boot_targets "usb sata mmc0" #默认为usb->mmc0->satasaveenv 已知问题- 主线内核中无法控制风扇的gpio(会导致以太网phy重新复位),所以poweroff后风扇不停
( q/ o4 Q# e3 N5 |
+ s" N. U' W+ }3 E1 Q* |2 }9 @7 P+ Y+ W- T4 s+ c/ b A) u
Q, A& y H2 S, a6 q' [' X& r# L5 H" d) t8 ~. t+ M
, g g+ y# ~% o3 \' f# T% `
6 @1 O9 {+ s; r* H8 f0 N1 G, C3 V
+ G8 V% V: p8 [: p$ H% G: D1 X, h1 Y4 q3 |8 X# S2 ]
|