找回密码
 注册
关于网站域名变更的通知
查看: 314|回复: 1
打印 上一主题 下一主题

手把手教你在Ubuntu定制文件系统

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-12-15 20:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x

为了给客户的测试和开发提供便利,飞凌嵌入式的开发板产品一般都支持多种操作系统,以基于全志T507H处理器设计研发的OKT507-C开发板为例,它支持三种操作系统,分别是:Linux、Android 和 Forlinx Desktop(Ubuntu),这里提到的Forlinx Desktop系统是飞凌嵌入式在Ubuntu base的基础上构建的桌面操作系统,完全兼容Ubuntu18.04,相对传统的Linux系统而言易用性更高。


+ i3 }% G* V5 @! k; n0 [" x% h
* R, M* ]; o5 a% U. l0 S

0 @  N( I" N: m& D

Forlinx Desktop(Ubuntu)系统基于Ubuntu官方为嵌入式设备制作的操作系统-Lubuntu,该操作系统具备apt-get、ldd等常用的命令,若需要安装软件则直接apt-get在线安装即可,不需进行交叉编译移植等繁琐操作。但是每次重新烧写镜像之后,之前安装的软件就得重新安装,比较繁琐,如果需要批量操作则每块开发板都需要去apt-get安装,这样会大幅增加工作量,很不便于批量化生产。

% d0 ~9 n) h0 T! Z0 W1 P! Q

能不能把软件一起打包到镜像呢?这样每次烧写完就不用再去apt-get在线安装了。答案当然是肯定的,这就涉及到文件系统的定制了,那么接下来,小编就为大家介绍在Forlinx Desktop(Ubuntu)系统上定制文件系统的操作过程。

