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

+ p5 p7 V' \( P4 {. R
1 L( |/ C3 w5 b" K# x6 K


! x, e. q' J. y3 X$ I

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

% Y  v& ~' i$ ]( k& {

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


, k( l' x6 N  M, u! P

1. 解压文件系统

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

OKT507-desktop-release/ubuntu

" T+ w' s6 w, p! v: y) P

; G( n' {! t5 F8 a" s) w' W

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

$ A3 y0 q0 z% P: S1 ^, d

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

# S8 a/ H$ V& C* R5 r7 i" P

3. 修改配置

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

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


1 A8 ^* f* ]0 P6 `& }# G) n1 u& `* G


& v3 s/ F( a. U$ N/ b; C7 C; H, O

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

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

7 L/ ]& Y8 l& g8 X5 \


. l# L- j" j* W0 R# M( T
; v0 q: r0 v7 ~7 D/ o6 n% V$ F

③ 修改下载源:

sudo vim etc/apt/sources.list


/ s/ x1 p- j$ B7 Z! W$ x

添加

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


1 O- V9 `* N0 A) L

; H! v) V0 L5 o. i* n
2 g2 Y9 G5 d8 D) c$ U! z

+ h6 u8 e' j8 B+ e& q

4. 挂载文件系统

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

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

  • & K0 A. S/ W0 C1 Q

    + N% |7 I, d6 T" i( n
  • / S5 z) i% m, L. G" i; p

    ; S0 ~$ o  e5 X; L' m" F2 V& U
    # i: I& t+ @, Q

      \3 S6 M- \+ t" @7 y. _2 j
  • + s5 ~# V; g/ v3 Y' ^: z8 o; Q

    8 |: T  ^3 ?( L6 z5 D#!/bin/bash$ ~  x" l+ |4 J2 `6 d

    + o1 D4 U* B; O9 L% J4 ~6 t8 w7 n1 Z
  • 3 J, O5 _3 f4 v. H7 K7 N; ^

    9 f) p& A) }" q" S6 ifunction mnt() {
    4 B3 y) i: T, e( I6 g

    / x4 `- L+ p% \6 [6 U

  • + Y4 K+ L: ^" }" p4 `$ T

    4 _$ F. f$ z) N  N6 o, f6 v' C* ~echo "MOUNTING"
    6 S: O. h7 L$ N, a1 \
    ) J9 ~# t) e9 s3 W& w+ N# S, n

  • : z# A. S. I5 l/ b4 p0 n
    ! d7 I( ~, w; f+ o9 f, T* o0 o
    sudo mount -t proc /proc ${2}proc5 h1 K' A0 z9 N' @/ u" f% S& ]
    " K( d) Z! m$ l8 A5 |

  • . b3 F# ~. D1 j& R3 d  K' y7 s+ m
    + {: n( Y% q0 U0 F
    sudo mount -t sysfs /sys ${2}sys% N7 d8 d0 _4 K
    0 A% ~7 }+ [1 r( J5 d, V
  • - e5 Q1 |7 M' G1 I; T7 q

    3 k8 O' ?: }. B. @sudo mount -o bind /dev ${2}dev: n6 K. Y1 [1 `2 G
    0 W  r7 ]. A& e0 `, k: C$ T( R# u6 m
  • ; \+ _3 }! o4 l/ U  U
    $ Q7 Y! U4 W1 {$ e
    sudo chroot ${2}
    * S8 D9 I' X* J
    & v/ `4 N( A# p5 B. ?6 a

  • ) L1 N* F" T. {( o% \7 ]6 |9 T" I

    . a0 F+ o' _% B. w  T; }0 z/ C}
    7 o& b6 q" s1 W

    $ [4 R* ^4 f$ a! {

  • 5 S2 d0 N" S# @, a& a
    1 {; r# X3 n; N% R; f/ i' Q# _% L9 ]
    function umnt() {
    1 {/ u/ Z5 Q2 J* W; w
      C2 f; X4 [7 ?7 g. D# ^# @7 c

  • ( ]9 Y# U/ q. S3 {) b& n% k
    ) ]$ x+ [  w/ b7 ^$ P( @
    echo "UNMOUNTING"
    $ {" Z# I4 V" X' X( z

    , K% ]. [. B: Y# ~( }

  • / K& x# f7 N5 u' x
    " ~6 Y$ Y1 \6 i
    sudo umount ${2}proc
    $ D7 f+ u. \/ V" [3 s
    5 G2 _" }7 x# i5 z0 f

  • $ W( ?4 Z- |' t3 ~
    7 N- X( t* K( p# F! S( o
    sudo umount ${2}sys
    0 B' y$ Z: ]1 ^

    ( F7 j0 j- \0 j# G2 j% A. E* `+ z
  • $ Q- A- r* t" a: x

    & ^, B5 G$ I. q4 n, ^sudo umount ${2}dev) q" O3 A9 t5 Y' f1 l

    $ p0 p- Y- c# A+ ]! ?
  • ; u1 M+ Z6 V* {3 z, _

    ; N+ o7 t* L, Y& f2 m" h: g. R2 M}4 k0 }$ A5 q+ f: ^

    8 d# v. B0 q- @) \- f

  •   p+ {9 p. M% I& d( o2 b
    ; e5 S( f  Z4 f9 p
    if [ "$1" == "-m" ] && [ -n "$2"4 g( j# z( ?" ~2 A3 {! ]

    # H( C1 k, M1 M' E
  • 3 `' R4 G) K/ q/ u6 @' g9 Q

    6 P( l( b3 N7 z8 o* f  n. }] ;: }6 l3 s5 H% y/ {* C. y

    % \& o2 \. H! [' F; I

  • * ^; m4 u) _0 S9 Y* g: g) J. I

    4 l0 u% x, ?+ B4 g! y$ D# H6 u" e+ Y+ c* Y0 o# S
    # N6 K) _- @5 d% g5 x5 C
  • - S+ }, M- C, b" X
    4 o$ i4 b, O4 k
    then  {4 D0 B( z  b# l" M: A
    + f% j( F1 B6 ^; y+ ?
  • 9 g1 P8 k, W0 `( w  V, u* d2 S& R* t
    ! K4 D8 ^6 I) q3 u) X) U$ W( V0 H
    mnt $1 $2
    " A  _) V1 t" t- S( G+ `8 o6 w
    : J: ^9 ^! }  O' C9 l2 H2 f- [
  • . ~9 C! p. f' v- B
    . `  {/ ^9 W; c
    elif [ "$1" == "-u" ] && [ -n "$2"
    : k. c- N5 \: t" K4 [, _. b  u
    7 ?/ j7 H- g# k% E

  • # C* Y: n, t$ u) k) B/ y
    & q9 O4 E" W5 J) U. Y0 U
    ];) L' H' Z/ f3 b. |
    2 G3 A, Q% @2 {( x' |4 a( Q1 j
  • " O3 A5 L6 M2 V4 D3 j9 ]; T
    6 b4 I& ^' N1 a; H; X
    then/ c& |. K+ i) w' P
    ) T5 Q0 B5 z4 X2 x
  • % n+ L- |4 ~9 `1 m) d  E

    0 ]# q# Q9 q. P7 Qumnt $1 $20 H. Z2 Z" |) a+ ^* C( j& o
    ( W- s/ D7 q4 d& t8 T

  • 9 J  J5 M* c0 @6 D% q
    ! m3 d$ k3 {# U2 y; |: ]6 q3 h
    else! m3 g! b/ b) P7 h$ L* A2 M

    / c1 X" w$ ?( R6 r3 s3 T$ v/ Y( P

  • * c3 O: Z; D2 X

    " f. @8 Z/ ^3 h0 V' eecho ""
    # D4 |$ L7 F. j6 n9 M3 e$ H: j) D

    # |/ T, c, f6 e, x- F

  • - V: W/ I# o' e" o

    8 u: o( u& ^2 Q' b/ ]4 o4 o4 @echo "Either 1'st, 2'nd or both parameters were missing"
    1 S/ Z: v, S4 }2 o. N- }/ K/ d
    7 E5 E) b6 U% U/ b. P/ G
  • & e0 S, z) |) [  C3 ]% ]2 ]

    4 V5 S3 x* Z. h/ ^" becho ""
      o9 k% X3 o( t* A, l( C- Q

    % i$ h% w1 x# i: W8 `# {; n. M6 F6 j

  • 3 B. M6 |7 i3 D$ \0 z

    $ f: r8 C  P% e9 f* ?echo "1'st parameter can be one of these: -m(mount) OR
    + X6 [9 |( W6 Y5 s
      w7 o: q; o- N4 g
  •   i. y9 h, A8 f, B
    ! S& b" [- a) d' K! B. d
    -u(umount)"7 y$ u, v. j9 I2 T! Z, y. W

    3 g* _5 k: }+ n

  • 3 e1 s  V* F( O0 E; E4 H* m

    & n& Z% z: B/ M, becho "2'nd parameter is the full path of rootfs' g4 W8 M) z! Q! b3 d

    . L' P( i/ I: O: p

  • 7 U4 ^. {8 H' @0 F5 h0 w
    - b. K2 L7 t/ c1 ^9 S
    directory(with trailing '/')"
    % I, x+ |, D. b" q3 t! x
    : D) s- F$ M. t3 `, p  L

  • # G' d9 L7 `/ f* b8 d, [6 u9 Q
    0 ~! j# v8 B( \  T* i" p
    echo ""# B% }! O9 @1 z. j7 ]" O

    2 T7 H7 N' t* T% F2 D' F

  • 1 S# y, D' w2 V4 i4 q. {: O1 a- p0 E

    ) D9 J$ K3 H4 i* I( c7 ^echo "For example: ch-mount -m /media/sdcard/"
    3 C6 @3 e! O- G  B3 B' X; C1 |) `% N
    ) X+ r5 r' x9 C: m6 b( c: R

  • 0 N6 i0 q+ n2 A9 B: F

    2 S- w% V; y  V+ uecho ""# _1 V0 i$ n9 e  m/ z: z7 V
    " {* d0 X# C( V

  • & C8 W* o% F* f
      W  @- v& K, r3 D7 f" G
    echo 1st parameter : ${1}0 v" b5 K: r4 l  e+ h) l

    7 Y2 e/ n. e! i

  • ' ?' l0 F1 m4 y" d( \
      ?. M! f& e2 J* O- v. T; W
    echo 2nd parameter : ${2}
    : m9 r' k) T; S( b9 V: Z/ j
    - a2 w% J& w1 V5 P  y" e/ J

  • 5 c1 p9 }5 |- M  k% ?4 l
    9 k+ P% Z5 l* K& Y( R3 s' m
    fi2 G/ ]4 ]7 @$ c+ [' X5 X/ {( f

    # {( T: z/ Q& Y! m1 x' V- Y; c: y5 [; K

1 {7 J# p3 H+ a9 [6 V( h$ F5 _* q% Q) ^# y7 H) o+ K( z
3 x- d% H5 L2 H. C4 w8 L( Z

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

sudo chmod 777 ch-mount.sh

③ 挂载文件系统:

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

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


0 h& D" m/ G6 {; m( ~5 w9 q; e

5. 安装软件

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

① 更新下载源:

apt update

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

如下:

chmod 777 /tmp

② 安装软件:

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

- m6 r6 T1 L1 L- y( U0 c8 Y


$ y6 ^  V0 O1 O* ^1 d- c4 y

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

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


4 J2 S; G  q% P) U) i

/ n/ ?8 y/ r! I+ ~5 X  n, y
+ _3 B0 ?1 g2 C  |

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

$ G& A4 I2 x3 k

6. 打包文件系统

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

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

% k0 c. d9 q. a' l$ g

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

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


  ^% _9 F5 S; L3 l

. {2 f' x- i' h  {$ y! Y# a
& l. o+ K+ u/ k5 {+ ]" d

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

- K2 e. k; z" }7 l. @8 F; d. ?

+ F. `4 o! `) F

; X7 [. j4 W9 q  ]5 t1 d; C

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


1 P# I$ X! m& d* U- {" ~, I! y  t% b# A: Z! n
6 ]( P4 Z& F+ m

7. 测试方法

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

. C7 r- a8 H" H7 {9 Y( c

& x9 B" u. J0 }- v! ?3 }

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


% n: o, W$ x; M

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


- v  \! d' B4 p9 e
  • 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-7-28 20:36 , Processed in 0.140625 second(s), 24 queries , Gzip On.

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

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

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