admin管理员组文章数量:1563210
提示:本文为系统的本地化文档,想要按照本文档完成系统的移植,需要你提前准备好Android的原生SDK。
目录
- 前言
- 第一部分 文件系统基础
- 一、嵌入式linux系统构成
- 二、文件系统目录介绍
- 三、根文件系统制作工具
- 四、常用关键字
- 第二部分 busybox
- 一、前置编译
- 1.必备组件
- 2.配置修改
- 3 编译文件系统
- 二、完善文件系统
- 1. 创建必要文件夹
- 2. 拷贝lib文件夹
- 3. 启动脚本-创建rcS文件
- 4. 硬盘分区-创建fstab文件
- 5. 启动进程-创建inittab文件
- 6. 账户信息-创建passwd文件
- 7. 创建profile文件
- 8. 创建eth0-setting和eth1-setting文件
- 9. 创建 ifconfig-eth0 和 ifconfig-eth1 文件
- 10. 热插拔-创建 medv.conf 文件
- 11. 挂载分区-创建 mtab 文件
- 12. 创建 netd 文件
- 五、添加QT
- 第三部分 QT
- 一、基础信息
- 1.组件
- 2.编译环境
- 二、移植QT库
- 1. 编译触摸
- 2. 编译QtE5.15库
- 3.字库
- 4.库文件
- 5.修改环境变量
- 第四部分 添加第三方组件
- 一、配置交叉编译
- 二、ssh
- 1.组件
- 第五部分 系统烧录与测试
- 一、制作文件系统镜像
- 二、功能测试
- 1. 网络测试
- 2. 中文测试
- 3. 热插拔测试
- 4. 库文件测试
- 5. 开机自启动程序测试
- 6. 固定IP测试
前言
提示:感谢北京迅为电子
感谢【北京迅为电子】,本文是参考北京迅为电子的相关文档总结而成。
提示:以下是本篇文章正文内容
第一部分 文件系统基础
一、嵌入式linux系统构成
二、文件系统目录介绍
目录 | 说明 |
---|---|
/bin | 普通用户的命令,如:cat、ls、chmod、mkdir |
/sbin | root用户的命令,如:shutdown、reboot、fdisk、init |
/dev | 设备接口文件,如串口0-/dev/ttySAC0 |
/etc | 系统配置文件 |
/lib | 库文件 |
/home | 普通用户文件夹,普通用户配置文件 |
/root | root用户文件夹 |
/usr | 共享资源文件夹,用户的应用程序和文件 |
/var | 可变的数据,如:日志文件等 |
/proc | |
/mnt | |
/tmp | 存放临时文件 |
三、根文件系统制作工具
目录 | 说明 |
---|---|
busybox | 最简单的根文件系统一般使用 busybox 工具制作。 |
√ | 体积小,支持常用命令。 |
× | 功能不全,无包管理工具 |
buildroot | |
√ | 构建简单,容易理解,能构建完整镜像 |
× | 无包管理工具 |
yocto | |
√ | 支持的框架较多 |
× | 配置复杂,不适合新手 |
Ubuntu | |
√ | 构建方便,支持包管理工具 |
× | 构建的文件系统较大 |
debian | |
√ | 极为精简而稳定,有干净作业环境,采用基于 Deb的 ATP 包管理系统。 |
× | 不提供专门技术支持,不包含封闭源代码软件发行周期过长,稳定版本中软件过时。中文支持不是很完善。 |
buildroot
Yocto
Ubuntu
Debian
四、常用关键字
export PATH=/work/topeet/rk3568/tools/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin:$PATH
export ARCH=arm64
cp -rf rootfs.img /mnt/hgfs/share/image/Image-rk3568_r/busybox/
第二部分 busybox
一、前置编译
1.必备组件
Busybox工具官网:http://www.busybox/ 下载后进行解压缩
tar -xvf busybox-1.33.1.tar.bz2
2.配置修改
# 使能中文
Settings --> Support Unicode
设为: Check $LC_ALL, $LC_CTYPE and $LANG environment variables
# 设置交叉编译工具
Settings --> Build Options --> Cross Compiler prefix
设为: aarch64-linux-gnu-
# 设置安装路径
Settings --> Build Options --> Destination path for 'make install'
设为: ../system
使能中文同时需要修改:
/libbb/printable_string.c
const char* FAST_FUNC printable_string2(uni_stat_t *stats, const char *str)
- if (c >= 0x7f)
- break;
const char* FAST_FUNC printable_string2(uni_stat_t *stats, const char *str)
- if (c < ' ' || c >= 0x7f)
+ if (c < ' ')
/libbb/unicode.c
static char* FAST_FUNC unicode_conv_to_printable2(uni_stat_t *stats, const char
- *d++ = (c >= ' ' && c < 0x7f) ? c : '?';
+ *d++ = (c >= ' ') ? c : '?';
static char* FAST_FUNC unicode_conv_to_printable2(uni_stat_t *stats, const char
- if (c < ' ' || c >= 0x7f)
+ if (c < ' ')
3 编译文件系统
对Makefile进行以下配置,需要提前放入对应的gcc编译器
export ARCH=arm64
export CROSS_COMPILE=/work/topeet/rk3568/tools/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
make
make install
二、完善文件系统
序号 | 事务 | 描述 |
---|---|---|
1 | 基本文件夹 | mkdir dev etc lib mnt proc sys tmp var etc/init.d |
2 | 拷贝lib | cp -r …aarch64-linux-gnu/libc/lib/* lib/ |
3 | 启动脚本 | etc/init.d/rcS |
4 | 硬盘分区 | etc/fstab |
5 | 启动进程 | etc/inittab |
6 | 账户信息 | etc/passwd |
7 | profile | etc/profile |
8 | IP网关 | etc/eth0-setting etc/eth0-setting |
9 | 网卡脚本 | ifconfig-eth0 ifconfig-eth0 |
10 | 热插拔 | etc/mdev.conf etc/hotplug/udisk_inserting etc/hotplug/udisk_removing |
11 | 挂载分区 | ln -s /proc/mounts etc/mtab |
12 | netd | etc/rc.d/init.d/netd |
1. 创建必要文件夹
mkdir dev etc lib mnt proc sys tmp var etc/init.d
2. 拷贝lib文件夹
cp -r ../../tools/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/libc/lib/* lib/
3. 启动脚本-创建rcS文件
code etc/init.d/rcS
#! /bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:$PATH
runlevel=S #runlevel=S 表示将系统设置为单用户模式。
prevlevel=N
umask 022 #当前用户在创建文件时的默认权限。
export PATH runlevel prevlevel
/bin/hostname iTOP-RK3568 #设置机器名字为 iTOP-RK3568
mount -a #查找/etc/fstab挂载应当挂载的文件系统
mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug # mdev来管理热插拔设备
mdev -s
mkdir -p /var/empty
mkdir -p /var/log
mkdir -p /var/log/boa
mkdir -p /var/lock
mkdir -p /var/run
mkdir -p /var/tmp
syslogd # 记录系统或应用程序产生的各种信息,并把信息写到日志中
/etc/rc.d/init.d/netd start #启动netd服务
mkdir /mnt/disk #U盘、TF卡挂载
/sbin/ifconfig lo 127.0.0.1
/etc/init.d/ifconfig-eth0
/etc/init.d/ifconfig-eth1
sleep 1
echo "*************************************" >/dev/ttyFIQ0
echo "http://topeetboard" > /dev/ttyFIQ0
echo "*************************************" > /dev/ttyFIQ0
4. 硬盘分区-创建fstab文件
touch etc/fstab
code etc/fstab
chmod 777 etc/fstab
#<file system> <dir> <type> <options> <dump> <pass>
#存储标识|挂载位置|类型|特殊参数|备份|fsck检查
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
关键词 | 描述 |
---|---|
格式 | <file system> <dir> <type> <options> <dump> <pass> |
<file systems> | 存储设备的标识 (i.e./dev/sda1). |
<dir> | 告诉 mount 命令应该将文件设备挂载到哪里。 |
<type> | 定义了要挂载的设备或是分区的文件系统类型,支持许多种不同的文件系统,如 ext2, ext3, reiserfs, xfs, jfs, smbfs, iso9660, vfat, ntfs, swap 以及 auto。 ‘auto’ 类型使 mount 命 令对这文件系统类型进行猜测,这对于如 CDROM 和 DVD 之类的可移动设备是非常有用的。 |
<options> | 定义了不同文件系统的特殊参数,不同文件系统的参数不尽相同。其中一些 比较通用的参数有以下这些: |
<dump> | dump utility 用来决定何时作备份. 安装之后 ( ArchLinux 默认未安装 ), dump 会检查其内容,并用数字来决定是否对这个文件系统进行备份。允许的数字是 0 和 1 。0 表 示忽略, 1 则进行备份。大部分的用户是没有安装 dump 的 ,对他们而言 <dump> 应设为 0。 |
<pass> | fsck 读取 的数值来决定需要检查的文件系统的检查顺序。允许的数字是 0, 1, 和 2。根目录应当获得最高的优先权 1, 其它所有需要被检查的设备设置为2. 0 表示设备 不会被 fsck 所检查。 |
5. 启动进程-创建inittab文件
touch etc/inittab
code etc/inittab
chmod 777 etc/inittab
输入以下代码
::sysinit:/etc/init.d/rcS
console::askfirst:-/bin/sh
::restart:/sbin/init
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff -a
# 第 1 行,系统启动以后运行/etc/init.d/rcS 这个脚本文件。
# 第 2 行,将 console 作为控制台终端,也就是 ttySTM0。
# 第 3 行,重启的话运行/sbin/init。
# 第 4 行,关机的时候执行/bin/umount,也就是卸载各个文件系统。
# 第 5 行,关机的时候执行/sbin/swapoff,也就是关闭交换分区。
init 进程为内核加载文件系统的第一个进程,一般称为 0 号进程,init 进程启动后会自 动读取 inittab。 inittab
文件中每一行的格式如下所示:
<id>:<runlevel>:<action>:<process>
<id> - 用来指定启动进程的控制 tty。
<runlevel>- 忽略,空着
<action>- 指定下面表中 8 个可应用到 process 的动作之一。
<process>- 指定所执行程式的路径,包括命令行选项
字段 | 描述 |
---|---|
sysinit | 为 init 提供初始化命令行的路径 |
respawn | 每当相应的进程终止执行便会重新启动 |
askfirst | 类似 respawn,不过它的主要用途是减少系统上执行的终端应用程序的数量。它将会促使 init 在控制台上显示“Please press Enter to active this console ”的信息,并在重新启动之前等待用户按下 enter 键 |
wait | 告诉 init 必须等到相应的进程完成之后才能继续执行 |
once | 仅执行相应的进程一次,而且不会等待它完成 |
ctraldel | 当按下 Ctrl+Alt+Delete 组合键时,执行相应的进程 |
shutdown | 当系统关机时,执行相应的进程 |
restart | 当 init 重新启动时,执行相应的进程,通常此处所执行的进程就是 init 本身 |
6. 账户信息-创建passwd文件
touch etc/passwd
code etc/passwd
chmod 777 etc/passwd
root:x:0:0:root:/:/bin/sh
bin:*:1:1:bin:/bin:
daemon:*:2:2:daemon:/sbin:
nobody:*:99:99:Nobody:/:
passwd 文件是用来保存用户的信息的,是一个纯文本文件。格式如下:
<name>:<password>:<uid>:<gid>:<comment>:<home>:<shell>
<name> - 用户名。
<password> - 密码(已经加密)
<uid> - UID(用户标识),操作系统自己用的
<gid> - GID 组标识。
<comment> - 用户全名或本地帐号
<home> - 用户的主目录的绝对路径
<shell> - 登录使用的 Shell,就是对登录命令进行解析的工具
7. 创建profile文件
touch etc/profile
code etc/profile
chmod 777 etc/profile
USER="`id -un`"
LOGNAME=$USER
PS1='[$USER@$HOSTNAME]:$PWD#'
PATH=$PATH
HOSTNAME=`/bin/hostname`
export USER LOGNAME PS1 PATH
8. 创建eth0-setting和eth1-setting文件
eth0-setting
touch etc/eth0-setting
code etc/eth0-setting
chmod 777 etc/eth0-setting
IP=192.168.1.230
Mask=255.255.255.0
Gateway=192.168.1.1
DNS=192.168.1.1
MAC=08:90:90:90:90:90
eth1-setting
touch etc/eth1-setting
code etc/eth1-setting
chmod 777 etc/eth1-setting
IP=192.168.1.231
Mask=255.255.255.0
Gateway=192.168.1.1
DNS=192.168.1.1
MAC=BE:C8:1D:14:82:1D
IP:开发板启动后默认设置的 IP 地址,IP 地址为 192.168.1.230 和 192.168.1.231
Mask:开发板启动后默认设置的掩码,掩码为 255.255.255.0 Gateway:开发板启动后默认配置的网关,网关为192.168.1.1
DNS:开发板启动后默认设置的 DNS,DNS 为 192.168.1.1
MAC:开发板启动后默认设置的 MAC 地址
9. 创建 ifconfig-eth0 和 ifconfig-eth1 文件
ifconfig-eth0 和 ifconfig-eth1 是网络配置文件,工作流程就是读取我们创建的 eth0-setting 和
eth1-setting 网络信息文件来设置网络,如果 eth0-setting 或者 eth1-setting 配置文件不存在,
就使用默认配置。
ifconfig-eth0
touch etc/init.d/ifconfig-eth0
code etc/init.d/ifconfig-eth0
chmod 777 etc/init.d/ifconfig-eth0
#!/bin/sh
echo -n Try to bring eth0 interface up......>/dev/ttyFIQ0
if [ -f /etc/eth0-setting ] ; then
source /etc/eth0-setting
if grep -q "^/dev/root / nfs " /etc/mtab ; then
echo -n NFS root ... > /dev/ttyFIQ0
else
ifconfig eth0 down
ifconfig eth0 hw ether $MAC
ifconfig eth0 $IP netmask $Mask up
route add default gw $Gateway
fi
echo nameserver $DNS > /etc/resolv.conf
else
if grep -q "^/dev/root / nfs " /etc/mtab ; then
echo -n NFS root ... > /dev/ttyFIQ0
else
/sbin/ifconfig eth0 192.168.253.12 netmask 255.255.255.0 up
fi
fi
echo Done >/dev/ttyFIQ0
ifconfig-eth1
touch etc/init.d/ifconfig-eth1
code etc/init.d/ifconfig-eth1
chmod 777 etc/init.d/ifconfig-eth1
输入以下内容
#!/bin/sh
echo -n Try to bring eth0 interface up......>/dev/ttyFIQ0
if [ -f /etc/eth1-setting ] ; then
source /etc/eth1-setting
if grep -q "^/dev/root / nfs " /etc/mtab ; then
echo -n NFS root ... > /dev/ttyFIQ0
else
ifconfig eth1 down
ifconfig eth1 hw ether $MAC
ifconfig eth1 $IP netmask $Mask up
route add default gw $Gateway
fi
echo nameserver $DNS > /etc/resolv.conf
else
if grep -q "^/dev/root / nfs " /etc/mtab ; then
echo -n NFS root ... > /dev/ttyFIQ0
else
/sbin/ifconfig eth0 192.168.253.12 netmask 255.255.255.0 up
fi
fi
echo Done >/dev/ttyFIQ0
10. 热插拔-创建 medv.conf 文件
U盘热插拔文件mdev.conf
touch etc/mdev.conf
code etc/mdev.conf
chmod 777 etc/mdev.conf
sd[a-z][0-9] 0:0 666 @ /etc/hotplug/udisk_inserting
sd[a-z] 0:0 666 $ /etc/hotplug/udisk_removing
hotplug/udisk_inserting
mkdir -p etc/hotplug
touch etc/hotplug/udisk_inserting
code etc/hotplug/udisk_inserting
chmod 777 etc/hotplug/udisk_inserting
#!/bin/sh
echo "usbdisk insert!" > /dev/console
if [ -e "/dev/$MDEV" ] ; then
mkdir -p /mnt/usbdisk/$MDEV
mount /dev/$MDEV /mnt/usbdisk/$MDEV
echo "/dev/$MDEV mounted in /mnt/usbdisk/$MDEV">/dev/console
fi
hotplug/udisk_removing
touch etc/hotplug/udisk_removing
code etc/hotplug/udisk_removing
chmod 777 etc/hotplug/udisk_removing
#!/bin/sh
echo "usbdisk remove!" > /dev/console
umount -l /mnt/usbdisk/sd*
rm -rf /mnt/usbdisk/sd*
11. 挂载分区-创建 mtab 文件
ln -s /proc/mounts etc/mtab
/etc/mtab 是当前的分区挂载情况,记录的是当前系统已挂载的分区。
每次挂载/卸载分区时会更新/etc/mtab 文件中的信息。所以在 ifconfig-eth0 文件里面我们就是通过这个/etc/mtab
来判断当前的文件系统是不是 nfs 网络文件系统。 mtab 文件是个链接文件,我们在 etc 目录下输入命令“ln -s /proc/mounts mtab”把他链接到 /proc/mounts。
12. 创建 netd 文件
netd 文件是用用来配合 profile 文件里面的/etc/rc.d/init.d/netd start 的这行代码来启动 netd
服务的。这里我们就来一起创建这个文件。
执行以下内容创建netd
mkdir -p etc/rc.d/init.d
touch etc/rc.d/init.d/netd
code etc/rc.d/init.d/netd
chmod 777 etc/rc.d/init.d/netd
输入以下内容
#!/bin/sh
base=inetd
# See how we were called.
case "$1" in
start)
/usr/sbin/$base
;;
stop)
pid=`/bin/pidof $base`
if [ -n "$pid" ]; then
kill -9 $pid
fi
;;
esac
exit 0
五、添加QT
第三部分 QT
一、基础信息
1.组件
# 触摸库
tslib-1.4.tar.gz
# qt库
qt-everywhere-src-5.15.2.tar.xz
# 字库
fonts.zip
# 库
lib.tar.bz2
进行解压:
tar -vxf tslib-1.4.tar.gz
tar -vxf qt-everywhere-src-5.15.2.tar.xz
unzip -o -d ./ fonts.zip
mkdir -p qt_lib/ ;tar -vxf lib.tar.bz2 -C ./qt_lib/
2.编译环境
export PATH=/work/topeet/rk3568/tools/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin:$PATH
export ARCH=arm64
aarch64-linux-gnu-gcc -v
# 解决autoreconf: not found
sudo apt-get install -y autoconf automake libtool
二、移植QT库
1. 编译触摸
cd tslib
./autogen.sh
mkdir -p ../system/opt/tslib1.4
./configure CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++ --host=aarch64-linux-gnu --prefix=/work/topeet/rk3568/busybox/system/opt/tslib1.4 ac_cv_func_malloc_0_nonnull=yes
make
make install
code ../system/opt/tslib1.4/etc/ts.conf
module_raw input
2. 编译QtE5.15库
添加编译库
cd qt-everywhere-src-5.15.2
code qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf
QT_QPA_DEFAULT_PLATFORM = linuxfb
QMAKE_CFLAGS_RELEASE += -O2 -march=armv8-a -lts
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv8-a -lts
touch autoconfigure.sh
chmod 777 autoconfigure.sh
code autoconfigure.sh
#!/bin/sh
./configure \
-v \
-prefix /work/topeet/rk3568/busybox/system/opt/qt5.15.2 \
-confirm-license \
-opensource \
-release \
-xplatform linux-aarch64-gnu-g++ \
-optimized-qmake \
-c++std c++11 \
--rpath=no \
-pch \
-skip qt3d \
-skip qtactiveqt \
-skip qtandroidextras \
-skip qtcanvas3d \
-skip qtconnectivity \
-skip qtdatavis3d \
-skip qtdoc \
-skip qtgamepad \
-skip qtlocation \
-skip qtmacextras \
-skip qtnetworkauth \
-skip qtpurchasing \
-skip qtremoteobjects \
-skip qtscript \
-skip qtscxml \
-skip qtsensors \
-skip qtspeech \
-skip qtsvg \
-skip qttools \
-skip qttranslations \
-skip qtwayland \
-skip qtwebengine \
-skip qtwebview \
-skip qtwinextras \
-skip qtx11extras \
-skip qtxmlpatterns \
-make libs \
-make examples \
-nomake tools -nomake tests \
-gui \
-widgets \
-dbus-runtime \
--glib=no \
--iconv=no \
--pcre=qt \
--zlib=qt \
-no-openssl \
--freetype=qt \
--harfbuzz=qt \
-no-opengl \
-linuxfb \
--xcb=no \
--libpng=qt \
--libjpeg=qt \
--sqlite=qt \
-plugin-sql-sqlite \
-I/work/topeet/rk3568/busybox/system/opt/tslib1.4/include \
-L/work/topeet/rk3568/busybox/system/opt/tslib1.4/lib \
-recheck-all
exit
mkdir -p ../system/opt/qt5.15.2
./autoconfigure.sh
make
make install
在/opt目录下看到
3.字库
cp -rf fonts system/opt/qt5.15.2/lib/
4.库文件
cp qt_lib/* system/opt/qt5.15.2/lib/
5.修改环境变量
code system/etc/profile
ulimit -S -c 0 > /dev/null 2>&1
USER="`id -un`"
LOGNAME=$USER
PS1='[$USER@$HOSTNAME]:$PWD#'
PATH=$PATH
HOSTNAME=`/bin/hostname`
export USER LOGNAME PS1 PATH
EVENT=$(cat /proc/bus/input/devices | grep -E 'ft5x06|goodix-gt911' -A4 | tail -n1 | head -c 95 | cut-c13-18)
export TSLIB_ROOT=/opt/tslib1.4
export QT_ROOT=/opt/qt5.15.2
export TSLIB_TSDEVICE=/dev/input/$EVENT
export TSLIB_TSEVENTTYPE=input
export TSLIB_CONFFILE=/opt/tslib1.4/etc/ts.conf
export TSLIB_PLUGINDIR=/opt/tslib1.4/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export LD_PRELOAD=$TSLIB_ROOT/lib/libts.so
export QWS_MOUSE_PROTO=tslib:/dev/input/$EVENT
export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:$QT_ROOT/lib:$TSLIB_ROOT/lib:$TSLIB_ROOT/lib/
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0
export QT_QPA_FONTDIR=$QT_ROOT/lib/fonts
export QT_QPA_GENERIC_PLUGINS=tslib
第四部分 添加第三方组件
一、配置交叉编译
export PATH=/work/topeet/rk3568/tools/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin:$PATH
export ARCH=arm64
aarch64-linux-gnu-gcc -v
二、ssh
1.组件
zlib 官方下载:http://www.zlib/ openssl
官方下载:http://www.openssl/source openssh
官网下载:http://www.openssh/portable.html
busybox/ssh/compressed:
openssh-9.0p1.tar.gz openssl-1.1.1q.tar.gz zlib-1.2.12.tar.gz
tar -vxf openssh-9.0p1.tar.gz -C ../
tar -vxf openssl-1.1.1q.tar.gz -C ../
tar -vxf zlib-1.2.12.tar.gz -C ../
第五部分 系统烧录与测试
一、制作文件系统镜像
export PATH=/work/topeet/rk3568/tools/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin:$PATH
export ARCH=arm64
mkdir rootfs
# 查看system文件大小
du system
# 分配空间 建立磁盘 预留给QT
dd if=/dev/zero of=rootfs.ext4 bs=1M count=700
mkfs.ext4 -L rootfs rootfs.ext4
# 更新system到rootfs.ext4
mount ./rootfs.ext4 rootfs
cp -r ./system/* ./rootfs
umount rootfs
cp rootfs.ext4 rootfs.img
# 拷贝到烧录区域
cp -rf rootfs.ext4 /mnt/hgfs/share/image/Image-rk3568_r/busybox/rootfs.img
二、功能测试
1. 网络测试
2. 中文测试
3. 热插拔测试
4. 库文件测试
编写hello.c
#include <stdio.h>
int main(void)
{
printf("hello linux\n");
printf("hello linux\n");
printf("hello linux\n");
return 0;
}
执行以下,
export PATH=/work/topeet/rk3568/tools/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin:$PATH
export ARCH=arm64
aarch64-linux-gnu-gcc -o hello hello.c
5. 开机自启动程序测试
system/etc/inittab
...
console::askfirst:-/bin/sh
...
在我们按下回车以后会启动/bin/sh,然后配置/etc/profile 文件的配置。
可以在/etc/profile 文件下来实现 app的开机自启动。
./hello &
6. 固定IP测试
版权声明:本文标题:Linux文件系统(busybox) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1727493803a1117426.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论