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

7 U8 o* Z% x& Q3 ^& G5 f

( G2 b& Q6 U1 M7 |! m% m6 B# k5 l% W

1 R. R/ ~& _: W" ^# v  g6 m

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


3 w  s; x, \: U1 Q

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


/ w5 f* f5 Z$ n, i4 A9 ^

1. 解压文件系统

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

OKT507-desktop-release/ubuntu

/ ]9 Z* \/ g8 X! M6 u


2 _/ i6 G; s5 r" }- l5 G

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

$ x0 m( n3 i5 u  [" }1 Z3 c/ y4 q

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


+ B- P, V: W  W: W% p4 I" }4 H8 k

3. 修改配置

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

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

: L6 g# N- i& k) c/ C
# L5 f3 T' |# p& Z9 ]" B


: ^: I) H7 P, g6 h0 @' v( G

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

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


" O; g1 n4 B% j2 O( I- g

, z" ]5 N6 L. r
& B! c$ b: _6 z+ I  @* q  Y& I

③ 修改下载源:

sudo vim etc/apt/sources.list

; G; N% w- q4 }4 K* P

添加

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

3 ^# u7 V' j$ p" L


- D" k  T* s( E4 e) G+ Y- V. \: G! K7 X7 C1 W8 X. o

/ a- E6 x5 Y: w! ]

