跳转至

Linux 常用系统定制

Note

搭载A133 平台的开发板,在Ubuntu系统下,不支持GPU硬件加速 和 VPU硬件编解码。

UBUNTU 1604

ubuntu 文件系统地址:

device/config/rootfs_tar/rootfs_ubuntu_kickpi_k5_1604lts.tar.gz

chroot 方式修改 ubuntu

1. 搭建构建环境

sudo apt-get install binfmt-support qemu-user-static
sudo dpkg -i ubuntu-build-service/packages/*
sudo apt-get install -f

2. 修改前先备份保留原本的镜像

cp device/config/rootfs_tar/rootfs_ubuntu_kickpi_k5_1604lts.tar.gz device/config/rootfs_tar/rootfs_ubuntu_kickpi_k5_1604lts_backup.tar.gz

3. 解压

mkdir rootfs_k5
sudo tar -zxf device/config/rootfs_tar/rootfs_ubuntu_kickpi_k5_1604lts.tar.gz -C rootfs_k5

4. chroot 进行挂载,等同于在 root 下进行修改ubuntu镜像

// 配置以及挂载
$ ./ch-mount.sh -m rootfs_k5
$ sudo cp -b /etc/resolv.conf rootfs_k5/etc/resolv.conf
$ sudo cp -b /usr/bin/qemu-aarch64-static rootfs_k5/usr/bin/

// 通过chroot挂载修改
$ sudo chroot rootfs_k5
# export LC_ALL=C.UTF-8
# echo "nameserver 8.8.8.8" >> etc/resolv.conf
# echo "nameserver 114.114.114.114" >> etc/resolv.conf
// 测试是否有网
# ping www.baidu.com  
# apt-get update
# apt-get upgrade
// 下载需要的东西  修改文件
# apt install       
// chroot下用exit退出
# exit

// 取消挂载
$ ./ch-mount.sh -u rootfs_k5

5. 将修改后的ubuntu重新打包 (注意:必须取消挂载!!!)

rm -v device/config/rootfs_tar/rootfs_ubuntu_kickpi_k5_1604lts.tar.gz
cd rootfs_k5/
sudo tar -zcf ../device/config/rootfs_tar/rootfs_ubuntu_kickpi_k5_1604lts.tar.gz .
cd ..
ls device/config/rootfs_tar/rootfs_ubuntu_kickpi_k5_1604lts.tar.gz

6. 使用./build.sh命令重新编译,自动将新版 rootfs 打包并入系统镜像。

可能出现的报错问题:修改 Ubuntu 根文件系统会导致镜像大小发生变化,进而造成 mkfs.ubifs 编译报错。

image-20241022183551403

解决方法:需要修改 build/mkcmd.sh

vim build/mkcmd.sh
- fakeroot mkfs.ubifs -m 4096 -e 258048 -c 1280 -F -x zlib -r ${ROOTFS} -o ${LICHEE_PLAT_OUT}/rootfs.ubifs
+ fakeroot mkfs.ubifs -m 4096 -e 258048 -c 2560 -F -x zlib -r ${ROOTFS} -o ${LICHEE_PLAT_OUT}/rootfs.ubifs

Warning

如果chroot修改方式不生效,则需要查看 overlay路径下文件是否存在覆盖文件!

overlay 方式修改ubuntu

将需要替换的文件存放到overlay下,编译会拷贝替换 rootfs 对应路径下的文件。

overlay

操作示例:若需将脚本部署至 /etc/test.sh,只需将该脚本放入对应代码路径参与编译,系统会自动将其拷贝至镜像根文件系统的 /etc/test.sh 路径下。

overlay/etc/test.sh

根文件系统打包制作

提取开发板中已修改的配置,导出根文件系统镜像,并重新打包为可烧录的系统镜像。

# ff_export_rootfs U盘或SD卡的路径
如:
# ff_export_rootfs /media/kickpi/EAA1-F4D4/ 
    Export rootfs to /media/kickpi/EAA1-F4D4//rootfs.img Success
# ls /media/kickpi/EAA1-F4D4/
    rootfs.img

在已经编译过的代码上,将生成的 rootfs.img 重新打包。

rm out/a133/c3/bsp/rootfs.ext4
cp (rootfs.img的路径) out/a133/c3/bsp/rootfs.ext4
./build.sh pack

分区修改

目前软件默认rootfs分区为 6G,除其他必要分区外,剩余空间分配给 UDISK 分区 /dev/mmcblk0p6

# fdisk  -l
Device            Start      End  Sectors  Size Type
/dev/mmcblk0p1    73728   139263    65536   32M Microsoft basic data
/dev/mmcblk0p2   139264   172031    32768   16M Microsoft basic data
/dev/mmcblk0p3   172032   303103   131072   64M Microsoft basic data
/dev/mmcblk0p4   303104 12886015 12582912    6G Microsoft basic data
/dev/mmcblk0p5 12886016 12918783    32768   16M Microsoft basic data
/dev/mmcblk0p6 12918784 15155166  2236383  1.1G Microsoft basic data

修改分区表。

--- a/device/config/chips/a133/configs/default/sys_partition.fex
+++ b/device/config/chips/a133/configs/default/sys_partition.fex
@@ -53,7 +53,7 @@ size = 16384

 [partition]
     name         = rootfs
-    size         = 14931722
+    size         = 12582912
     downloadfile = "rootfs.fex"
     user_type    = 0x8000

默认未挂载 UDISK 分区,可手动将其挂载。

// 默认无文件系统格式,将其格式化未 ext4
sudo mkfs.ext4 /dev/mmcblk0p6

// 挂载 UDISK 分区
mkdir /data
mount /dev/mmcblk0p6 /data

fstab 修改方式,系统启动会将其默认挂载。

# vim /etc/fstab
/dev/mmcblk0p6  /data       ext4    defaults        0       0

NFS配置

  • 环境配置
sudo apt install nfs-kernel-server
sudo apt install rpcbind
sudo apt install nfs-common
  • 服务器端

1. 配置共享的文件

$ mkdir /home/huangcm/nfs_share
$ chmod 777 /home/huangcm/nfs_share
$ vi /etc/exports
# /etc/exports: the access control list for filesystems which may be exported
#               to NFS clients.  See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)
# 
/home/huangcm/nfs_share *(rw,sync,no_subtree_check,insecure)

2. 启动服务

sudo service nfs-kernel-server restart

3. 查看当前服务器共享文件,证明共享成果

$  showmount -e localhost
Export list for localhost:
/home/huangcm/nfs_share *
  • 客户端

1. 查看服务器共享文件

showmount -e 192.168.199.173
Export list for 192.168.199.173:
/home/huangcm/nfs_share *

2. 挂载文件夹

$ mkdir nfs_tmp
$ sudo mount -t nfs 192.168.199.173:/home/huangcm/nfs_share nfs_tmp/

3. 挂载成功

$ ls nfs_tmp/
1.txt

SSH配置

用户:kickpi
密码:kickpi
(su)root密码: kickpi

默认禁止 root 用户远程登录,若需使用 root 连接,需手动配置开启。

$ vim /etc/ssh/ssh_config
+ PermitRootLogin yes
$ vim /etc/ssh/sshd_config
+ PermitRootLogin yes
$ sudo /etc/init.d/ssh restart

Warning

1.确保开发板 IP 地址正常可用。 2.确保电脑可正常连通开发板 IP。

$ cat /etc/ssh/ssh_config | grep PermitRootLogin
PermitRootLogin yes
$ cat /etc/ssh/sshd_config | grep PermitRootLogin
PermitRootLogin yes

WIFI配置

WIFI AP热点

1. 查看硬件支持

iw list | grep "AP"

2. 安装工具

apt-get update
apt-get install hostapd dnsmasq

3. 配置静态IP

vim /etc/network/interfaces

auto wlan0
iface wlan0 inet static
    address 192.168.42.1
    netmask 255.255.255.0

重启服务
systemctl restart networking

4. 配置hostapd

vim /etc/hostapd/hostapd.conf

##### hostapd configuration file ##############################################

interface=wlan0
ctrl_interface=/var/run/hostapd
ssid=MyHotspot
wpa_passphrase=88888888
channel=6
wpa=2
#bridge=br0

##### default configuration #######################################

#driver=rtl871xdrv
driver=nl80211
beacon_int=100
hw_mode=g
ieee80211n=1
wme_enabled=1
ht_capab=[SHORT-GI-20][SHORT-GI-40][HT40+]
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP
max_num_sta=8
wpa_group_rekey=86400
vim /etc/default/hostapd
DAEMON_CONF段修改为
DAEMON_CONF="/etc/hostapd/hostapd.conf"

5. 配置dnsmasq

备份原文件
mv /etc/dnsmasq.conf /etc/dnsmasq.conf.bak
vim /etc/dnsmasq.conf

interface=wlan0
dhcp-range=192.168.42.2,192.168.42.254,255.255.255.0,24h

6. 启动服务

systemctl start hostapd dnsmasq
systemctl enable hostapd dnsmasq

关闭 4G 开机自动配置功能

设备开机后会自动检测4G模块并执行拨号联网,如需关闭该功能,需移除相关自启配置。

$ vim usr/lib/lbc/hardware-optimization 
4g_config &
- 4g_config &

VNC远程桌面登陆

1. 下载 VNC Viewer by RealVNC®

板卡安装并开启VNC服务,并配置密码
apt-get install tightvncserver
su kickpi 使用kickpi用户,root用户下使用会出现无法显示导航栏的问题
vncserver -geometry 1920x1080

image-20250516114106707

2. 使用vim /home/kickpi/.vnc/xstartup 修改VNC配置,注释所有内容并添加以下内容。

unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
startxfce4 &

image-20250317142240671

//重启vnc 使配置生效
vncserver -kill :1
vncserver -geometry 1920x1080

3. 输入IP端口号和密码。

image-20250317142654795

image-20250516114712032

卸载xfce桌面

$ sudo apt-get remove xubuntu-desktop
$ sudo apt-get autoremove
$ sudo apt-get clean

禁用图形桌面,仅命令行启动

仅命令行启动

1. 修改默认的运行模式

$ systemctl set-default multi-user.target

2. 查看当前系统运行模式

$ systemctl get-default

3. 重启

$ reboot

启用桌面环境

1. 修改默认的运行模式

$ systemctl set-default graphical.target

2. 重启

$ reboot

USB 转 UART 模块适配配置

由于各厂商 USB 转 UART 模块的设备 ID 各不相同,内核默认并未集成所有型号的驱动支持。

1. 接入USB转UART模块,查看新增的USB PIDVID

$ lsusb
Bus 003 Device 001: ID 1a86:7523  

2. 内核添加对应设备PID及VID(内核路径以实际为准)。

--- a/kernel/linux-4.9/drivers/usb/serial/option.c
+++ b/kernel/linux-4.9/drivers/usb/serial/option.c
@@ -1980,6 +1980,7 @@ static const struct usb_device_id option_ids[] = {
          { USB_DEVICE(0x2C7C, 0x0306) }, /* Quectel EG06/EP06/EM06 */
          { USB_DEVICE(0x2C7C, 0x0296) }, /* Quectel BG96 */
 #endif
+        { USB_DEVICE(0x1a86, 0x7523) }, /* 1a86:7523 QinHeng Electronics HL-340 UsB-serial adapter */
        /* fibocom L610 */
        { USB_DEVICE(FIBOCOM_VENDOR_ID, FIBOCOM_PRODUCT_L61031) },
        { USB_DEVICE(FIBOCOM_VENDOR_ID, FIBOCOM_PRODUCT_L61032) },

4. 重新编译内核并烧录系统,接入 USB 转 UART 模块后,通过新增的 tty 设备进行串口通信。

$ ls /dev/tty*

常见问题

  • xfce 浏览器无法打开?

安装火狐浏览器。

sudo apt install firefox
  • xrandr 无法旋转 ?

a133 目前不支持 xrandr 进行旋转。