经过前面十篇文章的介绍,硬件部分调试基本完毕,接下来的文章开始介绍软件的个性化开发。
既然是自己的板子,那开机信息当然也要显示自己的。在 uboot 的 dts 文件中,将 model 改为 “V3s DIY”
arch/arm/dts/sun8i-v3s-licheepi-zero.dts
/ {
model = "V3s DIY";
compatible = "licheepi,licheepi-zero", "allwinner,sun8i-v3s";
};
开机
U-Boot 2022.01 (Sep 07 2023 - 22:58:03 +0800) Allwinner Technology
CPU: Allwinner V3s (SUN8I 1681)
Model: V3s DIY // 这里已更改
DRAM: 64 MiB
WDT: Not starting watchdog@1c20ca0
MMC: mmc@1c0f000: 0
Loading Environment from FAT... Unable to read "uboot.env" from mmc0:1... In: serial@1c28000
Out: serial@1c28000
Err: serial@1c28000
Net: No ethernet found.
Hit any key to stop autoboot: 0
[ 2.006117] Run /sbin/init as init process
[ 2.148117] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)
Welcome to V3s LYJ
v3s-diy login: root
#
使用 LCD 作为控制台,键盘作为输入,一台卡片电脑就成型了
在 /etc/inittab 中添加下面这行
tty0::respawn:/bin/sh
tty0 对应 /dev/fb0,也就是 LCD 屏幕的帧缓冲区,原理参考《lcd如何与tty1相对应?》
这样,LCD 就显示 /bin/sh 作为控制台了。
console 需要输入 root 才能进入系统,简直浪费生命,我需要上电后直接可以输入命令操作
step1: 关闭 getty (登录)进程
step2: /etc/inittab 中添加
ttyS0::respawn:/bin/sh
开机
[ 1.843403] Run /sbin/init as init process
[ 1.986286] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)
#
# ls
bin lib lost+found opt run tmp
dev lib32 media proc sbin usr
etc linuxrc mnt root sys var
#
这多爽啊,不用在一遍一遍地输入 root 甚至 password 了。
不过,我还想开机后就在 /root 目录,这样更方便些,改成如下
ttyS0::respawn:/bin/sh -c "cd /root; exec /bin/sh"
tty0::respawn:/bin/sh -c "cd /root; exec /bin/sh"
开机
[ 1.862823] Run /sbin/init as init process
[ 2.005049] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)
# pwd
/root
已经基本实现了要求。
不过还是有点瑕疵,就是直接运行 /bin/sh 作为 shell,相当于没有用户的概念,这样执行 cd ~
就会进入根目录而不是 /root
# cd ~
# pwd
/
后来又找到了一个方案
ttyS0::respawn:/bin/sh -c "exec /bin/login -f root"
这样才是正规的使用 root 用户
[ 1.840405] Run /sbin/init as init process
[ 1.987648] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)
# pwd
/root
像 Ubuntu 等系统,命令行提示符显示用户名、主机名、当前路径,有很好的提示作用
而我们的系统,一直就只显示一个 #,好不枯燥
所以这里也要改造一下,
我们知道,命令提示符显示的是 PS1 这个环境变量,我们看下它的值,就是一个 # 号,
# echo $PS1
#
我们在 /etc/profile
文件中修改一下该环境变量
原始
if [ "$PS1" ]; then
if [ "`id -u`" -eq 0 ]; then
export PS1='# '
else
export PS1='$ '
fi
fi
修改后
if [ "$PS1" ]; then
if [ "`id -u`" -eq 0 ]; then
export PS1='\u@\h:\w\# '
else
export PS1='\u@\h:\w\$ '
fi
fi
运行,用户、主机名、当前路径都显示出来了
如果能像 Ubuntu 那样显示颜色就更好了,那就给它点颜色瞧瞧
if [ "$PS1" ]; then
if [ "`id -u`" -eq 0 ]; then
export PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]# '
else
export PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]$ '
fi
fi
使用 buildroot 默认编译出来的文件系统大小只有几十兆,这样卡片电脑能够使用的 flash 空间就有限,现将其扩大为 512M
开机
root@v3s-diy:~# df -h
Filesystem Size Used Available Use% Mounted on
/dev/root 487.6M 210.8M 240.9M 47% /
devtmpfs 18.3M 0 18.3M 0% /dev
tmpfs 26.8M 0 26.8M 0% /dev/shm
tmpfs 26.8M 28.0K 26.8M 0% /tmp
tmpfs 26.8M 20.0K 26.8M 0% /run
总大小 487M,剩余 240M,够用了。