本帖最后由 picc745514 于 2019-10-1 09:11 编辑 % g) O. r3 s7 |' F- @
$ h Z1 }# j! }" `' c违规没有?版主。。。。。
1 O# z( c' F$ G# n原作者 hanwckf 原地址https://www.jianshu.com/p/77e529fb35f9
- U/ l( `" d% B- U简介猫盘又是一款矿难机,配置如下 - 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
5 C# x, |$ W4 Z
由于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
9 v7 y( B% ]3 r8 c
准备工作- 空的2.5寸硬盘(需要移动硬盘盒或者易驱线)或U盘(需要将USB母座接到主板上的USB排针上,见下图)
- USB转TTL线,如ch340等,按下图接线,波特率为115200,注意千万别接VCC" m& [: x& V r! o9 `5 n* a
8 u0 R0 ]9 o! X( {. F * [) g' ~0 T# q) N M
UART与USB排针8 P# {. R! T3 G) }' \+ v
% b, Y5 ]! S- I! ?+ z+ s/ |; U 刷入uboot: 方法1- U盘/硬盘格式化为mbr的ext4或fat32分区,将flash-image.bin复制到其根目录下,然后插到猫盘上
, g; f# e2 |# ~3 ]1 x2 Y接好TTL后上电,在倒计时结束前反复按回车进入原厂uboot
% B! q, i% j7 V, E在uboot控制台依次输入以下命令:2 j. {& W9 i( Q- [
setenv bootargs "console=ttyMV0,115200 root=/dev/mmcblk0p1 rootwait rw init=/bin/sh"ext4load mmc 0:1 0x1000000 boot/armada-3720-customer0.dtb) A @7 l! [% G4 D
ext4load mmc 0:1 0x2000000 boot/Image
; l! d# @% @: h- y% C: [0 sbooti 0x2000000 - 0x1000000
/ Z* |4 L* x: v |
等待系统启动完成进入无需登陆的shell - 进入shell后依次输入以下命令(这一步是把flash-image.bin复制到emmc的第2分区上)
$ o( {$ D1 B/ c$ q- L当同时插入U盘和硬盘的时候,有可能需要挂载/dev/sdb1
. [. W: ^/ d# J; j. _2 ~
mount -t proc /proc5 N7 P" M3 [3 P9 P5 G5 u
mount /dev/mmcblk0p2 /media$ q! I1 ` w4 z- }' V- C
mount /dev/sda1 /mnt
# j# Q4 q' g$ f; M! mcp -f /mnt/flash-image.bin /media
5 T: g! ^- o6 i Bumount /media
2 P3 o* T% h8 T tumount /mnt |
8 m; l- h5 P2 q6 y/ b然后直接拔电 - 上电,在倒计时结束前反复按回车再次进入原厂uboot
* L4 H5 c6 O" h! b, c$ {; w: O) u3 k+ C在uboot控制台依次输入以下命令 (切勿在uboot控制台中反复按回车); r$ x" O% \7 d3 ]% b6 V
ext4load mmc 0:2 0x1000000 flash-image.bin
# g2 ~4 e5 u3 @sf probe1 S2 z. H, j, s* B
sf erase 0x0 0x200000' M9 { N6 n$ D% d3 H/ Q3 r. p
sf write 0x1000000 0x0 0x2000006 y! S. c( H7 x' C4 m
|
$ d3 K9 C( \2 R" {- 确保上一步的命令正常执行完毕之后,输入reset复位,然后在倒计时结束前反复按回车进入新uboot; T; F @: W1 K0 o
在uboot控制台依次输入以下命令,注意mac地址要改成你自己的
+ c, M4 F( [0 r( p( A1 O3 M6 F/ m
env default -a
' q9 q, a& H6 X% n6 @! a7 [9 }' Jsetenv ethaddr "4c:65:a8:10:e2:55"
+ o# |% f6 W3 J) M& |( O, Csaveenv
1 D& ~5 Q7 P8 ^2 K/ v此时新uboot已经部署完毕,可以直接拔电准备下一步操作 刷入uboot: 救砖如果在常规步骤中操作失误,导致上电后不能进入uboot控制台,则需要拆下板子上面的spi flash, 用编程器将flash-image.bin写入spi flash, 再焊回去, 之后按照常规操作的第4步恢复环境变量和mac地址即可# `( t( W/ Z2 a
除此之外,还可以使用A3700-utils中提供的wtptp串口工具救砖(需要Linux环境),具体操作请看参考资料 刷emmc确保已经正确刷入新uboot,将img镜像解压后用etcher或者其他工具写入硬盘或者U盘, 插回板子上 - 对于硬盘刷机:
C7 [7 I6 R* ]; w上电,在倒计时结束前反复按回车进入新uboot& J* o3 W$ r, l4 n7 ~
在uboot控制台依次输入以下命令: setenv boot_targets "sata mmc0 usb"
5 c* y; F/ a. ]boot |
- R Q& E, o( m0 t! N4 E1 U
- 对于U盘刷机:4 `2 M- o3 n% o
插好U盘后直接上电即可- L! M$ Z* I7 N5 }$ C8 I. G, N1 A3 d
进入U盘/硬盘的临时系统后(应该是一个alpine,用户名:root;密码:admin),运行 emmc-install.sh等待刷入完成,然后输入poweroff关机,输出示例如下:
" p! f2 [. V1 L" L! ralpine:~# 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
; a% l8 r7 y4 e* X$ O如果是用U盘刷机的话则需要拔掉U盘后再启动,即可进入新系统,而对于硬盘刷机则无需拔除硬盘,可在新系统中直接将其格式化 在刷好新uboot之后,若要刷入build-catdrive中的其他linux发行版,直接从刷emmc这一步开始即可- Q4 I7 x8 U( E2 {
由于猫盘内存较小,建议设置1GB的swap,具体操作请看下面 系统相关设置- 设置swap, Y8 p( [" a" p& S( b6 P! I
I6 z+ I) c% p4 U5 u" s. X- j' W+ Z5 p& N z, L
+ ]( J, s9 o" T7 X8 e. A
dd if=/dev/zero of=/swapfile bs=1M count=1000 #创建1GB的swap% O- i& j2 W3 n5 w+ ^
chmod 600 /swapfile3 F" m4 c3 |" \! K. n3 [8 A4 v, N
mkswap /swapfile6 `# Z/ ?4 y7 O! @ `( f
echo "/swapfile swap swap defaults 0 0" >> /etc/fstab# ~9 H8 W2 d. W7 y" M* ^. K
: |" m$ n% s" E9 B+ i6 }
. \- Z# m, k6 P( d2 E" E7 f5 f
" ?/ B% Z/ p& L
! h4 @) Y. ^ T2 p; W7 }! Z) Y风扇控制(主线内核不可用)
5 C5 V0 d% n% w$ _8 G& Q+ \ , E! Y0 w2 } g4 x, H4 v4 J1 Y- g0 y
; W6 Z9 R9 _0 v* K- `5 [! w
, u0 \$ ?6 k' J$ b* T, I4 \" `echo 0 > /sys/class/thermal/cooling_device0/cur_state #关闭风扇
. o% R% p6 H& g' J4 ~/ H! d; Wecho 1 > /sys/class/thermal/cooling_device0/cur_state #打开风扇5 [ W$ F) T0 Y b4 d
; V1 T; i$ u$ G& ] d
; z( X# G/ `/ s, u! m ?
. Z* Y6 ?9 b, v
5 ]9 o4 u0 D" C4 f' s+ GLED灯控制(主线内核不可用)
/ ]: r7 H3 o- f( J' u8 [: S
8 N; ?( F- I3 t! N; s& K8 f$ @) }+ `8 ?$ H! x- h; D
echo 0 > /sys/class/leds/blue/brightness #关闭蓝灯
; S: O5 @& j$ h" G! qecho 255 > /sys/class/leds/green/brightness #点亮最高亮度的绿灯
Y) T4 ]# U5 j: xecho 128 > /sys/class/leds/red/brightness #点亮中等亮度的红灯. d3 c& [; `3 O V) z
echo 2 > /sys/class/leds/red/blink #点亮红色呼吸灯,可设为其他值/ T+ h1 ~. ?' Y# {. j3 ~
echo 0 > /sys/class/leds/green/blink #关闭绿色呼吸灯: [( ~8 ^' k8 O1 V. h6 M7 b
5 Y* C! `! y; S. y$ e0 D3 F
, J# S+ P5 c& }: P- E8 {6 @9 h
3 i0 A( F) U9 w* Z# Q
) I4 P2 \4 I, u4 y# s: m硬盘休眠
f0 Q% l, w! U8 Abuild-catdrive中的固件已经设置好10分钟无操作自动休眠硬盘,如果需要调整时长,请修改/etc/udev/rules.d/99-hdparm.rules里面的hdparm -S之后的参数,默认值是120(10分钟)
% \- X. q0 P6 t1 x j$ _3 t ACTION=="add", SUBSYSTEM=="block", KERNEL=="sd*",ENV{ID_BUS}=="ata", ENV{DEVTYPE}=="disk", RUN+="/sbin/hdparm -S 120 $env{DEVNAME}"- 读写uboot环境变量. A+ z. w$ Q2 Q2 ~
fw_setenv foo barfw_printenv uboot其他操作- 在新uboot里从U盘根目录中刷入uboot; w# E7 x9 I) W# W3 ^/ I7 w5 b
bubt flash-image.bin spi usb- 在新uboot里从tftp中刷入uboot
6 w7 n/ X/ P C3 X6 K setenv ipaddr 192.168.1.100 #设定本机* k5 O2 ?% @# P3 L6 q1 D
ipsetenv serverip 192.168.1.2 #设定tftp服务器
& |& U" P$ h8 X3 V3 j; G$ ~ipbubt flash-image.bin spi tftp- 在新uboot里改变启动顺序* U1 }/ }, T$ B6 v
setenv boot_targets "usb sata mmc0" #默认为usb->mmc0->satasaveenv 已知问题- 主线内核中无法控制风扇的gpio(会导致以太网phy重新复位),所以poweroff后风扇不停1 l# n. c2 w( I7 R" N" R* Q
+ ^/ j& P- w+ L2 e9 H! D% j: E
8 o, d, A! o, F9 b. X+ u4 S! C& M- m4 r. ]
0 S: F" }; {4 x' {) P6 f' Y
: w% g) A2 d! }
+ q, G+ u# _$ J- k9 D( l
6 C' e* m* N/ I( c! H) J3 E2 s1 f3 b. ]( _( \" U
|