, [$ b7 q/ T: q# _6 I  \4 j- R. ^! ~

1. 解压文件系统

首先,找到OKT507-desktop-release源码的文件系统所在的目录,然后将文件系统压缩包解压,路径如下:

OKT507-desktop-release/ubuntu


8 K1 Q- l1 K) B( M9 F- j- {

) _9 y, N- r( q& g6 b2 W) @  o

解压后,可看到文件系统目录OKT507-linux-ubuntu,进入到此目录后可看到如下文件夹:


5 P' ?* q3 R! B9 V' i

2. 安装QEMU

这里简单介绍下QEMU,它是一个小巧的模拟器,可以模拟很多硬件如ARM、x86、AMD64/Intel64等。QEMU用途广泛,比如Xen、Android模拟器等都是基于QEMU的。下面我们开始在虚拟机进行安装QEMU,如下:

① 更新下载源:

sudo apt-get update

②执行命令安装:

sudo apt-get install qemu-aarch64-static

sudo apt-get install qemu-user-static

& o/ ^8 j3 |+ G( w" C( ]4 v

3. 修改配置

① 将QEMU的qemu-arm-static拷贝到文件系统目录OKT507-linux-ubuntu,如下:

sudo cp /usr/bin/qemu-arm-static usr/bin/

; i4 u" G8 }: a7 M% h7 O

1 Z8 Y* E! p# T% |3 H( E+ i, B

6 u$ u) p! j, c9 C

② 拷贝PC主机端的DNS配置,因为待会我们安装程序时要用网络:

sudo cp -b /etc/resolv.conf etc/resolv.conf


- f( M5 Q1 A( M0 u* G- }


- q  I: R! a  |7 w7 X. K( d
8 C2 ]6 [; G' _3 i" q

③ 修改下载源:

sudo vim etc/apt/sources.list

  ?' Z$ Y+ {' Z4 R. x5 g) u

添加

deb http://ports.ubuntu.com/ubuntu-ports/ xenial main universe deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial main universe

( J/ j+ Y; Y( L; b! O


; P5 g+ A. N7 H8 P* R; U
  n' T" L& W+ c0 [" \) _  W: U6 y; S2 E" V. @% _( M+ @3 Z

4. 挂载文件系统

因为我们这里是通过脚本的方式挂载和卸载文件系统,所以需要编写一个脚本挂载和卸载文件系统。

① 新建一个脚本文件命名为ch-mount.sh,附代码如下:

  • # ~7 e* E+ f, m1 ~1 k7 h, J; K$ S
    * z" F/ k5 B6 e

  • 6 d. q8 q' v' u* Q

    . F: e* g4 m8 q8 b8 r% F7 q4 ]
    3 z1 J  z. Q4 s' z2 r

    3 R9 R3 j4 P7 Y( L, D( C: m0 a  h

  • % {3 `+ `% ?! m5 N9 _3 W, C
    5 I! e) q% ^% M; g* r+ o
    #!/bin/bash- i# ?: R' S" o% z) h

    $ a. Y) z3 ]# J3 a! j; N+ a, |  f- e
  • 8 k4 q5 N/ f7 k. L( {% `$ B

    % }  a0 Q! g/ i3 }function mnt() {
    " G  R+ K! C) T* P

    % ~% G# P: d+ z7 f* h

  • 5 V, A7 c: N# `0 t% i

    " y% V) m- m; D' f1 Fecho "MOUNTING"
    5 b# R  V4 [+ L% t0 w

    5 W! |& h% s/ v3 z: b

  • 2 R. x- ]0 j0 P$ I* Q4 m' \
    " ]6 \9 x, H5 K: |6 l7 |
    sudo mount -t proc /proc ${2}proc
    # D* o( r3 Y) l

    + `' d" i% o* ]: V7 s

  • 7 ^% D( X1 V+ F( N7 R0 k' d5 n3 |

    * w* P# H, Z) v% G! `- zsudo mount -t sysfs /sys ${2}sys
    & A# |' q- l4 t3 B3 s

    . ^  {# o' M6 ]6 `, s/ T
  • 1 U( b/ B# e+ u7 m$ g% {

    , S& m, }: G/ ^9 {/ Z5 J4 N- t) Xsudo mount -o bind /dev ${2}dev
      R3 x* ?5 e; W  K  T
    1 }' e, H% `: ]
  • , D) L: V' a% ?, Z
    3 c/ c! H' i* ^* n+ g% }' y, `  r
    sudo chroot ${2}
    : R6 |& Z$ A0 k0 F

    ) z9 O! b4 F; p" N4 R: i# k
  • + Y6 r3 w6 l; j/ c
    ) q: K" z, h' K: |! j7 y
    }" R7 r: [' m* i
    7 I& Q/ ^! o3 v. b' J) h

  • % e1 E, d7 \; y4 P) _
    ) g1 W) n0 X" B' e- U
    function umnt() {* |9 u/ j) D; S. H

    9 e( y! W$ @$ F' o8 m- |$ O- h

  • 1 d% u: W6 y/ x) {. h0 g+ {

    0 E" F; m& k$ @& J  d8 secho "UNMOUNTING") p. I! s% V7 U- l8 Q4 _0 X
    6 L  W9 T1 ~. h8 x
  • 8 h* l7 v$ z4 D$ T) m8 j
    & Y1 w- J1 I2 F2 s$ Y# p
    sudo umount ${2}proc
    4 D  V. g4 ^6 Z& x4 t
    5 }6 R, _+ m# \# Y, P
  • & g1 Y7 F9 e% `, o% ~4 g  z
    / ?  ?: s% y; |6 j6 I: P
    sudo umount ${2}sys
    ; D& u9 k7 ?. p. E
    5 T# u- S/ W2 |/ r( r& [. X6 V/ U
  • 7 Q( H, W# L+ y4 ~& H
    9 }8 {8 F8 b1 z' \" f0 F
    sudo umount ${2}dev. V( t4 g( m; V, A4 u! h5 s0 ^

    3 B- c( e! R; C9 B  B

  • , g; O% w; p3 \9 B# @5 p
    9 Q" H9 t5 B" q2 ^% \
    }
    7 E( p+ f3 C2 b2 S) m( ?, G3 Q9 j

    ) R  g% {. T$ A

  • 5 P( E- s  u9 w. T' Q  q/ o, i

    ) W* g% q# b/ v( Y7 ^+ b6 z, I: }) R9 nif [ "$1" == "-m" ] && [ -n "$2"0 t( g( n* a, h) h! [( Q

    . Q2 P) a$ [5 M% y  ~" b; P: T7 `
  • / S$ H, t8 b& g. M
    : f; [& b1 Q; Q0 @- [
    ] ;
    ' i. a  L  {' c

    9 \( |8 s8 C: l/ c* x: z3 L

  • : }* A# k* W1 ]- \. z6 }9 n

    ; _4 D2 L) \# |; Q+ B3 D- D( C8 I- ~6 t# f4 ~  J  V
    ) ~3 A* ^' a' [! H& l9 ?. W) U
  • 0 ?9 h. w  I& a( N1 s; ~

    # U8 N$ ~& x: b! ?! R: Pthen. u% _  o, Q+ Z9 ^' ?; m) O

    : p+ h( s8 ]$ m  e$ o3 G2 ~

  • : J( g) a, q4 r( I  \6 c

    * D& j- \  y! V+ Y* xmnt $1 $2
    7 _6 H, `# E& V- E2 o

    " x" y; v, y( j) k& z8 V
  • , a) f/ Z/ V% t" l1 U

    ' G+ X9 u: U9 @. Telif [ "$1" == "-u" ] && [ -n "$2"
    9 h: R7 J9 a# @4 g# |: ?
    & p/ m, o! e& M7 T$ b% s' ?
  • 7 o# ]9 E% U% C, S8 H
    $ B* m/ q8 u0 D! `. e) |$ H
    ];
    & q, l# I7 T: F: W4 W
    2 w4 N1 t7 E. u/ g: J
  • $ ~9 B9 U2 S/ \/ ]4 @& i' w
    - l% R; T% M$ K- F: B
    then
    + X0 X8 {9 f. ]! G0 x5 g+ S: g* k/ P

    $ E* X. K: _) f" {- @! k. o

  • * S: F' q& [1 `' I0 ?# q
    ) ^/ I* D: k" V4 X1 ~
    umnt $1 $2% n# K# ^5 d8 }( j$ |: T1 P+ F

    % J0 E! }( U, w1 Z5 _

  •   ^! w: q" ~: d# k( b

    ) ]0 a7 h9 v( P8 s8 nelse
    4 Z3 c% e+ R, E1 _7 _8 P7 h
    ( w0 r6 |4 v, u
  • $ Q* R0 u( R4 B  g, {# Z! {
      j) J. r% N7 L& T) ]
    echo ""
    9 b* n# L8 q# h! ]6 t% `# y
    + u: @: }7 K5 C7 _
  • 3 ~9 h* K' A2 B" i: f1 A& Y
    ; r' `, h% D+ ~+ D, {
    echo "Either 1'st, 2'nd or both parameters were missing"2 r  h5 E- e% R& x8 S6 X8 ?2 o, A
    + p8 c% m; [% a7 ~

  • : f% P8 T' d( O% B4 {

    1 N2 L3 ]) N! }, R$ S  Hecho ""9 G) k; \* H+ C- A6 s1 p

    4 C+ e5 J- ], K& Z  P
  • * U; w$ n, y) E; A. I

    0 R# _" C5 s) Z* ]' fecho "1'st parameter can be one of these: -m(mount) OR
    # X* ?5 ~$ V& o. X( I) y
    : T! F  I6 u* X3 c4 i% c

  • 0 w# h& |/ {* l7 i3 j6 q
    , ^. a! X8 Z* C/ p9 t8 B
    -u(umount)"
    3 |$ [+ l& \- |0 m

    ( L  _& K4 M/ W+ U) H' b. b6 q# P

  • 0 f% V1 j" w' |, S
    # P' J% m9 w- |  N6 I, p* b# a
    echo "2'nd parameter is the full path of rootfs. |: V+ _( {+ W
    ' K$ t+ ^0 \& M% F3 ?

  • & H6 V! x/ A* t2 S/ O7 c! J! A

    ; [" h* \2 Y+ O$ g- B7 V0 }0 G7 jdirectory(with trailing '/')"
    * N1 L4 s9 k1 K+ m5 T

    5 A( s4 r6 R7 e/ d
  • - i9 p( U/ M; o4 G8 ]# K

    4 ^" [/ r  s5 o, K, `echo ""
    " c- ]5 H: q0 T+ O$ b

    - z" ]- S0 U6 E1 |1 y/ J* j, A

  • - B, g5 {; l/ _( q% R
    " Y9 i) X3 x2 F0 K! L5 u
    echo "For example: ch-mount -m /media/sdcard/"3 n& x1 c$ G' N
    6 {3 V, h7 b' P

  • , M" d, F4 g8 k# _

    1 `. r! {+ {+ Necho ""
    " G9 M2 j0 |' s5 T2 }5 n8 }

    ' }2 k% S0 n0 X9 T4 g

  • ! G3 e8 L, i. U3 {- ~1 O" |1 u
    7 o* o: \% O2 g6 K
    echo 1st parameter : ${1}- \; E* ]( d" X+ Z
    9 y" C2 U! H1 e3 G( _- {, H
  • * K8 R" j/ S2 J9 r+ d7 w* @
    / P" l( v# Z/ X3 h
    echo 2nd parameter : ${2}
    4 }6 M6 v) r$ C0 J% \- x

    7 A' t, w: t) ~7 q$ }! K  R
  • 0 o* U: R, r* D( N0 }8 M- H" L) E
    $ a$ ^# R' k* A# p, D2 u
    fi
    , S: @  ^+ C( q6 y

    1 t9 a" E. J& c2 H3 a! B" e
    , b2 Y& r! b( ]

, m' n& q  ?* m' T! ?8 x; x6 s3 j3 ?4 g- O

* e! [7 _1 V' a3 n" i1 M- ?

② 设置这个shell脚本可执行权限,如下:

sudo chmod 777 ch-mount.sh

③ 挂载文件系统:

执行ch-mount.sh脚本 指定参数-m,挂载成功如下:

sudo ./ch-mount.sh -m ./

$ R3 m3 C) K" T: x% ~( N/ N- y" {

5. 安装软件

前面我们挂载了文件系统,已将文件系统挂载到了QEMU模拟器,接下来就可以安装我们所需要的软件了。

① 更新下载源:

apt update

注意:更新下载源可能会报错,这里需要注意一下,因为tmp文件夹权限不够,chmod为其赋予权限。

如下:

chmod 777 /tmp

② 安装软件:

至此,便可以安装所需软件了,在这里用apt-get安装自己所需软件,根据所需安装。我们这里来安装一个minicom串口测试工具。如下:

2 ~* a* c. Y1 o' u


. `+ D" y4 p2 g8 z- O1 b3 |

③ 安装完成后,exit退出QEMU。

④ 执行ch-mount.sh脚本卸载文件系统,指定参数-u,卸载成功后打印如下:

3 n7 a* b" ^( F0 u

) Q, w5 Y1 A7 D( H

. U) Y0 F  n  B. C4 l

注意:我们exit退出后,只是退出了QEMU模拟器,并没有卸载文件系统,一定要执行脚本卸载文件系统。

' m8 Y: g6 L- D( I* p& P& V

6. 打包文件系统

① 完成前面的步骤后,用tar命令将当前文件夹下所有文件压缩,命名为OKT507-linux-ubuntu.tar.gz。如下:

sudo tar -cvzf OKT507-linux-ubuntu.tar.gz ./*

4 q8 |5 f: Q, W8 ^2 Y/ |, l

② 压缩完成后,为文件系统压缩包OKT507-linux-ubuntu.tar.gz赋予权限,如下:

sudo chmod a+w OKT507-linux-ubuntu.tar.gz


, V8 I" @% _( R; q! u1 }. K


# P; ]. ^  Z: h' M
; M! Q6 w: @: N; z: s! W8 Q

③ 将刚打包好的压缩包替换到上一级目录下的旧的文件系统压缩包。


" }  Q: V$ I2 j( Q3 h' N4 N( y


( y6 P2 p# V. R* t. U" l3 V- _" H2 u  b" ~$ m1 T4 P

④ 重新编译打包后生成新的镜像烧录开发板。


2 H) C1 j6 a: k$ z) j5 H& g: Z0 n9 K! s; z0 V: e
, d) ~8 R' V4 m) b  l3 x

7. 测试方法

烧录到板子后,在终端启动minicom,验证下是否安装上。如下:

/ q! h1 W4 X6 J* G! W

6 K; R2 {+ Q+ x' v- o/ l1 Y

从上图红框可以看出,通过终端命令启动了minicom,说明我们在QEMU中安装成功了,至此Ubuntu文件系统定制就做完了。

/ K3 Y2 ^6 {; J1 l& E& n  M+ N- Q; ^

通过这种方法可以个性化的定制属于自己文件系统,安装自己所需软件,也可以根据自己需求将出厂不需要的软件用相同的方式卸载掉,这样既能减少工作量,又利于批量化生产。


: k' T  W6 U& \4 j
  • TA的每日心情
    开心
    2022-1-24 15:10
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2022-12-16 09:52 | 只看该作者
    这种开发板用教程,基本上就可以配置完成,Linux在学校实训的时候用过感觉不错
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-11-23 14:56 , Processed in 0.171875 second(s), 23 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表