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
/sbinroot用户的命令,如:shutdown、reboot、fdisk、init
/dev设备接口文件,如串口0-/dev/ttySAC0
/etc系统配置文件
/lib库文件
/home普通用户文件夹,普通用户配置文件
/rootroot用户文件夹
/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拷贝libcp -r …aarch64-linux-gnu/libc/lib/* lib/
3启动脚本etc/init.d/rcS
4硬盘分区etc/fstab
5启动进程etc/inittab
6账户信息etc/passwd
7profileetc/profile
8IP网关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
12netdetc/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测试

本文标签: 文件系统LinuxBusybox