4. 挂载文件系统

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

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


  • . f& W# t3 m3 |* N1 x% |6 p4 I! a0 M- b: c$ V$ Y5 X  Z* ]% F

  • + _2 t# T$ s9 \: m

    1 @, v0 \3 f# ]: X+ C/ M3 c6 n$ V& Q5 H* {

    8 k: B' i5 ^4 C, v8 T& ^

  • % z* p1 N% q1 P! @5 T+ T

    ) f, E, D9 L4 u& Z#!/bin/bash
    8 v6 b; ^9 M& U# X

    / G0 Y; @3 s' d% p  P4 C  J
  • ; T+ T( @0 d* K9 t
    * c$ }  A! u5 v' J4 R
    function mnt() {
    & @; R4 N/ y. O$ y) P
    ; a5 S$ ^; l7 s# E/ q

  • . d: j( A" E- n" Y

    ; L4 O8 Z  d9 l- n0 Xecho "MOUNTING"( M9 }6 y  B3 c" v

    3 f$ V3 C6 ^* M0 b2 F7 i
  • 8 R. r5 d: c% y) i3 k

    : p% e' H3 H( G; Wsudo mount -t proc /proc ${2}proc/ S1 ^5 y  \  t) L. o

      M. c1 v7 x8 \1 k0 e8 _

  • 4 r5 r7 v7 V+ ^

    1 [4 Z6 x' g# m* Rsudo mount -t sysfs /sys ${2}sys
      |) c( |) ?1 f/ k8 V

    ; ~9 ]2 ^; P8 X4 v- c. e# A
  • & [( p9 w* w2 U  p# w

      @: R! j, `0 g+ f; V; |8 Msudo mount -o bind /dev ${2}dev
    8 N% M* z/ _. o  [
    1 e# D0 m5 m% O* g, u) J1 g: l

  • & ^: [- a; F' D2 v9 h1 ^

    / T  g+ N0 G, ]& C) k2 Zsudo chroot ${2}
    : F# h: V5 Y6 s2 L' `

    . m( Q6 ~; C3 @6 C; X6 ]- _+ d
  • * a, F. ^; u" y! R5 b

    ' [0 z& ?9 Q7 }1 A6 o' w0 G, [* e}
    2 w( Q% H/ D* f7 q5 {4 |" k, ?

    - J; R9 t9 L- E; |
  • $ y% N, E( w  N& l. x" ]

    - U$ Z6 C/ @, j( _; sfunction umnt() {4 F) S/ x1 p; t- X2 d

    3 k6 B- V8 x7 Z5 y2 _: _
  • 4 x; f7 f% ~" Z. }) x
    0 G1 d' R6 m+ [5 l
    echo "UNMOUNTING"
    * N' e3 l. l2 @
    - o  ~% B$ b+ q
  • 8 k6 |0 }$ u+ _6 G
    ! j4 n5 @& c  F, O
    sudo umount ${2}proc
      E8 ]% I: @# }& I+ I
    ; E* j! [( G8 j+ I4 q

  • 6 D) ^" z1 S* u! l, v

    $ l& J- f0 F2 o( Z9 j+ a) x; Hsudo umount ${2}sys
    4 I% L$ N7 X. s$ T
    + B1 F7 s9 n- T3 G, t/ Z1 G2 L
  • 2 ]& b0 V1 z) X9 a: b: z

      S% ^$ \* x0 o& K' X: csudo umount ${2}dev
    / W0 |6 |$ X5 W. j' j$ U

    ) T) y, D& O9 c; g0 C% B

  • 2 w& ~; y2 \* \' w% ]8 b

    + ]! H7 J+ B/ ], M- M- C: k3 K3 T/ I}
    $ Q9 y% [9 ?" `0 n; m0 W
    - w" ~, m. ~7 z- C: {1 g1 b1 x1 R6 N

  • 4 ]0 o5 x- M2 N
    ' x, |: |% \6 w$ C/ @
    if [ "$1" == "-m" ] && [ -n "$2"/ I: k1 a3 o: l$ C
    & D) k7 O2 K$ t  r# |0 {" v2 a
  • 0 z( M+ M! m2 |- F1 _
    & e+ X5 z* m2 J4 P. h# y) u3 C9 u
    ] ;
    7 }5 L  a1 t! {0 \

    / q5 I3 G; L6 L: W) B
  • / [4 J" U: J4 J" z

    , }& a3 e: A& ]! z* H7 H& B4 \: G3 H5 q. F- V4 E$ S/ j) s
    5 a% b3 x4 @$ R

  • 7 |) ?; m$ N- b* \* s- u9 |
    7 s  w) ]: [. H; @/ J: Y/ ^
    then8 k; F- R9 t; `

    % k0 V) f% j+ g

  • % ]4 I0 d6 E: D& ]2 p

    ( W$ d, U' v. l( s/ Dmnt $1 $24 d' q0 d: Y  V  h

    : i7 ], W8 d# A& C# t. q9 O, ~6 t0 Z

  • 9 G% t0 I3 s  k1 m
    5 l1 Y; }) I8 s
    elif [ "$1" == "-u" ] && [ -n "$2"
    3 h% P. F! P/ z  n' O0 Z0 d
    0 e  |  e! Q! g* s0 |( G- t+ w

  • : N; @6 w$ ]- h7 }% E
    ( e" N1 s& s. P% Z
    ];) F  @% e% {6 Z0 j* T3 V+ m) R
    " q7 F6 w+ P/ i. e
  • 4 w7 @- K; G" i) i# Q: C& N
    * z: b# U( ^) _/ }) {
    then: T# E, J1 J" d6 y. z2 H
    ! N4 y) B' y% t2 `4 |

  • 6 W9 n  z3 H5 j3 _% X) L( u

    % x4 Y4 M9 o! Xumnt $1 $29 `2 J% f5 F1 @

    7 h( r2 y" h1 H% x$ }0 w8 ~6 p

  • 3 R' ^# g6 ~5 @# f  Z

    6 w# q9 Q- ~, E: o4 T1 melse
    + l4 ~& `, i7 S1 x7 w
    & X* v, d) F$ z/ h( h' y8 [$ ~2 M

  • + [1 ]: l2 d" x+ ?  h+ e6 E& f5 Q

    / x! F, ^6 x: m7 t$ J) Y0 cecho """ h3 i; h5 I: D/ `5 B
    2 i  _1 ~( J. g+ a" R2 }9 v: Q4 Z
  • 3 P; L# ]4 B. S2 R& Q0 S& Q7 \
    , \0 k2 H& w: H; X6 M9 K; k, B
    echo "Either 1'st, 2'nd or both parameters were missing"0 b# @" K0 f# x9 K$ t# @
    - x) z' W( A& b' l

  • % N+ i4 E3 F" M; c

    6 _6 t0 n. H, M3 l$ y) C- A$ lecho ""
    ! [+ y0 Y" I1 E" ~: T

    4 @% y5 T$ Q! `* ^2 T. h# p/ T
  • 6 |1 f% O; J+ G8 U
    4 E2 C* @( H, I0 d5 b
    echo "1'st parameter can be one of these: -m(mount) OR, l0 T9 j8 D& |* v" H1 {+ S+ x% e

    / _5 ]. H4 B: z
  • ' _" |: j; w; \; c/ F
    6 }1 T1 H9 F# T6 c" s* r6 E/ D
    -u(umount)"
    4 W" N2 Z! ^6 B5 R
    $ |+ H  H2 M$ O  n, @
  • 5 x1 F# \# n1 B, R8 i
    4 @( `/ [+ f" S5 r
    echo "2'nd parameter is the full path of rootfs6 D$ Q* [; L. j

    5 |( H6 I, J2 \/ F
  • % ~9 k+ `7 s1 W% k% k+ i
    : e( K8 y; J, `
    directory(with trailing '/')"
    & j3 e: k) l3 b9 Z# i0 a

      k1 Q  j6 z# Y8 ?8 H" [
  • 3 H0 x$ _7 ~3 e, g

    1 z6 }5 W* @- N1 i- lecho ""
    , L' D4 u. z4 W) N" U

      ^; ?! ?. P4 B% ~9 S: ~
  • 2 T9 ~6 B; a% d% }. ~9 _
    4 s$ X0 `3 ]7 q4 A2 H
    echo "For example: ch-mount -m /media/sdcard/"; Y+ L# p/ k0 ]3 d1 c
    % J9 @1 j* f! l6 A9 L

  • : R2 H5 |( t+ n, m

    : p0 X0 g- |, Techo ""
    ; W/ V7 ?5 [- i5 V7 ^7 T1 C

    % X$ h: Q( B+ X) C- n4 u1 H! m

  • 3 s; y; o5 N& }) t1 j( p

    % X% g$ c, L( [2 r! W1 a4 Mecho 1st parameter : ${1}
    ' w3 z3 J1 R3 Q4 J& j4 p) E; }
    9 e- g: T, I& H. z/ j7 c
  • " b4 C+ {/ ]+ Q  c# w
    ) s3 l0 s% V2 Z# O
    echo 2nd parameter : ${2}
    , O* k( t) M6 b( g# u

    - u! Y4 o; d/ z. D2 ]
  • 1 }. {% j! T" k' w/ P& p: L
    , C1 w9 b' H8 q5 s- n$ j' `5 ^
    fi% ^4 q, J% u* G& L

    , Z+ P) j0 Q- W3 [* l( |
    2 G/ J2 R# L* r

' a' J# ]( n# D; c7 B% j; ^9 x/ N, u$ G6 P) Y& d# D

2 Z0 }. M' G1 f& q

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

sudo chmod 777 ch-mount.sh

③ 挂载文件系统:

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

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


1 f, m; f+ n+ W# O# g

5. 安装软件

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

① 更新下载源:

apt update

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

如下:

chmod 777 /tmp

② 安装软件:

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

2 F( E" Q4 d% f8 Z

% y2 B8 g8 @5 v* P. l& J: ~

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

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


7 ]' U) W$ C9 e/ C- J0 \: Q

7 B4 F: @) }" C, K
, |( s1 n+ ]* r; y% w# m" E

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

* f* g  J. o" e' m) o

6. 打包文件系统

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

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

! m+ r. S$ K- B# \: V& A( x

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

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


! @7 L: A# k8 j" k4 b: G2 c

6 O, k$ }  @( ^/ L: a: v% D, \1 I4 O

0 [; N& t( W/ s& G

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

; F! Q: U& u" ]


) A3 o* ?; S: U. I0 K3 Q. O$ Y. h# P0 E4 d

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

( K2 w9 e) [/ a  ~2 v  i8 T- l7 K. [% Q
+ y, x7 O2 f2 z& Y* `( I

* _  \! m( f! G! `+ g$ U

7. 测试方法

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


, c: b0 y* r/ B. I7 k


0 A- w. {& _% q9 X3 J  k# e4 ^, l

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

+ t7 B: U% R$ z3 c& \

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

- H- r: x& X  X6 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-6-17 15:10 , Processed in 0.093750 second(s), 23 queries , Gzip On.

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

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

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