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


5 f% D8 |( C: R0 y
& q/ C! u- \0 R  j0 S


4 w! G) Q$ D: z; B& g

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

( I# O: N8 B+ @. R. @

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

9 q" Y1 h/ x/ c3 n7 C, D5 m

1. 解压文件系统

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

OKT507-desktop-release/ubuntu


, u2 p" N4 N/ `3 l! v8 W


* Z6 n9 Y& B7 P& z& @2 p* [& N) I

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

! @7 D# q- V8 G" B  Z

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


5 ?7 K9 b- a. h, Z0 t) X

3. 修改配置

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

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

! O2 ?# H) h" _+ l3 f" C  b( n
# x' d; C: D1 v  Q% N

1 D8 u3 q+ F& f% R# h

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

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

2 z; A+ x4 `8 t1 `* I0 f' n

! s# j- f" H5 _1 u

; l) Q5 m, [7 Y- K7 b6 B: N, C

③ 修改下载源:

sudo vim etc/apt/sources.list

) `1 d2 L; v, s! H9 E; X

添加

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

" w* A5 b* ~. p4 ]' V


1 s5 J, W! X7 h% W/ }
% Y" Y& K! K$ x( X0 S" G( G
8 ~# T% V, k: L! j$ u( U

4. 挂载文件系统

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

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


  • - A% S( e7 a8 s" l8 o4 F5 h% \2 O! n, u& ]  I

  • 0 g$ \3 r% |! b( {3 @

    " k/ a8 U/ l& a  @8 u* [- ^2 a! M; a7 m' `7 K! i; N" ?/ f7 b4 ?

    8 G/ V5 P# ~& K' w2 h, m4 M

  • ) T" R$ S  S/ K% R

    / l1 [$ j1 Y! I: m0 h#!/bin/bash! C2 X% N$ ~! T# _0 c

    3 [- ]- c9 K, v. V

  • 9 S* s' C$ }9 B& ]5 e, b# `4 V

    & c5 m' k' x: R( Zfunction mnt() {+ {4 l. _, A8 {2 l8 Z- n$ m
    4 a% R+ {) ]& t- T

  • , _8 r- q9 S( Q0 j$ z# ]
    5 h$ m8 H' A6 e% c6 M* o" O. A" v
    echo "MOUNTING"4 C% |1 }  r9 n5 G; u0 n
    6 K. ]" z: J" S0 N( z3 ~

  • / B0 I( V, i" {& ]# g

    ; A% W; p) U9 T; w6 V) nsudo mount -t proc /proc ${2}proc
    $ C* J; g, F  P8 h9 \  ?7 w: }

    2 ]; @  w" J9 W5 u4 O3 U% `# }

  •   p& @. N4 I) X  l! i

    / {- r6 n. H' ?) P3 Q$ Tsudo mount -t sysfs /sys ${2}sys  H0 ^5 L6 D3 f3 E. h4 d" y

    % ^, E- |' @( b4 K
  • . b; P. P1 ?! f6 j" e
    / Z4 l6 J; c  E4 A& G, m
    sudo mount -o bind /dev ${2}dev
    , Z, X, _: b) `: k+ q& x
    ! B  f# q' B' c6 R1 V; Q

  • ) a8 r5 m* R$ ]6 {' Y
    9 a& r0 @. H+ V% W( \: a
    sudo chroot ${2}
    . ^) p. o9 R/ N( P, H

    & _: v2 Z: p5 S, o  i2 D  @3 r. l
  • - D3 t( c6 D/ t  N  t$ A

    2 L9 q$ M6 B2 P% ]}
    3 u8 v" D. ]# M8 H: d, ?

    ; W- i( c3 }( m) Z+ P6 i

  • 7 C% Q% H$ j) p
    # h' t0 r) _4 L, V) i
    function umnt() {
    : k5 D0 J% k" h

    # W0 ?( T+ C, Z1 y- K

  • 2 Q+ Q% ]. e2 o

    ; x' V# O' @& V( pecho "UNMOUNTING"2 C7 z) F* D- ^" d

    & u4 a* M( D% m  U* Y8 l
  • 4 E5 D/ f' ?$ u

    " q6 n8 Y8 K+ e/ F6 ~sudo umount ${2}proc
    & r( w0 n6 y+ J6 J4 D  W" l
    ) L6 n: o! e" {5 n& B) i( I
  • 2 Z( s  {, i+ I3 ?( u
    - |# ^$ E7 w9 t& s0 K
    sudo umount ${2}sys
    0 Q4 }  @. W9 ^+ \0 f. r1 U# v- U
    4 R- I( G$ M1 D9 ^, h1 e7 I+ @

  • - \4 @) \, Z  B) A5 L# n

    3 z& C$ p/ S1 p1 B+ U0 H8 N1 Ksudo umount ${2}dev4 E( X- J( B( T* Q) C" |
    3 A( E8 H. C, \6 j3 G& ^2 w! f
  • + C7 L; O  M7 N; Z. Y1 g7 I8 q

    - P& v# f* a. l2 u8 s}
    1 v% N! D7 ?' T4 f% N3 R& u
    5 h& Z" `3 i7 J
  • & }0 v' G. S  c/ b

    3 N: d- I4 A3 e2 z" t5 v9 Kif [ "$1" == "-m" ] && [ -n "$2"! u: K/ [' S$ `
    ) {3 H- ~$ J' a7 C9 R3 |+ t

  • , J8 O* N9 I/ n- T
    1 t; Z3 _+ ~! m: _2 q% g
    ] ;
    ' s( V; R! A: B$ t7 w
    9 |. q) s' q: e1 [' u2 r
  • - L; q/ E- w! T! m4 ^; v( S9 S

    6 l% x9 @6 i9 |( G# w- O: E1 j4 |& \
    + d9 u8 l$ E  L! G/ ^! y! J

  • : w# o" ]/ p8 i! Q

    4 a7 f  @: g, m& Sthen9 \8 U. H6 ?+ @# O

    " O, f* u: y6 m9 g/ H
  • 8 Y4 d; h6 p4 O# Q# M7 U7 v* o$ c. x

    * S$ e: X1 z4 Emnt $1 $2' W3 |1 \% K# ?- X8 Y

    5 E: p( e. O2 S6 q5 m9 d" ], r

  • 6 C0 u5 R3 \- ^3 s& L; I6 F& R$ n6 ~
    % {# @3 s. u, t8 t9 T5 D" h( t
    elif [ "$1" == "-u" ] && [ -n "$2"
    ! ?# G2 R% s- z: K" V4 S. b

    8 }6 E* {% ]# I

  • 6 v6 s6 p% b  N

    & s9 ?' b6 {$ S% v];
    9 I& d- L; @7 M

    ( u0 M* l* z# p( G  V2 C  p

  • 2 t7 n* `) P! I3 Y, Q+ k7 J. s
    $ ^- q$ U+ n% a' v$ d$ a8 k8 {5 Y
    then5 o3 C) j) w: ?5 e
    1 Q4 U) b9 e* B

  • - G7 E4 _0 c& t& ~" \2 H0 d
    ' k" |2 x1 U% X+ f8 p
    umnt $1 $2
    * g5 z' U% I/ n4 Z- A
    ' Q7 j' y( e7 s4 ]- i! ~

  • ( Z) T- X2 e, x* g" Y& M* S+ T
    , W- B2 N3 u3 d2 y1 _
    else
    + n* o4 \8 O6 G9 A4 Z- P
    5 C3 `( o2 G% D7 e' {( y9 i% W* B" g
  • & T) a: B9 o) a! ?
    # A* t6 O7 h4 c; g: ^
    echo ""6 y0 `2 I8 x7 }" \, m
    7 |9 V# [& P: I9 F0 \, H' y) j$ P

  • 6 G8 \/ P) }* q3 S5 V: @
    " q0 X: }  h4 w
    echo "Either 1'st, 2'nd or both parameters were missing") E; D+ O% W2 g5 _8 Z" X. p
    0 y: v  J- Y8 H( \( |7 c0 I) A9 O
  • 7 ^, C+ ]  L$ M8 C
    & O0 _9 T4 c3 k+ e* G4 \
    echo ""
    * `7 ~8 m9 C1 \# D+ w, Q
    8 O+ U: _) r5 o

  • 5 |1 X- b) Y. N; y

    ( f0 e* `2 U$ v$ B$ o  `echo "1'st parameter can be one of these: -m(mount) OR" X) u0 x; q, l: K  I

    5 ], R0 m7 N" X7 ^- X6 c1 h! ]! S

  • 2 b7 T8 E6 ^+ b

    / K. W4 R( e& b. s# h-u(umount)"  \  e; c6 a% f4 C1 ~3 B. A

    6 P( q6 t0 b5 S# o

  • , _8 q+ I# F8 J- C# h. q

    + @. n' [2 x0 s. K$ f1 `/ p5 Aecho "2'nd parameter is the full path of rootfs
    5 d" \! v- ~& I% T6 k' v
    ( j! `# g/ m3 g0 ^# {. c

  • % j' _; [% O/ @; O7 O- S6 Y

    + n7 T: {+ N7 K, A8 Pdirectory(with trailing '/')"
    9 K  @" v% ?, o4 j( J: R  m6 {6 X3 W

    ( K8 e$ [* G3 A) d5 i

  • * h' a+ o8 m  w" Q  s
    6 i% O# `8 x. b  r$ @
    echo ""( t& H. ~" `5 g' ~5 k6 x, h
    + b% W+ P2 R9 u

  • ! u) G6 D1 ~6 A$ Z  P( K) z
    ) G: T! O" N! C+ V* @( h% x; _. z
    echo "For example: ch-mount -m /media/sdcard/"' a: O# E6 r# [9 B  O+ g5 T
    . o1 b; u+ g, j: ?! K
  • ' k; S* J+ P/ p8 B

    ! P* ]( X6 X  ~/ s/ gecho ""5 n; r$ h- Y' \' S2 p

    + N8 R, [, e9 m; s# Z( N4 U7 K) E

  • 7 {7 i9 S! g& _* i
    , M& c4 N5 ^" N4 w+ K0 C
    echo 1st parameter : ${1}
    ! Y: E) ]5 j2 P! ^9 f/ f

    5 ~0 R, a. W* d" Q0 D4 I3 ]$ W+ @

  • . Q, w" `& d1 r; A

    7 w8 n! ?& P6 Z& X$ vecho 2nd parameter : ${2}
    4 @8 t5 o7 O1 e2 m* U4 C
    ) g: V3 g3 K: x$ i0 h  h
  • 8 J1 p8 ]' V- p  ~
    $ k0 s9 P+ m) w8 E+ K
    fi( ?# j  r3 L9 B" q$ n9 }9 C, J
    - ]  r! Z' A1 H( V  n6 |4 f* r
    5 `8 l4 t5 f0 y$ ^. i1 h

( R+ m( J* [5 M# \) `+ z5 C
- v% D" C: c' o5 Z$ w- v* q, D1 R8 `2 ]

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

