本帖最后由 picc745514 于 2019-10-1 09:11 编辑
6 K% H F& w+ h# o* S+ U/ t4 ^3 p7 O/ k$ T( x, w
违规没有?版主。。。。。( C2 t' ^; V0 ?
原作者 hanwckf 原地址https://www.jianshu.com/p/77e529fb35f9
% _$ t8 B4 d4 Q+ I简介猫盘又是一款矿难机,配置如下 - 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% O7 v% h5 x/ j8 g# F
由于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& O& p( w4 |1 @' ?: i+ q) k$ u
准备工作- 空的2.5寸硬盘(需要移动硬盘盒或者易驱线)或U盘(需要将USB母座接到主板上的USB排针上,见下图)
- USB转TTL线,如ch340等,按下图接线,波特率为115200,注意千万别接VCC8 W2 g8 C/ q' u
1 `& }8 w1 @5 f
8 O3 e$ z; R; y
UART与USB排针
* T+ [) W# O0 B# @; X2 a% ^$ O3 _' L. g
$ {% T5 G7 v0 L! L) s 刷入uboot: 方法1- U盘/硬盘格式化为mbr的ext4或fat32分区,将flash-image.bin复制到其根目录下,然后插到猫盘上
- ^1 a5 G+ n! ?6 t8 Q7 X接好TTL后上电,在倒计时结束前反复按回车进入原厂uboot' Q! C% Y: V- \& P2 T* N9 p, M; [; m: w
在uboot控制台依次输入以下命令:- }) h1 s1 D6 f/ _" s
setenv bootargs "console=ttyMV0,115200 root=/dev/mmcblk0p1 rootwait rw init=/bin/sh"ext4load mmc 0:1 0x1000000 boot/armada-3720-customer0.dtb7 D d* D: |$ K* {2 w
ext4load mmc 0:1 0x2000000 boot/Image) G7 t0 z: c# d* I3 q' e1 r8 `) r
booti 0x2000000 - 0x1000000$ T8 m1 U0 f, z6 `* [& H
|
等待系统启动完成进入无需登陆的shell - 进入shell后依次输入以下命令(这一步是把flash-image.bin复制到emmc的第2分区上): r3 H& z7 @8 [3 ?# q
当同时插入U盘和硬盘的时候,有可能需要挂载/dev/sdb16 z: i- f2 U' j8 a' P
mount -t proc /proc
6 N9 \5 }* f7 k" h/ e$ ]mount /dev/mmcblk0p2 /media
% R+ z: C6 k' Emount /dev/sda1 /mnt4 M& [, I4 [+ ?8 U: \2 h9 R0 D
cp -f /mnt/flash-image.bin /media7 K" C, E7 s! ], r3 G8 ~* j! q# ~
umount /media
: u6 H, A: D% R% F; yumount /mnt |
# q. \) z+ }6 u8 e然后直接拔电 - 上电,在倒计时结束前反复按回车再次进入原厂uboot; k, ] H, Y8 L9 Q
在uboot控制台依次输入以下命令 (切勿在uboot控制台中反复按回车)
* H6 F5 g& j1 Y. t
ext4load mmc 0:2 0x1000000 flash-image.bin
& n% R. C K0 S: fsf probe
& X: b/ f) J1 l# Psf erase 0x0 0x200000
7 _2 C/ C2 [2 |) l3 }sf write 0x1000000 0x0 0x200000
& z( R' p" N7 Q1 }1 Q5 F6 ^ |
" u- a: o2 Y0 m* G5 o- 确保上一步的命令正常执行完毕之后,输入reset复位,然后在倒计时结束前反复按回车进入新uboot
/ o/ M) `$ O8 \6 K0 o& m在uboot控制台依次输入以下命令,注意mac地址要改成你自己的0 o+ ?6 p/ ?2 y* `. e: h) [% V
env default -a6 \% J7 E: T* [1 ] U1 g i* L
setenv ethaddr "4c:65:a8:10:e2:55"
1 Y# i. G/ ]+ d h7 r l9 _% Gsaveenv; }# S) v3 _' X" H1 o
此时新uboot已经部署完毕,可以直接拔电准备下一步操作 刷入uboot: 救砖如果在常规步骤中操作失误,导致上电后不能进入uboot控制台,则需要拆下板子上面的spi flash, 用编程器将flash-image.bin写入spi flash, 再焊回去, 之后按照常规操作的第4步恢复环境变量和mac地址即可
$ k& o1 U2 X) f* K1 d- E1 c6 A; l除此之外,还可以使用A3700-utils中提供的wtptp串口工具救砖(需要Linux环境),具体操作请看参考资料 刷emmc确保已经正确刷入新uboot,将img镜像解压后用etcher或者其他工具写入硬盘或者U盘, 插回板子上 - 对于硬盘刷机:
9 p% G; O: c" S" E上电,在倒计时结束前反复按回车进入新uboot
! e# m. L% M0 P在uboot控制台依次输入以下命令: setenv boot_targets "sata mmc0 usb"
1 c; \. X, }7 q7 kboot | 3 t1 B* o, @. O% A* e' e* P
- 对于U盘刷机:
6 [8 W3 ?4 r. U4 K1 }插好U盘后直接上电即可
2 I& s! X, @; A+ j! l2 Y+ @/ `" ]% j
进入U盘/硬盘的临时系统后(应该是一个alpine,用户名:root;密码:admin),运行 emmc-install.sh等待刷入完成,然后输入poweroff关机,输出示例如下:
, X% d+ J! r% E& K9 L6 S) qalpine:~# 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
6 u) t9 }" f1 }2 X+ I0 M* d如果是用U盘刷机的话则需要拔掉U盘后再启动,即可进入新系统,而对于硬盘刷机则无需拔除硬盘,可在新系统中直接将其格式化 在刷好新uboot之后,若要刷入build-catdrive中的其他linux发行版,直接从刷emmc这一步开始即可- u1 ~$ \" l- F9 o( p0 Y7 t
由于猫盘内存较小,建议设置1GB的swap,具体操作请看下面 系统相关设置- 设置swap. F/ h5 L% g. q: Z! g8 p
K2 a+ j- |2 [8 s+ K4 \# ]5 `6 ?' H
. y4 k5 _( d1 |: [2 w& B6 P' @
dd if=/dev/zero of=/swapfile bs=1M count=1000 #创建1GB的swap
t3 @, J# r) p3 p- H1 y, |chmod 600 /swapfile) |' }8 s- H$ v
mkswap /swapfile
8 s* G7 @9 e! g2 J+ j/ Recho "/swapfile swap swap defaults 0 0" >> /etc/fstab
' k4 s+ q( U1 i. Z' m& w/ V/ e% m. Z6 _$ m
' Y( \% Z& s# O" D- p2 [ T/ _3 L% m, S0 {
, z3 T# f5 R9 t! b/ a7 l, J0 r5 ~
风扇控制(主线内核不可用)
9 Z0 r8 w0 W/ H1 D7 R
# X+ @. L( @/ N7 n4 \. u
7 t* I7 x3 c0 n* t4 ~3 F x! H0 i# K" \! f" E) d" |
echo 0 > /sys/class/thermal/cooling_device0/cur_state #关闭风扇
: k0 k6 v+ a% Xecho 1 > /sys/class/thermal/cooling_device0/cur_state #打开风扇
' s# w' _7 _8 B j0 e& t/ e
' @* ?& s$ V& h. k% S d" w
/ [% U3 p! M9 B6 e+ U! S$ ^2 a& Y0 B- m% o
- a9 @$ e/ @% z8 \+ E; l
LED灯控制(主线内核不可用)
4 ~6 `! ]% z2 q
6 Z' E. \2 i* y; o* x4 I: e- r0 `% [: R
4 i5 b: p/ s S x5 {) \5 becho 0 > /sys/class/leds/blue/brightness #关闭蓝灯
; G$ u, o" f$ r/ k9 I6 _9 yecho 255 > /sys/class/leds/green/brightness #点亮最高亮度的绿灯
: L+ D# M5 Q' Q% s- Aecho 128 > /sys/class/leds/red/brightness #点亮中等亮度的红灯
# V0 v% M4 R ?' S# R: W& q6 U1 Z# F: xecho 2 > /sys/class/leds/red/blink #点亮红色呼吸灯,可设为其他值
- T' D3 p* [; c2 F. Zecho 0 > /sys/class/leds/green/blink #关闭绿色呼吸灯5 N3 H$ T: S2 p
$ j8 A3 b9 j# W4 r7 B" g
0 k+ B6 G: U3 z& I8 a' I
2 @% N3 q& e! H, p- [# z' f( R8 c
8 k5 k$ d5 i: E7 ^; `硬盘休眠" ^& h) A! ~5 _ G- ?
build-catdrive中的固件已经设置好10分钟无操作自动休眠硬盘,如果需要调整时长,请修改/etc/udev/rules.d/99-hdparm.rules里面的hdparm -S之后的参数,默认值是120(10分钟)
; q" r+ {3 f B& a! l ACTION=="add", SUBSYSTEM=="block", KERNEL=="sd*",ENV{ID_BUS}=="ata", ENV{DEVTYPE}=="disk", RUN+="/sbin/hdparm -S 120 $env{DEVNAME}"- 读写uboot环境变量
7 h" \; b0 Z+ ?0 ~ fw_setenv foo barfw_printenv uboot其他操作- 在新uboot里从U盘根目录中刷入uboot1 G3 m/ W: ?9 q* `' A
bubt flash-image.bin spi usb- 在新uboot里从tftp中刷入uboot
5 m# U/ T% n# w& a6 J3 `& X setenv ipaddr 192.168.1.100 #设定本机
& {( t$ }' J0 B3 d7 cipsetenv serverip 192.168.1.2 #设定tftp服务器
+ ]9 ~. c' y0 m/ B$ ^ipbubt flash-image.bin spi tftp- 在新uboot里改变启动顺序
* E! V- [' W. w- g setenv boot_targets "usb sata mmc0" #默认为usb->mmc0->satasaveenv 已知问题- 主线内核中无法控制风扇的gpio(会导致以太网phy重新复位),所以poweroff后风扇不停3 k( I7 h7 q3 k' @; y: m4 o
6 E+ Q' L$ \4 D1 g6 w
S& W6 t3 E* e1 J5 q2 o$ G( _3 m | f0 H
3 y9 j1 M, b. H" Z3 O
0 Z4 l* ^+ J: y9 W M+ \
+ J: w1 c. N, l4 U0 Y% w( K) v9 D2 I' T( I4 h
5 x7 u5 a V2 X- q" x |