01-Linux_Common_System_Customization

Linux System Login Credentials

Ubuntu Username/Password: kickpi/kickpi


GPIO Control

Sysfs GPIO Control

To configure expansion pins as inputs when the default gpio-led driver is insufficient:

Step 1: Comment the GPIO node in the device tree. Example for PH8:

vim device/config/chips/a133/configs/c3/kickpi-k5.dts
+ /*
            PH8 {
                label = "PH8";
                gpios = <&pio PH 8 1 0 1 0>;
                linux,default_trigger = "default-on";
                default-state = "on";
            };
+ */

Step 2: Recompile and flash the firmware.

Step 3: Verify GPIO availability:

cat /sys/kernel/debug/pinctrl/pio/pinmux-pins | grep PH8
# Output: pin 232 (PH8): (MUX UNCLAIMED) (GPIO UNCLAIMED)

Step 4: Register and control GPIO via sysfs:

echo 232 > /sys/class/gpio/export
ls /sys/class/gpio/gpio232

# Control commands:
echo out > /sys/class/gpio/gpio232/direction  # Set as output
echo 1 > /sys/class/gpio/gpio232/value        # Set high
echo 0 > /sys/class/gpio/gpio232/value        # Set low

Sunxi GPIO Control

cd /sys/kernel/debug/sunxi_pinctrl

# View pin configuration
echo PH8 > sunxi_pin
cat sunxi_pin_configure

# Configure as GPIO
echo 'PH8 0' > function

# Modify pull-up/down
echo 'PH8 1' > pull
cat pull

# For PL/R_PIO pins:
echo pio > /sys/kernel/debug/sunxi_pinctrl/dev_name
echo r_pio > /sys/kernel/debug/sunxi_pinctrl/dev_name

Ubuntu 1604 Customization

RootFS Modification via chroot

Prepare Environment:

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

Backup & Extract RootFS:

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

Modify RootFS:

./ch-mount.sh -m rootfs_k5
sudo chroot rootfs_k5
# Perform modifications (e.g., apt-get update)
exit
./ch-mount.sh -u rootfs_k5

Repackage:

rm 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 .

Troubleshooting: Modify build/mkcmd.sh if encountering mkfs.ubifs errors:

- fakeroot mkfs.ubifs -c 1280 ...
+ fakeroot mkfs.ubifs -c 2560 ...

Overlay Modification

Place files under overlay/ to overwrite rootfs during compilation:

overlay/etc/my_script.sh  # Will replace /etc/my_script.sh

Export/Repack RootFS

Export:

ff_export_rootfs /media/kickpi/USB_Drive/
# Output: rootfs.img

Repack:

cp rootfs.img out/a133/c3/bsp/rootfs.ext4
./build.sh pack

Partition Modification

Default Partition Layout:

/dev/mmcblk0p4: 6G (rootfs)
/dev/mmcblk0p6: 1.1G (UDISK)

Modify Partition Table:

--- 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

Mount UDISK:

mkfs.ext4 /dev/mmcblk0p6
mkdir /data
mount /dev/mmcblk0p6 /data

NFS Configuration

Server:

sudo apt install nfs-kernel-server
echo "/home/user/nfs_share *(rw,sync,no_subtree_check,insecure)" >> /etc/exports
sudo service nfs-kernel-server restart

Client:

sudo mount -t nfs 192.168.1.100:/home/user/nfs_share /mnt/nfs

SSH Configuration

Enable Root Login:

echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
systemctl restart ssh

WiFi AP Setup

Install Tools:

apt-get install hostapd dnsmasq

Configure HostAPD:

# /etc/hostapd/hostapd.conf
interface=wlan0
ssid=MyHotspot
wpa_passphrase=password
channel=6
driver=nl80211

Start Services:

systemctl start hostapd dnsmasq

VNC Setup

Install & Configure:

apt-get install tightvncserver
vncserver -geometry 1920x1080

Modify xstartup:

unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
startxfce4 &

Boot Mode Control

CLI-Only Boot:

systemctl set-default multi-user.target
reboot

Enable GUI:

systemctl set-default graphical.target
reboot

USB-to-UART Support

Add Device ID:

--- 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) }, /* HL-340 USB-Serial */

Miscellaneous

Fix Firefox:

sudo apt install firefox

Unsupported xrandr Rotation: A133 platform currently does not support display rotation via xrandr.

Last updated