sudo chmod 777 ch-mount.sh

③ 挂载文件系统:

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

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

( f* k& k( h4 K1 X$ ^

5. 安装软件

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

① 更新下载源:

apt update

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

如下:

chmod 777 /tmp

② 安装软件:

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


# w+ n9 p. d. N) N$ S! C. m* @

% _7 a; v! C* K

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

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

- S) A4 n2 ^; t9 p" @" X6 q


4 I# E0 j0 W$ h  ]# I0 D, v% \$ d; C. L4 e$ Q& p

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


2 B7 _" i8 P  i0 g

6. 打包文件系统

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

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

' V0 H% M3 M3 j2 U/ K

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

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


  P' F& D7 w9 \9 D# y


( @. g5 M$ J. }, |. k, Q- Z, V3 J; A  l0 J0 G

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


8 J$ d0 ^; J' h9 t- F. m/ y

  W( b1 I. ~6 l: \! ~

- L4 Z) F/ I* R8 F9 _0 ^& c' D, F

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


; {/ E" [2 G* @0 O+ q
( I/ M3 }7 ~1 x$ Z/ R0 x8 M/ B8 i

7. 测试方法

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


( @3 l2 ]" B& a) G8 h/ M


; m& L. _% k) W7 z- l: f1 @( W

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


: X; q2 p3 f# `7 E9 m6 @7 @, U

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

6 s2 H; U* ^5 i! ?* q! Y
  • 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:20 , Processed in 0.156250 second(s), 23 queries , Gzip On.

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

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

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