制作根文件系统
项目需要制作glibc的根文件系统,这里记录一下。
busybox:https://busybox.net/
make menuconfig
设置交叉编译器 setting->cross compiler prefix(敲首字母就能查找)->添加交叉编译器路径
setting的build static lib不要勾选
勾选vi-style line editing commands
勾选Linux System Utilities->medv(热拔插)
添加中文支持
vim libbb/printable_string.c
31、32行以及35行对中文字符的限制去掉
vim libbb/unicode.c
1030、1038行
勾选setting->Support Unicode和下面一项

编译
make & make install CONFIG_PREFIX=../sys
在上一级目录中的sys下

就是我们需要的一部分目录
创建目录结构mkdir dev etc lib lib64 mnt proc sys tmp var
主要是etc和lib两个目录需要配置
lib
将交叉编译工具链的libc下所有文件拷贝到lib文件夹下
etc
网络配置文件
vim eth0-setting & chmod 777 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
读取网络配置文件eth0-setting的文件
mkdir init.d & vim ifconfig-eth0 & chmod 777 ifconfig-eth0
#!/bin/sh
echo -n Try to bring eth0 interface up……>/dev/ttyS0 #向串口设备打印,具体到开发板的串口设备
if [ -f /etc/eth0-setting ] ; then
source /etc/eth0-setting
if grep -q "^/dev/root / nfs "/etc/mtab"; then
echo -n NFS root … > /dev/ttyS0
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/ttyS0
else
/sbin/ifconfig eth0 192.168.253.12 netmask 255.255.255.0 up
fi
fi
echo Done > /dev/ttyS0
init.d下创建开机启动脚本rcS
vim rcS & chmod 777 rcS
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
#
# Trap CTRL-C &c only in this shell so we can interrupt subprocesses.
#
trap ":" INT QUIT TSTP
/bin/hostname OpenHarmony
mount -a
echo /sbin/mdev > /proc/sys/kernel/hotplug
/sbin/mdev -s
mkdir -p /dev/pts
/bin/mount -n -t devpts none /dev/pts -o mode=0622
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
mkdir /mnt/disk
/sbin/ifconfig lo 127.0.0.1
/etc/init.d/ifconfig-eth0
sleep 1
echo "**********************" > /dev/tty0
echo "http://topeetboard.com" > /dev/tty0
echo "**********************" > /dev/tty0
创建密码文件
cd etc & vim passwd & chmod 777 passwd
root:x:0:0:root:/:/bin/sh
bin:*:1:1:bin:/bin:
daemon:*:2:2:daemon:/sbin:
nobody:*:99:99:Nobody:/:
格式如下

创建profile文件
cd etc & vim profile & chmod 777 profile
# Ash profile
# vim: syntax=sh
# No core files by default
ulimit -S -c 0 > /dev/null 2>&1
USER="`id -un`"
LOGNAME=$USER
PS1='[$USER@$HOSTNAME]# '
PATH=$PATH
HOSTNAME=`/bin/hostname`
export USER LOGNAME PS1 PATH
创建netd文件
mkdir rc.d & cd rc.d & vim netd & chmod 777 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
创建inittab文件
init进程读取的配置文件

cd etc & vim inittab & chmod 777 inittab
::sysinit:/etc/init.d/rcS
console::askfirst:-/bin/sh
::restart:/sbin/init
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff -a
创建fstab文件
cd etc & vim fstab & chmod 777 fstab
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
创建medv.conf
cd etc & vim mdev.conf
sd[a-z][0-9] 0:0 666 @ /etc/hotplug/udisk_inserting
sd[a-z] 0:0 666 $ /etc/hotplug/udisk_removing
etc下创建hotplug
vim 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
vim udisk_removing
#!/bin/sh
echo "usbdisk remove!" > /dev/console
umount -l /mnt/usbdisk/sd*
rm -rf /mnt/usbdisk/sd*
创建mtab文件
cd etc & vim mtab & ln -s /proc/mounts mtab

打包
dd if=/dev/zero of=rootfs.img bs=1M count=1024
mkfs.ext4 rootfs.img
sudo mount rootfs.img rootfs
sudo cp sys/* ./rootfs -rfpd
sudo umount rootfs
在openharmony中挂载文件系统
这里我们选择挂载在原来的文件系统上,可以使用原系统的设备。
创建回环设备loop0
mknod /dev/loop0 b 7 0
chmod 660 /dev/loop0
将loop0设备绑定到rootfs.img文件上
losetup /dev/loop0 /data/local/tmp/rootfs.img
在/mnt下创建rootfs用于挂载我们的文件系统
mkdir -p /mnt/rootfs
挂载
mount /dev/loop0 /mnt/rootfs/

绑定必要的设备
mount --bind /dev /mnt/rootfs/dev
mount --bind /proc /mnt/rootfs/proc
mount --bind /sys /mnt/rootfs/sys
mount --bind /dev/pts /mnt/rootfs/dev/pts
卸载
umount /mnt/rootfs/dev/pts
umount /mnt/rootfs/dev
umount /mnt/rootfs/proc
umount /mnt/rootfs/sys
umount /mnt/rootfs
losetup -d /dev/loop0
使用chroot切换根文件系统
chroot /mnt/rootfs

运行时发现glibc版本过低,换一个高版本的编译工具链

浙公网安备 33010602011771号