找回密码
 注册
关于网站域名变更的通知
查看: 289|回复: 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系统而言易用性更高。


+ I- a- ?. o4 h: n* C# b4 i% B: [4 K  T! V8 H

# r9 p4 o( V; Y5 z4 m

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

' w2 j$ U; }$ X$ Q2 t1 J9 R8 m

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

$ S% k  h% E& L5 }8 z# Y( V* C

1. 解压文件系统

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

OKT507-desktop-release/ubuntu


" a  F0 m$ X7 Y& g6 [( T+ p2 G

. d0 @$ ?+ P: l8 j

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

: O# j) w5 ~7 ~4 K) N/ K5 ?- A

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

% P; H0 }. a, H% W: p' o9 l: N5 f

3. 修改配置

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

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


. O, q# V0 x4 ~+ ^. i2 x# {+ M& o! y0 I1 E; O; A' N1 V


3 ]) b$ l$ f2 S6 {

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

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

1 q6 U' I4 q) s, F# M* r  ^

& Z1 u' Z$ l8 F+ m# V5 y3 y, ]

/ j. Y' j+ o  @

③ 修改下载源:

sudo vim etc/apt/sources.list

  r9 b' ^( x( L" [

添加

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

& L. |3 `9 h/ _( U; u5 A6 O

" z1 ^& A, v. r7 R* r# Z! Z
/ I/ ?- J2 ]! O8 z  N+ B8 W: I
; g0 F9 ]$ f0 s& [

4. 挂载文件系统

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

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

  •   ~2 k" L4 ~: |3 p5 S. n3 k
    4 U3 z. u# i" {2 f- r/ r. Q

  • 6 x/ T$ c0 k$ }; Y' L

    4 k; Q, \$ ]3 J! c$ [; x
    # f0 V4 a; {3 w6 E' ?: X6 T+ ^: ?

    ! a0 _3 F$ [! M9 V

  • 6 K9 `/ w* O" \
    ; \; k1 Q# o- i3 k* a: Q9 p
    #!/bin/bash0 t$ Q) F' Q9 n* M3 C2 a( a

    - J/ b. k& M1 m% v( K! I
  • 4 s: Q5 o0 C; |, i. ]) B! M
    8 Y; y; P9 a* D4 O. n
    function mnt() {
    $ Z& c* N6 c6 Z6 g/ q) w/ K# ~
    0 v3 b& n2 l. J6 t+ V" {$ ~  x( H
  • 8 D8 M* `( H/ |" M$ Z
    1 ?" P1 ]3 w+ J% v. e
    echo "MOUNTING". B# I- A# I$ y9 L0 K5 |4 W
    4 M% g  ?2 Z9 Y6 [$ c+ B
  • + N6 y6 O6 Q+ K# e

    ' _0 m6 t. \: Z8 x- ysudo mount -t proc /proc ${2}proc6 S) V# w7 J0 I8 P

    , c, p# w3 r9 k. ^0 }7 [" D
  • 8 V) X9 Q, c  B/ r* ^$ t2 o) f

    7 ?0 Q" H+ k9 H- X0 P8 n! z1 msudo mount -t sysfs /sys ${2}sys1 c! e' ~: E5 Y8 Y$ i. J0 G

    ' a0 {( z6 c5 i+ P4 e8 k
  • . s- e( N0 Q: ?9 f( M3 E& @

    , v0 K! y1 N+ A0 Y" Ksudo mount -o bind /dev ${2}dev
    2 Q% j- \) S$ y! z
    4 S8 H9 A7 w7 t$ i4 Q5 V# h2 V: G
  • 6 Z$ }2 D' [/ l) n6 @6 t( y( U
    : [! R- I8 Q# |8 c
    sudo chroot ${2}9 w+ v6 L# y% \# t

    ' h9 \& ^6 K1 T. E; o3 K' n% ]
  • 8 D" c) T' Q! t' K

    1 Q6 I# t+ s, u' V) |: B}
    3 q1 [( w8 Y4 u, G. @

    / F% m: n( l% [* y! Q

  • 5 L/ B) ~1 L) B( z) k7 y

    6 W3 N- ?' Q4 e/ Lfunction umnt() {4 }3 Q* |9 w2 i5 ?& p
    / ]$ S! g. \5 @6 f) f

  • 9 j1 N6 K* [6 l

    7 N4 ^6 e# o5 Y, H" c& Becho "UNMOUNTING"
    3 E& D1 N* ~3 |" P, s( X

    : d$ {. |2 {! x" l
  • 4 V; @, b' M9 t
    - b0 _& m' i4 ^2 n& }# _$ ~
    sudo umount ${2}proc
    . Z: P# H6 P- @5 n
    1 F! Q7 K3 K3 ]9 q8 @
  •   d# u  P% z, i8 `

    4 {! X- U& r4 j% x0 `( k/ r) @) esudo umount ${2}sys- r6 o% R6 {, V3 q4 @# c# D
    2 z$ y3 C5 g* l( n7 Q' C

  • 5 v" p, w6 E; Y' H+ e) Y0 H/ w" @

    5 l3 Z4 v; G3 R5 m( a& l% ysudo umount ${2}dev) h5 F+ A0 @/ d( H5 Q/ w( D9 `7 b1 U

    * P6 z$ P; D; e  I- q

  • 8 Z9 O+ w4 ~  Y
    + R+ C% S# G) x" M, M- j# e
    }
    2 k  l' H0 K& B) M) ~, P: ?

    3 b$ K9 i  k2 V; C/ m% U+ y* I
  • . R( G3 U6 i3 I) b# [  C# i

    # O; [7 v$ z9 n2 iif [ "$1" == "-m" ] && [ -n "$2"
    7 Q0 r% q! o. z, z1 J6 w; Z
    . f# e1 f3 A% C5 ?# s4 D$ r0 m
  • 5 }# T; t2 k' q6 u; T  P: L
    7 c$ n+ T4 i9 U/ v, Z; w
    ] ;8 I  W5 A" r3 q: ?# A- i
    0 J0 N2 l! @: G

  • 4 o) Q1 T! `# Y/ j6 j
    0 L2 d9 b% |% q. N; z# `
    # K7 m* B$ ~' _( I  x% _+ k% t, `
    % W4 p+ b8 v/ a$ }* N5 }# m

  • 5 h- O. j. F! D/ g* u/ t
    7 R3 g7 ~! z# V0 P* z; _0 _' r( @7 ?
    then/ e# X: K: T4 P5 ?& P, L
      S' A0 u$ S, f5 E
  • ; J  N- L# `, q( X3 ^! @
    6 _: D5 A- A1 q* x
    mnt $1 $2  i. c) ?3 a" m/ R
    % M0 `" L1 x( z

  • & Y4 j( o( x8 P2 N

    * B1 R) h( ^$ i1 V4 }elif [ "$1" == "-u" ] && [ -n "$2"& I5 A/ g$ m# `
    / _8 F/ e  J; h- k. _

  • 6 E6 R  a8 [+ n) J( R! H! d

    ! v3 c) v$ F/ _6 ~6 v: H2 ~];3 P) n! n  n7 G' u$ |+ F$ ^) {

    * w; O3 I/ L$ W2 }3 ]+ ]9 d! ~* g

  • " I: c4 `. ~; |- W8 J" u
    / u, ^1 ~& `: s0 N
    then
    ; }8 L9 Y* \* ^  m) e

    6 Z3 E, X, f6 i7 P$ X3 p
  • - ?. d6 q/ D$ |0 }1 [2 i

    ' `5 T: _2 F) k8 A& b# K" vumnt $1 $28 {' ]# R! ?! f, A$ @+ E

    5 B' S( R. U) y# h3 z, T1 v

  • 1 |) U3 u0 h$ x, I1 V7 }
    1 T  A! C3 I6 w
    else/ T/ R, A* r$ v
    - J+ ?) y3 @# `$ ]+ \% \

  • ; X% H5 D4 y" |
    # M+ z2 R+ x( O2 P1 i
    echo ""
    3 C- u# v5 ?# S' O
    3 W# j; t* U: K. z5 d; F

  • 0 z$ p2 q* Y5 B# I# w, w% B0 e/ B
    + i" k3 L1 P0 r
    echo "Either 1'st, 2'nd or both parameters were missing"7 n; m: g/ K3 g6 B& v2 T4 I7 n9 Z

    . \5 K0 {3 L6 t5 i0 M

  • : e! z% g2 P& m# ]' c0 F
    ( U& r+ B: o* [5 S* F
    echo ""
    ' u  E1 v: F: Q2 o+ [) [

    % u) F, }; e2 h6 P
  • + ?) R& b. h% L' K, f0 Z  k

    , n8 C1 p6 A0 O: ~: Techo "1'st parameter can be one of these: -m(mount) OR" k* J) Q6 T% N, p8 G* `+ Q( \

      I( W- V6 {6 I7 R% U& k

  • * n: Y$ t) H* G2 t9 c

    : {  S" N) V" w) O4 Y# |$ }-u(umount)"( [1 z' i0 |* w3 f3 r

    1 D( r1 c8 e; V; B3 U' o. J% A

  • 5 v  P9 z& y1 u+ F' [

    4 _% K9 v, k( z& Lecho "2'nd parameter is the full path of rootfs
    6 I- g5 n) J' ^1 e: |

    5 `6 {3 }+ T9 a" _% ]& _; C* v
  • * h% Y1 h1 @9 l+ J9 a5 w

    . \5 l5 @: `9 p( Y. U: G/ bdirectory(with trailing '/')"' E$ R& c- A+ H
      Z! h0 T3 Z0 F! u2 N

  • / ?2 H2 H; E) h3 Z  X% M2 G% ]% y. P

    & K8 g0 b3 z5 m+ Gecho ""
    0 n! U- Z0 d" m, ~

    2 m+ H7 g" ^9 q! M' z! H* H

  • 5 F5 o; G2 M: M) l7 L  R4 i; ~# p

    3 B" J0 B# i5 j1 c0 Necho "For example: ch-mount -m /media/sdcard/"
    2 t& B. s  }8 g( x# g; S
    ; _) Z! `. H4 O  V
  • 3 ?+ ~7 W  O; \# u1 `
      r& }$ N3 b% a; x1 n* [
    echo ""
    9 I* j7 H4 g  q
    3 O: e6 T* Y5 r$ X
  • , ~) t  g5 t3 }$ v, B# e) A1 s
    ! E1 y, I0 h" C  \6 V9 H- U9 P
    echo 1st parameter : ${1}5 U9 l' v" b8 K& x" s0 ^

    9 M* T4 q4 O1 Y3 }5 T7 |7 R- i

  • # M$ C$ C/ l/ l) U. h2 h

    0 j1 i& Q, C' O7 w. e' necho 2nd parameter : ${2}
    2 {+ j2 m2 L1 Y/ p1 Y

    2 F  K' g- i+ B7 ]* ]5 b

  • * E, a' h* S3 _" u

    8 s0 _$ z; `; ?  Kfi1 [; S% l5 k  t' `0 C
    1 \7 O' ~. m+ K# O0 s# H" _

    7 U# p/ Z, m- G. u/ |, f% O

' J! k- j/ w4 z
' h% `) F9 Y& e( c6 ^8 E+ Y6 i
& j7 ^. X" D9 `: o; Q

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

sudo chmod 777 ch-mount.sh

③ 挂载文件系统:

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

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


9 ], s+ R$ H1 c4 t+ T. L

