|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 Heaven_1 于 2022-9-19 10:30 编辑
* F' U X) d2 [5 n) T1 a
' J ]1 z+ P0 w0 \$ Z8 @0 a1 l d- C" I
在Ubuntu保留文件系统或者说备份当前开发板镜像的需求在不断增加。
a7 p) u7 S2 i5 O' n) M* q: D2 O% g3 {
$ Z6 e8 ~- k0 I- L* ?5 y, G& p- L7 h/ w3 D. z
; S1 s$ U5 \+ `& D; Q: W) q比如Ubuntu文件系统需要安装库文件的话直接使用apt-get工具就可以下载,但由于需要下载的核心板较多,比较费时间,这时需要将安装好库的文件系统打包出来,或者做成一个新的镜像,用于烧录到其他核心板,如果将库的源码交叉编译再放入到文件系统的源码中重新再源码打包一个镜像比较麻烦,而且交叉编译过程中可能存在一些问题。
9 ^9 K) h6 Q! N; @' q/ x+ P* e" F, _
% n4 n- j) Z- h3 R, Q4 W- T' @) x
+ r6 C$ p- t9 S. G. {: |( W, D$ p( [8 K: [. {( O C
- q) b; U/ Z) c' U; C/ ^$ r6 Q* t
今天飞凌小编就通过OK3399-C开发板针对以上问题来为各位工程师小伙伴介绍相应的解决方法。2 }1 J ?5 e* g4 d1 R
4 y" b8 x$ j: }; l! R0 w- }' B
2 C$ a! M3 l" S1 n6 ^$ h: s5 j8 O& S$ N; G; u9 R3 W/ M
- R$ Q- B! V2 f H
1
( l3 o8 b2 ?0 m7 a: S2 T
/ V& V F, H4 i4 _解决思路 . r0 L' q1 }9 H5 ~( E
% [: m4 v7 Q, N2 z9 p; w* X( Z" x [
5 m& q9 V1 F/ t! s
0 X' C; y% s" f4 `! f! O$ E; c3 U
/ h# E) x& P+ u
& ]2 e1 g7 u& h) T* T2 R6 J3 _; U. Y! t$ a6 |
) T& _' w4 v& }
基于Linux下一切皆文件的思想,开发板启动后进行的一系列操作都会以文件的形式保留在文件系统中,而RK3399处理器的Ubuntu系统提供了文件系统镜像ubuntu.img用来编译生成update.img。
3 f. t! b! O& L# l
+ }' x* {# m* ~( h) c6 T+ L. Y/ {& s2 r9 j
' |& Y* ^0 K, f: W& z
0 z) ?) V1 m2 u% ?2 D* W4 z
因此我们需要一个方法使OK3399-C开发板中的文件系统和ubuntu.img中的内容保持一致,这样编译生成的update.img就包含了当前开发板中所配置的环境,方便用来备份或者批量部署。
2 ~3 i s( u( c
& ]( k5 T6 i+ T; `7 S
$ V: X" c7 g# M* @& X1 P; P% }+ p0 g
( A* f9 j2 x& y1 r6 Y2
2 r# D1 }. s n- s, E3 E
% U( z8 C9 v$ b. W解决方法
/ m# R9 J/ v( K5 r
: {0 J- E" E) u
0 p2 }6 f" D! O8 D/ }1 J" ~; r) W2 L# k
% X* c3 u5 d$ ]3 u5 n' r. g) V+ R! h3 f n) U& C# D9 f7 I$ {# R
R4 I% c- j9 W7 P' o8 F- t: A( N _( N" j, \5 U, B" {
其实飞凌嵌入式的官方论坛知识库之前已经发表了两个可以实现的解决方法,这里不再赘述,只做简要说明:
5 r! C" I& F; ?0 `4 [2 m" a7 g5 Y1 H6 G2 r. F l
! i, z0 H5 i. Y& Z) @3 O! q
; ?: R. L; A7 ]' M- p. m/ y
4 P! g. Q( n9 X: ~方法 1:
1 P! G0 ~7 g( m% ^+ w0 u+ e0 {3 U! P
该方法是将ubuntu.img文件copy到开发板中,通过mount命令挂载后复制当前开发板中的内容后,再将ubuntu.img转到开发环境进行编译,这种方法最为简单粗暴容易理解,但很容易因为操作者的疏忽而导致复制不完全。) m: c ~( t: n4 e# c
$ f7 ]+ o- ~ e7 L
9 }1 y: g: f/ h& A
* F! K! Z/ |7 f9 i0 w; U/ C. a+ ?& f- X+ K1 c! c
方法 2:
3 H7 j1 y# M: \3 x) U
' p( ]2 l k) ](在开发环境模拟开发板挂载ubuntu.img)- R8 B3 ?! w3 L! s
" c# a/ x1 O2 ?7 i% d5 `
该方法直接将ubuntu.img文件在开发环境中模拟开发板的环境进行apt-get等操作,可以类比理解如下:
" t0 l0 q" J- A5 C
/ g& \( Y5 O- C! v% o, A1 n/ Z/ s在PC端的VM虚拟机里运行Ubuntu系统在Ubuntu中的qemu虚拟机里运行ubuntu.img系统
/ F' T6 ?! |2 b5 v& Z
$ a( I( Z* j1 p: \/ { M这个方法比较符合逻辑且操作方便,但需要再将已验证的操作在qemu中再执行一次,如果开发周期较长,可能有些在开发板安装的库文件反而在qemu中没有安装导致问题出现。
: K$ q; l: J9 i# h. r* y8 Y6 O8 s- e5 w, e& @1 l% ~- @
方法3:9 w( t2 |! [6 C
. c& f7 ?5 _! n q m3 ]通过rsync同步两个文件系统中的内容,做到实时更新、同步。本文将着重介绍并实操第三种方法。" ^$ u1 e1 h: ~; W2 H
+ B. E! i: ~" @rsync的目的是实现本地主机和远程主机上的文件同步(包括本地推到远程,远程拉到本地两种同步方式)。 [) |; M z9 t% o; T6 P
3 t1 P! ~( P- q) H6 F. ?' i本文以OK3399-C开发板和PC端Ubuntu虚拟机为例,同步开发板安装的cutecom(Ubuntu可视化串口调试工具)到Ubuntu的3399-desktop-release/rootfs/ubuntu.img中。
6 B# P/ Y, ^" N+ u' R! O' L' J* i- D1 x5 b( c; e
Ubuntu开发环境IP:172.16.0.167- F! r* ~4 Z! x" K5 p
9 J' l4 [; `" c+ ^OK3399-C开发板IP:172.16.0.168: R: X! g9 }) y0 j! x0 \
& U7 K" o+ U8 [/ x- N6 `
确保双方可以ping通,确保两者皆可ping通百度。
. W% t5 c3 h5 f0 k: H$ c b3 ?, N7 p$ ]/ @5 O5 { P
开发环境操作6 F2 F- c3 `3 X
1、为开发环境设置root用户密码,使用命令:passwd root;
$ ^* W8 c+ s1 R# R8 g4 j& ~
" G0 k; l$ p. p2、修改/etc/ssh/sshd_config文件,添加可ssh远程登录权限。
R( h* [; u5 h* a" ?' M) h
/ r% J1 [% ~" H使用命令:sudo vi /etc/ssh/sshd_config;; u& u! D% t, |, L
) A+ y ^- j9 x2 Q
添加完成后效果如下图:* Q6 d" l" }) l
; m8 Z. A' Z& ]5 M' k/ N7 B) b$ C* S* T( z) g; ]# W
$ c* U4 I' T' b! S% D3 J4 I) X# D
7 l0 \2 l9 A2 o: _4 P# K1 i![]() [backcolor=rgba(18, 18, 18, 0.5)] 3 z, f, P: k4 @" ]4 C% T" O( J
B2 K9 k; @1 |3 d
& G1 g( N" E6 [' A% d/ r0 H+ I% z. a2 Y
% [/ Y" J( F+ O3 F& |
编辑# J" e( `: _4 \; G$ X$ ^& @. s& p4 j
) h4 F7 Z+ H+ U9 f/ Q I完成后效果8 J. E/ h6 h# x% J5 i
3、重启sshd服务,使用命令:service sshd restart;
C! R5 v$ ?# ?9 O' E( d9 q4 n! f5 e" V. {
4、将源码中的ubuntu.img挂载出来,建议挂载到同目录的target目录下,在OK3399-desktop-release/rootfs目录下使用命令:sudo mount ubunt.img ./target;9 z9 k" M5 C: |/ p: s. x
5 I: C3 G Q, ]' {6 ]& i+ R- @
开发板操作
. t. p! `0 @+ T& F5 L/ E1、更新下载源执行命令:sudoapt-get update;
$ D& T: Y# }; E# s; D
; z4 e8 y0 [( C8 S T2、下载rsync服务,执行命令:sudoapt-get install rsync;
3 K: n ?$ P* x, D
, V: f9 e) k9 u1 d; [3、如果文件系统已经有所更改跳过此项,本文中还未做任何更改,所以将下载cutecom以做测试,执行命令:sudoapt-get install cutecom;4、将开发板文件系统同步到开发环境中的文件系统中
( F) J& S0 \; u8 T1 v* x$ z8 _, J0 V+ h$ h
开发环境文件系统路径如下:5 v: A/ O8 q8 y3 I) _- P b
6 X+ P% C0 y& E: S: a2 {
/home/forlinx/3399/OK3399-desktop-release/rootfs/target;$ L# l Y& q5 k5 Q! n
) s% K$ Q6 N5 T3 A& ^/ F开发板执行命令:
6 O4 W2 S1 g7 N6 P( Y7 A, p$ P# e9 b: ?' k! G/ @
rsync -avx / \ + t4 P& ^, z; a3 X; G" _; @
, P$ W# @. D+ G3 O# U& Q. Rroot@172.16.0.167:/home/forlinx/3399/OK3399-desktop-release/rootfs/target;
1 E. W4 ?; w' Y/ B5 l O, B( F' b8 D* }8 V
1 X0 ^! m/ j5 N3 l3 p8 s4 O/ D![]() [backcolor=rgba(18, 18, 18, 0.5)]
( S/ ]3 f. L% n- U" b0 C8 l, b0 X1 W* [% ^4 }) @: d) Q$ q: i" L, m3 ?# d3 O; P
编辑切换为居中
& o; [8 I" {% X; O2 X2 b& u执行命令
7 {/ @% [6 f% W0 L" Z# R e3 K# T首次执行需要手动填写yes,记录成功后,以后就只需要输入开发环境的root用户密码;9 {- h9 ^7 ~" |) \7 ~6 X0 q$ d
2 H b2 a( A1 l, E1 D. @
5、在开发环境查看,是否存在cutecom,结果如下图:& V; R5 w9 e: f& R
$ l! S' T, r- c) [# N9 g0 M. Q![]() [backcolor=rgba(18, 18, 18, 0.5)] & ~ Q9 [6 F& N6 f L3 N) o
# S: @( B {' Y+ c5 L3 U
. D* i' O' n, A6 K/ @" n7 N) N M/ Q4 V( M* E
/ z- q+ s; p% t: h& Z+ I1 i! D3 Q
编辑切换为居中
, c/ |+ @0 g9 w4 d结果0 E, X. ~+ }! O( B8 U1 L5 |# ^
到此,在OK3399-C开发板安装的cutecom已经同步到开发环境的ubuntu.img中。+ f; r: X3 @# S" b* W$ F' B
接下来,在开发环境执行编译脚本烧写到OK3399-C开发板进行验证,将ubuntu.img文件卸载,执行命令:sudo umount target。8 G$ Y/ s* M% \8 n. ?3 v
回到OK3399-desktop-release目录执行编译脚本 ./build_ubuntu.sh 生成update.img后通过OTG烧写到开发板验证cutecom是否存在即可。
$ K% ~4 G7 x: R0 a8 V7 A. X. A6、验证结果,cutecom存在且可正常执行。结果如下图所示:
$ V' U' z' s& W' z: l4 K( Q
0 }/ c( Q3 @- N$ ^* i) z H' t![]() [backcolor=rgba(18, 18, 18, 0.5)]
" B7 y" s* Z4 L4 Q: ]; `' m/ [, `# [
2 V2 A6 o. P: S1 x$ j 编辑
/ A, y, n. c' N& ?$ K4 g验证结果
$ t6 z `/ |( [![]() [backcolor=rgba(18, 18, 18, 0.5)]
/ t; b; H& C2 W, o" p
& m7 Z% {6 h2 U8 b& I
1 \! q, [8 ]: G7 k8 P% ]# a* d1 Z9 a0 t# b. s* X
- m* N* Y! S2 J# p6 G
编辑
( D$ r: c0 r/ V( ]; ^2 Z验证结果
0 D8 u! t+ G5 M以上就是小编为大家整理的在OK3399-C开发板上运行Ubuntu系统时保留文件系统的操作方法,希望能够对大家有所帮助!
# N( [* o5 q6 [# t8 a( {4 y# c( u
" c& ?: V3 S, v3 t, R$ |% K( D: f" |
|
|