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

* v6 M1 V' r: O* D: x( y8 Q& L7 Q
6 Z7 @* D. W# [) r$ e6 q) ~. w


; P6 f; d0 Y! d

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


; n0 o4 q/ B8 X1 I/ f; J0 v5 K% z

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


' I' P- K/ c. I7 x! J, Q  _

1. 解压文件系统

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

OKT507-desktop-release/ubuntu


9 m3 _+ z7 u7 h/ f

% k4 n0 O/ ~  F

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

# c  x- c, ]6 F  F6 r9 [& X

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

- k2 Y3 l4 i* e' \5 |% m7 e4 N

3. 修改配置

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

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

* ~4 f5 i! `' x4 K& E0 h5 A
! _1 E) |) P3 |9 z" m3 K6 w+ u

( Y7 W4 G5 I2 o1 I. {% ?7 A

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

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

$ ?# J- W* ~# ?  k9 N; S4 i


* N7 J1 p: I; s! ^, X+ r' J- g# Z0 w9 A1 {& r5 }

③ 修改下载源:

sudo vim etc/apt/sources.list


" I: i7 F* S! @

添加

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


% C' o  q* H0 V1 d

8 q) j& C2 {( z5 o# O
3 N$ S9 F  Q/ c# Q" E* E$ ]

5 D$ _! q) ~6 s; H5 G  L

4. 挂载文件系统

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

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

  • ; h' i& |$ L3 [6 A* M

    $ u0 s4 I7 [8 @/ k7 c; B% ?4 b+ {

  • ' ?& Q2 K/ A! ^1 H  m% L+ u

    + w0 X5 R, h7 `8 y, l) A. Y, [" Y5 E5 D6 ^* k0 _

    6 {8 D7 v$ Z: n8 e4 ?1 P- x, V
  • 2 `" o7 m4 h' E2 j+ t  B1 Q" N; ~

    2 d0 ~: E2 H4 d" j  E#!/bin/bash
    ! X- T2 v' w) a( D
    ( ]$ ~( F* k) |5 |

  • 8 G. k. j1 }  H' Q' x* `4 x7 d

    6 Z5 r( i% u# S- X3 j/ t# W, Ffunction mnt() {
    3 I$ f+ F! ^0 R' Z# l5 B
    6 }# Y  V4 V1 y' l0 S) o
  • 8 x, m6 p/ n! c. N9 \" ?8 k. f6 _

    & o( S' o! J" u& \echo "MOUNTING"& h2 u8 U( Z% O- z) X& N' O

    4 _  d! u' f8 t

  • ! I# n5 }, L& T' p
    4 ^8 O% o0 a4 y& d
    sudo mount -t proc /proc ${2}proc9 \4 u4 a2 y, I. L! Q5 ^, M
    # u" n3 G% D* s

  • " {% i( p  Y) P2 R3 u! F+ A

    - @3 j: P% v) Lsudo mount -t sysfs /sys ${2}sys
    + u5 z$ M) `4 v& L' B, r, k
    + p! ?. T0 z! |5 I( O

  • # T5 J0 |  A% o" x% Z5 N' ?
    3 x# f# s6 h$ D. i0 |5 w4 k
    sudo mount -o bind /dev ${2}dev
    " P( H" E. S0 ]4 [4 P/ `7 s
    0 g& a, r- e5 z4 Z

  • ' m" M5 ^2 m8 w
    ; W+ y/ H4 _  D. A" ~: U1 X
    sudo chroot ${2}8 u2 U( L- |+ J4 r, I! x3 F

    4 b( t$ z3 Q0 K4 l) i3 c) K
  • $ x3 o. j/ }, s& k3 J
    8 H' t! F, t: ?) ^
    }% z, M5 n, G4 q

    ! v- A9 E( s6 A, _: u/ X) E
  • 1 `7 K9 W6 {: ?' r5 ^6 z' K  T( i+ ~
    # Y/ ]) V! ~8 G. M
    function umnt() {
    0 e8 I7 `0 x* L1 o7 X( [! o# Z

    $ I: M* v. s' c; X8 T; s- t
  • 0 z: }$ L4 a! F& \. o4 J

    ( L5 R7 G- ]2 \7 `. Jecho "UNMOUNTING"
    9 i; d* G8 v; G" U! l9 {) \9 n

    : o& k9 J! ^, U
  • ; t( }1 \( k3 A9 _  {3 o( q& n

    : |6 V% ~: u# m6 Fsudo umount ${2}proc
    9 r+ Y2 }2 ]3 q6 \' V
    : T  O8 k5 ^3 Q5 y" B
  • - a3 Q) E8 @9 t0 V

    ! C  C, F, o  O2 Z' L5 ysudo umount ${2}sys
    6 Q, {3 k* ~9 A$ w/ y
    ; h4 O5 Y- w- o$ f; E
  • % t+ ^4 u& a# ~& _& v8 F

    - C; B- y, @8 e* i" h, l6 Ysudo umount ${2}dev( r; E3 N, a- J7 f

    * \& Y- `# W* J1 |
  • 9 U8 a* E5 r# |; m: @+ y

    9 a6 A8 D2 I$ h* a8 S# P2 h}
    6 x' a: `! ^8 C6 l( t6 ?

    : t* k& U4 S5 C; s4 h; U  n

  • , z: I# y( a" _+ R2 J+ w8 q

    9 O/ V1 I# v: a* y+ `if [ "$1" == "-m" ] && [ -n "$2"# y7 Y+ O  @- U) @: l  J

    * ~5 ]9 g1 t) A/ C, N* i0 Y
  • + t0 D' r3 J; x

    # P2 b& z7 Q% B8 P3 M] ;6 M" F* T1 ?" ^8 s, A  N* O
    . ]' o' q6 x/ |+ y# ~

  • ! c1 d  m  ~7 V* e& w! j1 c

    : C* B4 E$ x" ]$ g* a, O8 o( ]1 m# o' Z2 {

    & S: D9 I0 B3 K' ?
  • 0 E2 \$ S8 P! b

    , y" G" \6 r! h4 I9 Ethen
    3 y6 j0 Y% T: J4 F) n! b

    # E4 z1 c3 g. y/ k2 ~) I

  • 3 r, U  F; P# B/ f! ]' A7 }

    ) U; O# A5 b( t# X1 ]* ?6 i$ Pmnt $1 $2
    + u. n! q- q3 R6 w0 I3 j7 X
    ) {9 f) g2 ^* b

  • $ [, B# J3 e* |8 C) w! z; ]

    " L0 F7 Q& S* ^# m5 G. o! xelif [ "$1" == "-u" ] && [ -n "$2"
    * m* K8 l; W" }0 F4 b0 I

    " O$ N- R8 I. t- Z! f
  • % |9 f  q4 H8 s* Y/ t
    6 ]! w- X, W1 a9 E
    ];* u3 A( L! l" C, B. }

    3 ]  ~5 z" v$ @( C: u9 L

  • 0 Q8 }# @+ L5 ?4 `. F! A4 M$ t
    " {4 P' \6 R" Y' n
    then! v1 U7 l$ H. s. B0 F# |8 G  Y' @
    ! e% P8 j1 T* u' u" C5 C8 x
  • + U9 y3 e! x5 X

    3 H5 L# L! j- V$ Y* T* z- G+ vumnt $1 $2
    : L& W' D7 |3 m+ a# z9 V, {
    4 |6 Y' e3 A' v) v# t
  • 3 N/ h4 h8 I# G/ f$ n

    2 |) p' f5 L  [# j9 Telse
    / Q, A: ?2 |1 b2 V
    4 v4 b' w5 L: ~
  • * L7 @* B, M( e" y  s, ?
    4 N1 Z* t- M: `4 W  p  A3 u  x
    echo ""
    3 Q0 w  [1 p, }0 f7 B, `# @
    ' q/ T0 {! t* s% G1 c

  • ( o. C2 Z+ ]/ i/ ^5 [. @

    9 g  C' `' H7 n3 L) }echo "Either 1'st, 2'nd or both parameters were missing"
    ' Q$ e8 p6 g$ c2 b+ ]5 w

    ' j6 g5 j/ M7 M' B6 }4 g
  • ) N( R5 k5 Q% x

    / L8 s) T" L- k1 C' W. p1 S9 Yecho ""' B" t3 E* b( P) r" z' b" r% P: A$ n

    * U; h/ h. j0 |5 Z3 j
  • ! P6 f- J+ c+ w$ L& L; M
    & T, y: }/ ^* d: ?
    echo "1'st parameter can be one of these: -m(mount) OR
    : M8 v( x# [; h$ K  `: A( a. m
    6 G: `8 N& p0 j/ B

  • " }+ Y, \# E" N6 \: |7 s+ k0 s+ d

    ) b* P4 M' e4 B6 L& H1 e-u(umount)"' y( P8 O1 C, Y9 Z* \7 h5 P

    " b8 c+ p5 d: S$ L1 v: m
  • ; u. {% n6 M+ u2 q# H$ _

    . [: m1 b( U- u0 D8 j  t! Zecho "2'nd parameter is the full path of rootfs
    ) I1 [3 Z9 Y' v

    # q, \0 u4 V  C% e/ s
  • & f  }. ?# o: M# u4 }

    8 b, j/ C& U7 O" h0 Wdirectory(with trailing '/')"
    $ X- I, }' A% c. b/ i& V

    , j- t7 L& [  Z. g, B- X! A$ d

  • 0 c) X" c1 O. A  t0 }- `# D. S6 t
    + R# t: |  ~' W' l! V
    echo ""
    0 h$ V/ z# j, t. @, ]

    % h6 t! h0 Q: X( c5 ]- H7 H8 b9 S

  • % u: h; ]3 z8 T1 G0 t

    8 u! E9 |0 T3 k' k4 y8 kecho "For example: ch-mount -m /media/sdcard/") ~0 F- ~: R/ m, f3 R3 P

    ( m1 e, h" i8 Z% n
  • : Y4 H: P& _0 D/ b

    1 f  f4 Y, b# A# Pecho ""
    ' t8 d+ F! ^5 y) L5 u) _+ v
    4 b  o1 s2 _( n

  • ) S2 X% I" ]4 C: E
    ) ~- S- S7 M" J' N4 M
    echo 1st parameter : ${1}
    3 t2 z0 W/ N8 n

    ' O# x- ?4 P6 t8 L( N6 p

  • 0 ~# f. Z& _+ V

    # m4 m' ]1 y+ W) {+ \; ?& [echo 2nd parameter : ${2}4 c. u. t8 Y: Z, E1 f( t2 c

    : M! a/ Z+ ]6 I. I/ e; a" p
  • 6 M0 g/ ^! `+ ~9 r1 s

    + j3 A* }. S4 H/ ^" a, mfi
    ( t! [7 V6 S. Q' A
    # c0 h! c) R' q" j5 K0 K% \& ]
    8 x" b* l8 O8 y! T- j. g$ J/ \

9 Z3 U( x; k2 e% g
: H- l8 P: r! a0 g9 H
* ?, ?+ E# v" D6 a

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

sudo chmod 777 ch-mount.sh

③ 挂载文件系统:

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

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


  ?; m- n- p* T

5. 安装软件

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

① 更新下载源:

apt update

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

如下:

chmod 777 /tmp

② 安装软件:

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


# }+ `) v  X% X- ~: k, ]6 R" {9 _

  y, A7 g, L; u* O

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

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


1 w' N0 W0 w3 U! l5 B1 L( }

5 t- S+ M5 e( `2 g1 {
+ o8 V( _- j. Z8 e7 h7 T# I7 v( B2 ^/ S

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


* E  Z8 O5 Q9 E9 W% `" o+ s: w

6. 打包文件系统

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

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


) `7 s1 S' E6 J1 X2 J+ j5 f

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

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


( y: @7 W4 H4 Y; O9 ^* z) l

4 S3 A" [% u3 x3 B+ n; O; D

: S3 O) L8 G3 I/ ], T" }

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


( m, W5 S% u8 ^' Y* Y* |

1 F4 r' ~/ C8 @/ @
* y: O2 B7 K$ F9 A7 ?* T. {

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


6 n7 J* g/ d' F  v+ a
8 j; o5 V, m0 V: _( L  ^' a7 e9 l6 [! c

7. 测试方法

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


& r5 g5 g% I8 @


) W6 R- A. ~6 ]: {; g

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

# P! _$ R' ]/ j- c

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

  n2 c7 m# o: y8 N2 S0 N7 X" ]+ n
  • 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-9-11 08:15 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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