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

9 g; @  P5 h; h: J- ]% G

4 C  [+ ~. L" D6 U/ I2 b

% [, X+ g4 L" l6 N5 Q6 w

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

( t; l: o/ E- |3 d& i$ f

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


; W" R6 i) o' H" [7 s9 Q; j

1. 解压文件系统

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

OKT507-desktop-release/ubuntu


% e$ k1 c) e+ H- D( V% U5 ~/ a


- T  x* s; Y+ S: Y; i

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

9 Z- U4 Z8 g; ~

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

$ `7 k9 Q+ t8 ~" D; U$ `* W% V

3. 修改配置

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

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

+ H, c. f4 d0 E2 q, s2 A+ ~
. P% q" [) x8 W# j1 g4 g9 X

2 r( K. O/ m1 x) p/ W; _

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

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

* e3 {) r% [! c) `9 a


1 \  u  b8 F' O( k& t  f. w6 a+ q2 C0 D7 `( y! E5 I

③ 修改下载源:

sudo vim etc/apt/sources.list


$ N7 G! Z, {$ m0 s  r8 G8 d4 R7 i

添加

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

" U& y& h- Q% i6 r

, X2 m; B/ U% T* s& |6 e
. ~9 a. w6 n- D, E- ]

- u5 o- f5 K# Q" c0 |

4. 挂载文件系统

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

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


  • * ?5 |0 X" \  J! ^0 ~) m) q
    ! _6 ^, H- u- J6 m( [

  • # Z' ], n  `" B0 R

    6 X" \5 M1 d! H4 ~1 u) C; j! T" S; X3 L* q

    ! r- U. m# U8 _' h

  • - l' N& d$ L: A5 p5 m' ^5 P3 Q! q
    - V- S, F5 H8 D3 C
    #!/bin/bash" I( h9 u/ t9 r" N: C* q. Z
    6 r$ B1 _$ M8 H- A

  • 1 \8 h% C: u% D$ F6 }, P# J
    , R! Y5 r: ?4 c
    function mnt() {8 S6 }3 [+ r% M

      u& Z( F" u9 }+ ^( K0 z
  • ! O  s: ?5 U# g/ t& Y

    7 f% r% s; S0 _0 C9 K4 kecho "MOUNTING"
    ; b  \2 C4 j! ], }- U) @8 V
      R" w3 E  {4 A% ^# W0 i$ Z/ z

  • 6 d2 u6 l6 F: C
    ) b, j4 ^8 x) a! S
    sudo mount -t proc /proc ${2}proc
    + c. ^$ o! \, x2 ~. ^6 L. T
    7 g& K& a2 f3 n- R' q6 n0 [
  • % d2 i4 p' V+ v: w
    9 d1 R2 K5 s+ L$ ~8 i0 a( L
    sudo mount -t sysfs /sys ${2}sys7 a: K( p, {, V
    + G( ?' u; a# b) Q* N

  • 2 c- C5 N+ A# l! P  p: x

    & d9 R: p/ T$ `6 Asudo mount -o bind /dev ${2}dev$ g6 H6 Z( J, ?4 Q# F- S
    / |5 K6 P8 R9 }( k* q$ K
  • ) \( I9 U- \  U. S- W
    ; s: G' u; O# R( J/ R4 ?
    sudo chroot ${2}
    4 [9 E  z3 e2 g/ h
    + b. i# ~9 b) j$ g4 l6 w* G
  • ; X; \4 X( J1 S! L# P

    9 o. D" w. m% ?; O& h}# [2 u# V; ~$ A* b4 C

    2 b/ K/ W2 [  z6 n

  • 6 B6 c+ @1 h0 ]8 X$ |! ?. ?9 @
    / q6 F. H' x! b8 k: u' W2 O7 @
    function umnt() {
    - p9 O$ y. c# V4 f6 b
    ; w: s5 A3 D' W) q( X' ]

  • ' j1 }. T( r3 f0 |# b# z

    ( p. G' V( V& A4 A3 }9 m# `! Uecho "UNMOUNTING"7 T* i. G' u7 I0 l* `6 a
      {  z7 H0 @, g
  • 1 K8 F: G+ G+ h5 @

    : K4 g. e- G- [( }" dsudo umount ${2}proc
    8 M3 g( n6 i, A1 C6 D

    1 V$ u5 f$ s2 F1 i! a6 t+ `

  • " o! H; p! t: h1 o; y$ J

    4 f6 K# `3 a% e% X4 P$ r" i/ _# S3 ]; @sudo umount ${2}sys
    5 [9 Q4 `3 E7 U6 \1 {8 J
    ( r% H: n, k/ ?( ]; _0 ~$ R# S; a
  • ' _$ y! B! X; z# |+ l0 |

    * B& F. C$ M, H# v8 {# `7 K! msudo umount ${2}dev
    & D' |  Y& O7 M$ \5 I1 ~% b
    $ d! P+ t2 Q/ c, y) Z- O0 ^: _
  • # d4 C3 [. s$ V$ ~5 ?& }) O
    + k( e% q1 @1 |
    }4 \. ~2 }8 _( s8 l8 @5 T# H) k" F

    1 T: n9 T1 _8 f# N+ @# Z

  • 6 h( o) m; v* u: u' ~4 M
    & E9 A8 a$ @; j. G1 W8 ~2 `
    if [ "$1" == "-m" ] && [ -n "$2"
    ! E0 j3 D& }: m* d1 |5 C
    4 G6 k& L4 B' i/ F, a, w+ M% E3 Q

  • 3 R$ k3 i) S+ E' f8 q4 m; R. _
    , k8 o2 b' p1 m. o9 t8 T1 K. s( N
    ] ;: Z. I4 I' X5 T4 ~
    8 Y* K" D4 J/ r' ^1 k0 e
  •   R3 a  z5 N9 c  U* {
    2 O0 p+ L/ k- b) ~1 r
    / M" s! O9 \% }  j1 m& ?
    / ?9 K. u1 `/ O; f' K# A9 B

  • 8 |' Q" r' K0 K0 I% e1 w
    : V3 f: H& J0 K$ {
    then
    " I: V2 V3 a( q) E0 f9 J' N4 v

      T9 P" }: ?3 I% T! p

  • 7 p, d8 ~3 [2 x- `

    / [2 W* {' h5 W" {mnt $1 $20 \7 ?9 x9 n" R% S/ @; M  A6 k
    + A- T6 g% U$ q" n

  • 7 W! B0 ^% Q# W5 e6 z  U
    ! c  P2 _- x( A$ V' S
    elif [ "$1" == "-u" ] && [ -n "$2"
    . O" q' h( {( e  {0 z" b
    8 _8 }; }/ a1 j
  • 4 d. }+ L$ I- g" R8 C0 d+ l' \
    . R0 E, U; M% c8 ?, C
    ];
    ) ~+ G/ i4 B: N7 y) c/ @8 \1 Y3 u6 }

    # f0 X  B' P% d* W4 R" ~. t
  • ) u+ d% |4 _: Z0 b3 Z

    # s: _$ a( f" b7 v% ithen# r7 ]4 |* o* J

    ! s* D- L/ V4 q: B/ _: l3 {

  • $ m2 F$ H; J2 W+ E3 C: L: ~

    ! w- ~: W, r9 \. g2 Kumnt $1 $2. |! v3 v  E* M' [$ Q

    + j6 D# k; k, j. b8 g

  • 6 z+ x$ ^" P" `% u

    3 q5 Z- t+ ?  q& W! eelse
    7 B9 i" R$ i* z" W; \. n2 ]

    + D; @" e! K, }$ G! W

  • / D, Z% z+ o! p) Y/ g

    2 e8 J. d# C- [9 m% `9 H2 y: @echo ""/ b5 i8 i1 p; Y( l
    & `/ Y5 X- W- e# ^
  • ) A4 W3 V. U2 O+ m
    ' e2 G1 m' m8 ^" b; B; L+ Z
    echo "Either 1'st, 2'nd or both parameters were missing"  ~; u( g! i7 Z
    * V5 Y) \- f. K+ g3 Q5 S
  • , p6 w9 j0 g, R1 k5 M, I

    " Y) T1 k' s1 t& o& r, Wecho ""$ _# ~  J0 ~: a) |$ O+ O( l6 o
    , t4 R: T, _. ?4 r% Q; J; p, z

  • ! z& u1 T( ~- A

    6 ?3 ^1 ]! {# E( Vecho "1'st parameter can be one of these: -m(mount) OR
    ) y9 X* c/ D9 J* M
    " d5 c8 ^( ]2 D1 T8 Q/ m% D' L

  • , l9 ~# S5 t8 s. |, R8 y. P" A7 f- M: J

    $ U" Q3 o3 }9 G+ w! p* L0 r5 n/ s-u(umount)"& F( c6 m5 P7 J3 _
    9 ?' }: t; b/ ?) M" ?) x
  • # a' p* e% H: E5 W4 F

      [4 K/ d. q2 M  e) V1 Q2 w$ Z/ Decho "2'nd parameter is the full path of rootfs
    1 a( q& v* X4 T( v

    ) P8 s/ V6 |, t( T

  • 1 n7 _$ C' Q8 T- M4 h8 n
    * f4 l8 P& h* H& v* Z. `" G# Y
    directory(with trailing '/')"
    ' q% B& L9 [3 t* c( }

    $ y1 B2 _/ Z; {9 R  j
  • - c, E9 \4 d& M6 }, W1 d

    2 S2 W; t6 D* I! O  q! W; secho ""
    5 m4 K# X. F( T, P# C
    4 k0 t3 M0 l% p/ L" ]! d

  •   k' m$ B/ c1 V; Z

    8 R2 i- \+ i: v1 ~7 u( Cecho "For example: ch-mount -m /media/sdcard/"
    3 D* d6 u: ], b% Q

    $ T. s2 N; j9 e# ^& z: p
  • : c. ^3 C6 I- Q1 `" s

    1 G1 P$ a# a$ O% k  }- G( {echo ""
    ( ~' X! m6 x. @
      I2 T) t% f3 s! A0 X

  • 9 g/ o' U# h0 e4 n$ }

    " T+ D! h, f# }, G. secho 1st parameter : ${1}
    6 h5 Q0 G8 P6 E( C* p

    , I& L8 U/ @1 _* }5 ^

  • 6 n$ R5 H& e6 y  H

    - d7 r) }: @  }echo 2nd parameter : ${2}# O8 f' f# {9 F2 e1 f

    ' L; _0 @; H/ p- _% a& t% j- S
  • ! A% d9 J0 t# _; u' p+ }5 ?

    % V+ G, F4 ^6 C' vfi( Q$ n: x) y9 `" b  T$ Z6 p6 t# n
    5 F& s6 G' s5 K0 H
    & @: @$ b! e5 x  P& l; K
3 h* g; Q# s9 j
! |6 L/ x  \0 W9 \2 l

8 G3 D/ L2 Y+ j$ ]: W' p4 {9 S

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

sudo chmod 777 ch-mount.sh

③ 挂载文件系统:

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

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

1 x' O) m  n  g. _  G/ K) R" Q

5. 安装软件

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

① 更新下载源:

apt update

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

如下:

chmod 777 /tmp

② 安装软件:

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

0 _) C1 d6 ~7 F' s$ n+ z# b

$ }  R  e' R% t" Y( L6 [

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

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


: k5 k  j( r& C! m) n! O$ X4 m


: n( B/ M8 K) o7 L& u' p& |# Z9 L# l. \8 R! J4 g' T

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

2 C! a7 b! c; @* i6 {; U$ a  e9 o

6. 打包文件系统

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

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


% Z* M9 D$ A/ F: a# k/ u! h# j

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

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

/ b  J! J% \1 |2 e

5 {8 d2 m( q& E* \9 S( t! D! r
* C* n6 W! d+ h6 O3 Q2 X8 K

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


. t# C& P" j1 J* c5 H


( ^2 p$ u( o4 {; L( x- k
$ u5 q8 ]% x* K# J& A3 J' b

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

9 s/ A" y5 r4 s, P0 J) T! D! k5 G

$ O4 K' w% n! d9 k
$ b+ s3 [) k' h  R+ v3 B6 Q  _

7. 测试方法

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


- L! r& D, D  g0 D* Z' i1 w, c

( F) S0 {8 V4 a8 k6 U

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


# I$ b' @7 y# M. ]* l& t; y

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


5 i# u, o3 ?+ `/ }, I# c
  • 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-20 06:34 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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