5. 安装软件

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

① 更新下载源:

apt update

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

如下:

chmod 777 /tmp

② 安装软件:

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

, S. ^6 ^% x' R. L! a# V3 e  W

6 x, {) B8 W2 |, t: g

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

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

! p3 d" v$ T" t

% [1 W$ g7 [/ \# a/ i  J" J( S2 u

3 m! j, T, D( }- J

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


8 T. u" l1 D6 {$ S! O/ D

6. 打包文件系统

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

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

6 G& N- S2 b: X! n, T# m8 p7 B

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

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

& i. g3 K" G! W

! [% @% O# G. [- i. q/ ?) c9 U
* ~, i$ I$ n+ L' G% M- Z

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


7 [1 P, M2 [! g* N- P. _

) E3 ?; s7 g# k
! C! y$ o% B' M+ @' v/ }& ?

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


/ S* L' V5 L# u: ~
2 z7 _! ~) X, D1 X5 I7 g! O
' x) C$ `2 H) T1 y9 `( X# p3 d1 F

7. 测试方法

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


3 [* J! \( y0 k% x

! m3 w; o) z2 z6 A. S

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

( K1 z3 V# C" L/ ~" j" C8 Y4 A

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


+ u7 w9 ]( N; k5 [2 }% W; R
  • 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-8-23 16:26 , Processed in 0.156250 second(s), 23 queries , Gzip On.

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

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

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