Cix: Support Orange Pi 6 Plus

This commit is contained in:
leeboby 2025-06-24 19:43:45 +08:00
parent ff9e781d2c
commit ff7af3be0c
47 changed files with 19652 additions and 264 deletions

2
.gitignore vendored
View File

@ -12,6 +12,7 @@
*.bak
*.swp
*.img
*.tar.gz
*.patch
@ -48,6 +49,7 @@ external/cache/sources/t527_packages
external/cache/sources/rk-rootfs-build*
external/cache/sources/orangepi-firmware*
external/cache/sources/wiringOP
external/cache/sources/component_cix*
external/cache/sources/wiringOP-Python
external/cache/sources/rk3399_gst_xserver_libs
external/cache/sources/ascend-driver

View File

@ -0,0 +1,10 @@
# Cix P1 SoC
BOARD_NAME="Orange Pi 6 Plus"
BOARDFAMILY="cix"
KERNEL_TARGET="current"
IMAGE_PARTITION_TABLE="gpt"
DISTRIB_TYPE_CURRENT="bookworm"
MODULES_CURRENT="armcb_isp_v4l2 btusb"
PLYMOUTH="no"
BUILD_MINIMAL="no"
REVISION="1.0.0"

View File

@ -1,59 +1,111 @@
anacron
apt-xapian-index
at-spi2-core
bluetooth
cifs-utils
cheese
clpeak
colord
command-not-found
cups
dbus-x11
dmz-cursor-theme
dconf-cli
dhcpcd
dhcpcd-base
dmz-cursor-theme
eject
foomatic-db-compressed-ppds
fcitx5
fcitx5-config-qt
fcitx5-chinese-addons
fcitx5-rime
fonts-noto-cjk
fonts-ubuntu
fonts-ubuntu-console
fonts-wqy-zenhei
foomatic-db-compressed-ppds
gdebi
gnome-bluetooth
gnome-calculator
gnome-control-center
gnome-disk-utility
gnome-desktop3-data
gnome-disk-utility
gnome-keyring
gnome-menus
gnome-screenshot
gnome-disk-utility
gnome-system-monitor
gnome-terminal
gnome-session
gnome-shell
gnome-system-monitor
gnome-terminal
gparted
grub2-common
grub-efi-arm64
gstreamer1.0-alsa
gstreamer1.0-libav
gstreamer1.0-packagekit
gstreamer1.0-plugins-base-apps
gstreamer1.0-pulseaudio
inputattach
keyutils
kmscube
libegl1-mesa-dev
libfdk-aac2
libfdk-aac-dev
libffi-dev
libgles2-mesa-dev
libnet1
libnfsidmap1
libnotify-bin
libpcap0.8
libpkgconf3
libpulsedsp
libpython3-dev
libqt6opengl6
libv4l2rds0
libvulkan-dev
libwayland-dev
lm-sensors
locales
mesa-utils
nautilus
netwox
nfs-common
pavucontrol
pipewalker
pkgconf
pkgconf-bin
pkg-config
profile-sync-daemon
pulseaudio
pulseaudio-module-bluetooth
python3.11-venv
python3-pip
rpcbind
software-properties-gtk
synaptic
system-config-printer
task-gnome-desktop
terminator
tracker
tracker-extract
tracker-miner-fs
tree
udhcpc
unrar
upower
v4l-utils
vsftpd
vulkan-tools
x11-apps
x11-session-utils
x11-utils
x11-xserver-utils
xarchiver
xbitmaps
xdg-user-dirs
xdg-user-dirs-gtk
xfce4-screenshooter
xfonts-base
xfonts-intl-chinese
xfonts-wqy
xserver-xorg
xserver-xorg-input-mouse
xterm
xwayland
zenity
lightdm
lightdm-settings

View File

@ -1,13 +1,13 @@
# overwrite stock lightdm greeter configuration
if [ -d /etc/orangepi/lightdm ]; then cp -R /etc/orangepi/lightdm /etc/; fi
if [ -f /etc/lightdm/slick-greeter.conf ]; then sed -i 's/orangepi-lightdm\/orangepi-default.png/warty-final-ubuntu.png/g' /etc/lightdm/slick-greeter.conf; fi
## overwrite stock lightdm greeter configuration
#if [ -d /etc/orangepi/lightdm ]; then cp -R /etc/orangepi/lightdm /etc/; fi
#if [ -f /etc/lightdm/slick-greeter.conf ]; then sed -i 's/orangepi-lightdm\/orangepi-default.png/warty-final-ubuntu.png/g' /etc/lightdm/slick-greeter.conf; fi
#
#if [ -f /etc/lightdm/lightdm.conf.d/11-orangepi.conf ]; then sed -i "s/user-session.*/user-session=gnome-wayland/" /etc/lightdm/lightdm.conf.d/11-orangepi.conf; fi
#
## Disable Pulseaudio timer scheduling which does not work with sndhdmi driver
#if [ -f /etc/pulse/default.pa ]; then sed "s/load-module module-udev-detect$/& tsched=0/g" -i /etc/pulse/default.pa; fi
if [ -f /etc/lightdm/lightdm.conf.d/11-orangepi.conf ]; then sed -i "s/user-session.*/user-session=gnome-wayland/" /etc/lightdm/lightdm.conf.d/11-orangepi.conf; fi
# Disable Pulseaudio timer scheduling which does not work with sndhdmi driver
if [ -f /etc/pulse/default.pa ]; then sed "s/load-module module-udev-detect$/& tsched=0/g" -i /etc/pulse/default.pa; fi
# set wallpapper to armbian
# set wallpapper to orangepi
keys=/etc/dconf/db/local.d/00-bg
profile=/etc/dconf/profile/user
@ -17,16 +17,26 @@ install -Dv /dev/null $profile
# set default shortcuts
echo "
[org/gnome/shell]
favorite-apps = ['terminator.desktop', 'org.gnome.Nautilus.desktop', 'google-chrome.desktop', 'thunderbird.desktop', 'code.desktop', 'Zoom.desktop']
favorite-apps = ['org.gnome.Nautilus.desktop', 'org.gnome.Terminal.desktop', 'chromium.desktop', 'org.gnome.Totem.desktop', 'gparted.desktop', 'org.gnome.Settings.desktop']
[org/gnome/settings-daemon/plugins/power]
sleep-inactive-ac-timeout='0'
sleep-inactive-ac-type='nothing'
sleep-inactive-battery-timeout='0'
sleep-inactive-battery-type='nothing'
power-button-action='interactive'
[org/gnome/desktop/session]
idle-delay=uint32 0
[org/gnome/desktop/background]
picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
picture-uri='file:///usr/share/backgrounds/orangepi/orangepi-default.png'
picture-options='zoom'
primary-color='#456789'
secondary-color='#FFFFFF'
[org/gnome/desktop/screensaver]
picture-uri='file:///usr/share/backgrounds/warty-final-ubuntu.png'
picture-uri='file:///usr/share/backgrounds/orangepi/orangepi-default.png'
picture-options='zoom'
primary-color='#456789'
secondary-color='#FFFFFF'" >> $keys

View File

@ -1,164 +1,164 @@
# install lightdm greeter
cp -R "${EXTER}"/packages/blobs/desktop/lightdm "${destination}"/etc/orangepi
#cp -R "${EXTER}"/packages/blobs/desktop/lightdm "${destination}"/etc/orangepi
# install default desktop settings
mkdir -p "${destination}"/etc/skel
cp -R "${EXTER}"/packages/blobs/desktop/skel/. "${destination}"/etc/skel
#mkdir -p "${destination}"/etc/skel
#cp -R "${EXTER}"/packages/blobs/desktop/skel/. "${destination}"/etc/skel
#install cinnamon desktop bar icons
mkdir -p "${destination}"/usr/share/icons/orangepi
cp "${EXTER}"/packages/blobs/desktop/desktop-icons/*.png "${destination}"/usr/share/icons/orangepi
#mkdir -p "${destination}"/usr/share/icons/orangepi
#cp "${EXTER}"/packages/blobs/desktop/desktop-icons/*.png "${destination}"/usr/share/icons/orangepi
# install wallpapers
mkdir -p "${destination}"/usr/share/backgrounds/orangepi/
cp "${EXTER}"/packages/blobs/desktop/desktop-wallpapers/*.png "${destination}"/usr/share/backgrounds/orangepi
#mkdir -p "${destination}"/usr/share/backgrounds/orangepi/
#cp "${EXTER}"/packages/blobs/desktop/desktop-wallpapers/*.png "${destination}"/usr/share/backgrounds/orangepi
# install wallpapers
mkdir -p "${destination}"/usr/share/backgrounds/orangepi-lightdm/
cp "${EXTER}"/packages/blobs/desktop/lightdm-wallpapers/*.png "${destination}"/usr/share/backgrounds/orangepi-lightdm
#mkdir -p "${destination}"/usr/share/backgrounds/orangepi-lightdm/
#cp "${EXTER}"/packages/blobs/desktop/lightdm-wallpapers/*.png "${destination}"/usr/share/backgrounds/orangepi-lightdm
# install logo for login screen
mkdir -p "${destination}"/usr/share/pixmaps/orangepi
cp "${EXTER}"/packages/blobs/desktop/icons/orangepi.png "${destination}"/usr/share/pixmaps/orangepi
#generate wallpaper list for background changer
mkdir -p "${destination}"/usr/share/gnome-background-properties
cat <<EOF > "${destination}"/usr/share/gnome-background-properties/orangepi.xml
<?xml version="1.0"?>
<!DOCTYPE wallpapers SYSTEM "gnome-wp-list.dtd">
<wallpapers>
<wallpaper deleted="false">
<name>OrangePi black-pyscho</name>
<filename>/usr/share/backgrounds/orangepi/orangepi-default.png</filename>
<options>zoom</options>
<pcolor>#ffffff</pcolor>
<scolor>#000000</scolor>
</wallpaper>
<wallpaper deleted="false">
<name>OrangePi bluie-circle</name>
<filename>/usr/share/backgrounds/orangepi/orangepi-default.png</filename>
<options>zoom</options>
<pcolor>#ffffff</pcolor>
<scolor>#000000</scolor>
</wallpaper>
<wallpaper deleted="false">
<name>OrangePi blue-monday</name>
<filename>/usr/share/backgrounds/orangepi/orangepi-default.png</filename>
<options>zoom</options>
<pcolor>#ffffff</pcolor>
<scolor>#000000</scolor>
</wallpaper>
<wallpaper deleted="false">
<name>OrangePi blue-penguin</name>
<filename>/usr/share/backgrounds/orangepi/orangepi-default.png</filename>
<options>zoom</options>
<pcolor>#ffffff</pcolor>
<scolor>#000000</scolor>
</wallpaper>
<wallpaper deleted="false">
<name>OrangePi gray-resultado</name>
<filename>/usr/share/backgrounds/orangepi/orangepi-default.png</filename>
<options>zoom</options>
<pcolor>#ffffff</pcolor>
<scolor>#000000</scolor>
</wallpaper>
<wallpaper deleted="false">
<name>OrangePi green-penguin</name>
<filename>/usr/share/backgrounds/orangepi/orangepi-default.png</filename>
<options>zoom</options>
<pcolor>#ffffff</pcolor>
<scolor>#000000</scolor>
</wallpaper>
<wallpaper deleted="false">
<name>OrangePi green-retro</name>
<filename>/usr/share/backgrounds/orangepi/orangepi-default.png</filename>
<options>zoom</options>
<pcolor>#ffffff</pcolor>
<scolor>#000000</scolor>
</wallpaper>
<wallpaper deleted="false">
<name>OrangePi green-wall-penguin</name>
<filename>/usr/share/backgrounds/orangepi/orangepi-default.png</filename>
<options>zoom</options>
<pcolor>#ffffff</pcolor>
<scolor>#000000</scolor>
</wallpaper>
<wallpaper deleted="false">
<name>OrangePi 4k-neglated</name>
<filename>/usr/share/backgrounds/orangepi/orangepi-default.png</filename>
<options>zoom</options>
<pcolor>#ffffff</pcolor>
<scolor>#000000</scolor>
</wallpaper>
<wallpaper deleted="false">
<name>OrangePi neon-gray-penguin</name>
<filename>/usr/share/backgrounds/orangepi/orangepi-default.png</filename>
<options>zoom</options>
<pcolor>#ffffff</pcolor>
<scolor>#000000</scolor>
</wallpaper>
<wallpaper deleted="false">
<name>OrangePi plastic-love</name>
<filename>/usr/share/backgrounds/orangepi/orangepi-default.png</filename>
<options>zoom</options>
<pcolor>#ffffff</pcolor>
<scolor>#000000</scolor>
</wallpaper>
<wallpaper deleted="false">
<name>OrangePi purple-penguine</name>
<filename>/usr/share/backgrounds/orangepi/orangepi-default.png</filename>
<options>zoom</options>
<pcolor>#ffffff</pcolor>
<scolor>#000000</scolor>
</wallpaper>
<wallpaper deleted="false">
<name>OrangePi purplepunk-resultado</name>
<filename>/usr/share/backgrounds/orangepi/orangepi-default.png</filename>
<options>zoom</options>
<pcolor>#ffffff</pcolor>
<scolor>#000000</scolor>
</wallpaper>
<wallpaper deleted="false">
<name>OrangePi red-penguin-dark</name>
<filename>/usr/share/backgrounds/orangepi/orangepi-default.png</filename>
<options>zoom</options>
<pcolor>#ffffff</pcolor>
<scolor>#000000</scolor>
</wallpaper>
<wallpaper deleted="false">
<name>OrangePi red-penguin</name>
<filename>/usr/share/backgrounds/orangepi/orangepi-default.png</filename>
<options>zoom</options>
<pcolor>#ffffff</pcolor>
<scolor>#000000</scolor>
</wallpaper>
<wallpaper deleted="false">
<name>OrangePi light</name>
<filename>/usr/share/backgrounds/orangepi/orangepi-default.png</filename>
<options>zoom</options>
<pcolor>#ffffff</pcolor>
<scolor>#000000</scolor>
</wallpaper>
<wallpaper deleted="false">
<name>OrangePi dark</name>
<filename>/usr/share/backgrounds/orangepi/orangepi-default.png</filename>
<options>zoom</options>
<pcolor>#ffffff</pcolor>
<scolor>#000000</scolor>
</wallpaper>
<wallpaper deleted="false">
<name>OrangePi uc</name>
<filename>/usr/share/backgrounds/orangepi/orangepi-default.png</filename>
<options>zoom</options>
<pcolor>#ffffff</pcolor>
<scolor>#000000</scolor>
</wallpaper>
<wallpaper deleted="false">
<name>OrangePi clear</name>
<filename>/usr/share/backgrounds/orangepi/orangepi-default.png</filename>
<options>zoom</options>
<pcolor>#ffffff</pcolor>
<scolor>#000000</scolor>
</wallpaper>
</wallpapers>
EOF
#mkdir -p "${destination}"/usr/share/gnome-background-properties
#cat <<EOF > "${destination}"/usr/share/gnome-background-properties/orangepi.xml
#<?xml version="1.0"?>
#<!DOCTYPE wallpapers SYSTEM "gnome-wp-list.dtd">
#<wallpapers>
# <wallpaper deleted="false">
# <name>OrangePi black-pyscho</name>
# <filename>/usr/share/backgrounds/orangepi/orangepi-default.png</filename>
# <options>zoom</options>
# <pcolor>#ffffff</pcolor>
# <scolor>#000000</scolor>
# </wallpaper>
# <wallpaper deleted="false">
# <name>OrangePi bluie-circle</name>
# <filename>/usr/share/backgrounds/orangepi/orangepi-default.png</filename>
# <options>zoom</options>
# <pcolor>#ffffff</pcolor>
# <scolor>#000000</scolor>
# </wallpaper>
# <wallpaper deleted="false">
# <name>OrangePi blue-monday</name>
# <filename>/usr/share/backgrounds/orangepi/orangepi-default.png</filename>
# <options>zoom</options>
# <pcolor>#ffffff</pcolor>
# <scolor>#000000</scolor>
# </wallpaper>
# <wallpaper deleted="false">
# <name>OrangePi blue-penguin</name>
# <filename>/usr/share/backgrounds/orangepi/orangepi-default.png</filename>
# <options>zoom</options>
# <pcolor>#ffffff</pcolor>
# <scolor>#000000</scolor>
# </wallpaper>
# <wallpaper deleted="false">
# <name>OrangePi gray-resultado</name>
# <filename>/usr/share/backgrounds/orangepi/orangepi-default.png</filename>
# <options>zoom</options>
# <pcolor>#ffffff</pcolor>
# <scolor>#000000</scolor>
# </wallpaper>
# <wallpaper deleted="false">
# <name>OrangePi green-penguin</name>
# <filename>/usr/share/backgrounds/orangepi/orangepi-default.png</filename>
# <options>zoom</options>
# <pcolor>#ffffff</pcolor>
# <scolor>#000000</scolor>
# </wallpaper>
# <wallpaper deleted="false">
# <name>OrangePi green-retro</name>
# <filename>/usr/share/backgrounds/orangepi/orangepi-default.png</filename>
# <options>zoom</options>
# <pcolor>#ffffff</pcolor>
# <scolor>#000000</scolor>
# </wallpaper>
# <wallpaper deleted="false">
# <name>OrangePi green-wall-penguin</name>
# <filename>/usr/share/backgrounds/orangepi/orangepi-default.png</filename>
# <options>zoom</options>
# <pcolor>#ffffff</pcolor>
# <scolor>#000000</scolor>
# </wallpaper>
# <wallpaper deleted="false">
# <name>OrangePi 4k-neglated</name>
# <filename>/usr/share/backgrounds/orangepi/orangepi-default.png</filename>
# <options>zoom</options>
# <pcolor>#ffffff</pcolor>
# <scolor>#000000</scolor>
# </wallpaper>
# <wallpaper deleted="false">
# <name>OrangePi neon-gray-penguin</name>
# <filename>/usr/share/backgrounds/orangepi/orangepi-default.png</filename>
# <options>zoom</options>
# <pcolor>#ffffff</pcolor>
# <scolor>#000000</scolor>
# </wallpaper>
# <wallpaper deleted="false">
# <name>OrangePi plastic-love</name>
# <filename>/usr/share/backgrounds/orangepi/orangepi-default.png</filename>
# <options>zoom</options>
# <pcolor>#ffffff</pcolor>
# <scolor>#000000</scolor>
# </wallpaper>
# <wallpaper deleted="false">
# <name>OrangePi purple-penguine</name>
# <filename>/usr/share/backgrounds/orangepi/orangepi-default.png</filename>
# <options>zoom</options>
# <pcolor>#ffffff</pcolor>
# <scolor>#000000</scolor>
# </wallpaper>
# <wallpaper deleted="false">
# <name>OrangePi purplepunk-resultado</name>
# <filename>/usr/share/backgrounds/orangepi/orangepi-default.png</filename>
# <options>zoom</options>
# <pcolor>#ffffff</pcolor>
# <scolor>#000000</scolor>
# </wallpaper>
# <wallpaper deleted="false">
# <name>OrangePi red-penguin-dark</name>
# <filename>/usr/share/backgrounds/orangepi/orangepi-default.png</filename>
# <options>zoom</options>
# <pcolor>#ffffff</pcolor>
# <scolor>#000000</scolor>
# </wallpaper>
# <wallpaper deleted="false">
# <name>OrangePi red-penguin</name>
# <filename>/usr/share/backgrounds/orangepi/orangepi-default.png</filename>
# <options>zoom</options>
# <pcolor>#ffffff</pcolor>
# <scolor>#000000</scolor>
# </wallpaper>
# <wallpaper deleted="false">
# <name>OrangePi light</name>
# <filename>/usr/share/backgrounds/orangepi/orangepi-default.png</filename>
# <options>zoom</options>
# <pcolor>#ffffff</pcolor>
# <scolor>#000000</scolor>
# </wallpaper>
# <wallpaper deleted="false">
# <name>OrangePi dark</name>
# <filename>/usr/share/backgrounds/orangepi/orangepi-default.png</filename>
# <options>zoom</options>
# <pcolor>#ffffff</pcolor>
# <scolor>#000000</scolor>
# </wallpaper>
# <wallpaper deleted="false">
# <name>OrangePi uc</name>
# <filename>/usr/share/backgrounds/orangepi/orangepi-default.png</filename>
# <options>zoom</options>
# <pcolor>#ffffff</pcolor>
# <scolor>#000000</scolor>
# </wallpaper>
# <wallpaper deleted="false">
# <name>OrangePi clear</name>
# <filename>/usr/share/backgrounds/orangepi/orangepi-default.png</filename>
# <options>zoom</options>
# <pcolor>#ffffff</pcolor>
# <scolor>#000000</scolor>
# </wallpaper>
#</wallpapers>
#EOF

View File

@ -56,3 +56,4 @@ xfonts-base
xserver-xorg
xwayland
zenity
tree

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -14,6 +14,7 @@ ARCH=arm64
KERNEL_IMAGE_TYPE=Image
CAN_BUILD_STRETCH=yes
GIT_SERVER="https://github.com/orangepi-xunlong"
[[ -z $GITEE_SERVER ]] && GITEE_SERVER=no
[[ -z $INITRD_ARCH ]] && INITRD_ARCH=arm64

View File

@ -0,0 +1,485 @@
ARCH="arm64"
LINUXFAMILY="cix"
BOOTCONFIG="none"
ATF_COMPILE="no"
EXTERNAL_NEW="none"
SERIALCON="ttyAMA2"
KERNEL_COMPILER='aarch64-none-linux-gnu-'
case $BRANCH in
current)
if [[ $GITEE_SERVER == yes ]]; then
KERNELSOURCE="https://gitee.com/orangepi-xunlong/orange-pi-6.1-cix.git"
fi
KERNELBRANCH='branch:orange-pi-6.1-cix'
KERNELPATCHDIR='cix-current'
LINUXCONFIG="linux-cix-p1-current"
KERNEL_USE_GCC='> 12.0'
;;
next)
KERNELBRANCH='branch:orange-pi-6.6-cix'
KERNELPATCHDIR='cix-next'
LINUXCONFIG="linux-cix-p1-next"
KERNEL_USE_GCC='> 12.0'
;;
esac
family_tweaks_bsp() {
:
}
function build_cix_prideb() {
local PATH_OUT_PRIVATE_DEB_PACKAGES=${EXTER}/cache/sources/component_cix-${BRANCH}/cix_proprietary/cix_proprietary-debs
local amvx_module=${EXTER}/cache/sources/component_cix-${BRANCH}/cix_opensource/vpu/vpu_driver/bin/aarch64-none-linux-gnu/amvx.ko
local linux_version=$(modinfo ${amvx_module} | awk -F': ' '/vermagic/{split($2,a," "); print a[1]}')
#npu-noe-umd
pkg_Name="cix-noe-umd"
create_cix_deb "$pkg_Name"
#isp-umd
pkg_Name="cix-isp-umd"
create_cix_deb "$pkg_Name"
#gpu
pkg_Name="cix-gpu-umd"
if [[ ! -e $PATH_OUT_PRIVATE_DEB_PACKAGES/cix-gpu-umd/etc/systemd/system ]]; then
mkdir -p $PATH_OUT_PRIVATE_DEB_PACKAGES/cix-gpu-umd/etc/systemd/system
fi
if [[ ! -e $PATH_OUT_PRIVATE_DEB_PACKAGES/cix-gpu-umd/usr/bin ]]; then
mkdir -p $PATH_OUT_PRIVATE_DEB_PACKAGES/cix-gpu-umd/usr/bin
fi
cat > $PATH_OUT_PRIVATE_DEB_PACKAGES/cix-gpu-umd/etc/systemd/system/load-modules.service <<- EOF
[Unit]
Description=Load custom kernel modules
[Service]
Type=oneshot
ExecStart=/usr/bin/load-modules.sh
RemainAfterExit=yes
[Install]
WantedBy=sysinit.target
EOF
cat > $PATH_OUT_PRIVATE_DEB_PACKAGES/cix-gpu-umd/usr/bin/load-modules.sh <<- EOF
#!/bin/bash
insmod /lib/modules/$linux_version/extra/protected_memory_allocator.ko
insmod /lib/modules/$linux_version/extra/memory_group_manager.ko
insmod /lib/modules/$linux_version/extra/mali_kbase.ko
#insmod /lib/modules/$linux_version/extra/rtl_btusb.ko
#insmod /lib/modules/$linux_version/extra/rtl_wlan.ko
insmod /lib/modules/$linux_version/extra/aipu.ko
insmod /lib/modules/$linux_version/extra/amvx.ko
insmod /lib/modules/$linux_version/kernel/drivers/hid/uhid.ko
#insmod /lib/modules/$linux_version/kernel/net/netfilter/x_tables.ko
#insmod /lib/modules/$linux_version/kernel/net/ipv4/netfilter/ip_tables.ko
#insmod /lib/modules/$linux_version/kernel/net/ipv4/netfilter/iptable_nat.ko
#insmod /lib/modules/$linux_version/kernel/net/ipv4/netfilter/nf_defrag_ipv4.ko
#insmod /lib/modules/$linux_version/kernel/net/ipv6/netfilter/nf_defrag_ipv6.ko
#insmod /lib/modules/$linux_version/kernel/lib/libcrc32c.ko
#insmod /lib/modules/$linux_version/kernel/net/netfilter/nf_conntrack.ko
#insmod /lib/modules/$linux_version/kernel/net/netfilter/nf_nat.ko
#insmod /lib/modules/$linux_version/kernel/net/netfilter/xt_MASQUERADE.ko
ln -s /dev/dma_heap/reserved /dev/dma_heap/linux,cma
if [[ ! -e /etc/machine-id ]]; then
dbus-uuidgen > /etc/machine-id
ln -sf /etc/machine-id /var/lib/dbus/machine-id
fi
EOF
cat >> $PATH_OUT_PRIVATE_DEB_PACKAGES/cix-gpu-umd/usr/bin/load-modules.sh <<- 'EOF'
video_devices=($(ls /dev/video* 2>/dev/null | sort -V))
if [ ${#video_devices[@]} -eq 1 ]; then
ln -s "${video_devices[0]}" /dev/video-cixdec0
elif [ ${#video_devices[@]} -eq 0 ]; then
echo "Not found /dev/video*"
else
max_device="${video_devices[-2]}"
ln -s "$max_device" /dev/video-cixdec0
fi
EOF
sudo chmod a+x $PATH_OUT_PRIVATE_DEB_PACKAGES/cix-gpu-umd/usr/bin/load-modules.sh
if [[ ! -e $PATH_OUT_PRIVATE_DEB_PACKAGES/cix-gpu-umd/DEBIAN ]]; then
mkdir -p $PATH_OUT_PRIVATE_DEB_PACKAGES/cix-gpu-umd/DEBIAN
fi
cat > $PATH_OUT_PRIVATE_DEB_PACKAGES/cix-gpu-umd/DEBIAN/postinst <<- EOF
#!/bin/sh
set -e
# Enable the service to start on boot
systemctl enable load-modules.service || true
exit 0
EOF
cat > $PATH_OUT_PRIVATE_DEB_PACKAGES/cix-gpu-umd/DEBIAN/triggers <<- EOF
activate-noawait ldconfig
EOF
cat > $PATH_OUT_PRIVATE_DEB_PACKAGES/cix-gpu-umd/DEBIAN/shlibs <<- EOF
libgbm 1 cix-gpu-umd (>= 1.0.0-1)
EOF
sudo chmod a+x $PATH_OUT_PRIVATE_DEB_PACKAGES/cix-gpu-umd/DEBIAN/postinst
rm -rf $PATH_OUT_PRIVATE_DEB_PACKAGES/cix-gpu-umd/usr/share/cix
create_cix_deb "$pkg_Name"
#dsp
pkg_Name="cix-audio-dsp"
create_cix_deb "$pkg_Name"
}
function create_cix_deb() {
local pkg_Name="$1"
local PATH_CHANGELOGS=${EXTER}/cache/sources/component_cix-${BRANCH}/changelogs
local PRIVATE_DEB_PACKAGES=("cix-dpu-ddk" "cix-npu-umd" "cix-isp-umd" "cix-gpu-umd" "cix-audio-dsp" "cix-hdcp2" "cix-noe-umd")
local CIX_DEB_VERSION="0.01-1"
display_alert "Building cix deb" "${pkg_Name}" "info"
CHANGELOG="$PATH_CHANGELOGS/changelog.${pkg_Name}"
if [[ ! -f "$CHANGELOG" ]]; then
exit_with_error "changelog not found" "${CHANGELOG}"
fi
VERSION=$(grep -m 1 -oP '^\S+\s+\(\K[^)]+(?=\))' "$CHANGELOG")
if [[ ! -n "$VERSION" ]]; then
display_alert "get Version failed from: ${CHANGELOG}, will use default version" "1.0.0" "info"
sleep 10
VERSION="1.0.0"
fi
local pkg_Ver=$VERSION
local pkg_private=false
for str in "${PRIVATE_DEB_PACKAGES[@]}"; do
if [[ "$str" == "$pkg_Name" ]]; then
rm -rf ${PATH_OUT_DEB_PACKAGES}/$pkg_Name
cp -r ${PATH_OUT_PRIVATE_DEB_PACKAGES}/${pkg_Name} ${PATH_OUT_DEB_PACKAGES}/$pkg_Name
break
fi
done
local build_deb_dir="${PATH_OUT_DEB_PACKAGES}/${pkg_Name}"
case "$pkg_Name" in
("cix-mesa")
CONTROL_CONTENT="Package: ${pkg_Name}
Version: ${pkg_Ver}
Architecture: arm64
Maintainer: Cix OS team
Depends: libc6 (>= 2.34)
Provides: libgl1-mesa-dri, libgl1, libglapi-mesa, libgl-dev
Replaces: libgl1-mesa-dri, libgl1, libglapi-mesa, libgl-dev
Section: utils
Priority: optional
Description: $pkg_Name package"
;;
("cix-xserver")
CONTROL_CONTENT="Package: ${pkg_Name}
Version: ${pkg_Ver}
Architecture: arm64
Maintainer: Cix OS team
Depends: libc6 (>= 2.34)
Provides: xwayland
Replaces: xwayland
Section: utils
Priority: optional
Description: $pkg_Name package"
;;
("cix-gpu-umd")
CONTROL_CONTENT="Package: ${pkg_Name}
Version: ${pkg_Ver}
Architecture: arm64
Maintainer: Cix OS team
Depends: libc6 (>= 2.34)
Provides: libwayland-dev, libwayland-egl1, libgles2, ocl-icd-libopencl1, libgbm1, libegl-dev, libgles1, libegl1, libgles1, libgles-dev, ocl-icd-opencl-dev, libgbm-dev
Replaces: libwayland-dev, libwayland-egl1, libgles2, ocl-icd-libopencl1, libgbm1, libegl-dev, libgles1, libegl1, libgles1, libgles-dev, ocl-icd-opencl-dev, libgbm-dev
Section: utils
Priority: optional
Description: $pkg_Name package"
;;
("cix-gstreamer")
CONTROL_CONTENT="Package: ${pkg_Name}
Version: ${pkg_Ver}
Architecture: arm64
Maintainer: Cix OS team
Depends: libc6 (>= 2.34), libglib2.0-0, libglib2.0-bin, libx11-6, libgdk-pixbuf-2.0-0, zlib1g, libasound2, libogg0, libopus0, libxext6, libxi6, libxfixes3, libxdamage1, libxml2, libnettle8, libcairo2, libjpeg62-turbo, libpng16-16, libsoup-3.0-0, libva-drm2, libva-glx2, libva-wayland2, libva-x11-2, libva2, libdrm2, libdrm-radeon1, libdrm-nouveau2, libdrm-amdgpu1, libdrm-freedreno1, libdrm-tegra0, libdrm-etnaviv1, libvulkan1, libxcb1, libxkbcommon0, libwayland-client0, libwayland-server0, libwayland-cursor0, libwayland-egl1, libwayland-bin, libnice10, libwebp7, libwebpmux3, libwebpdemux2, libjson-glib-1.0-0, libpango-1.0-0, libpangocairo-1.0-0, libpangoft2-1.0-0, libpangoxft-1.0-0
Section: utils
Priority: optional
Description: $pkg_Name package"
;;
("cix-npu-onnxruntime")
CONTROL_CONTENT="Package: ${pkg_Name}
Version: ${pkg_Ver}
Architecture: arm64
Maintainer: Cix OS team
Depends: python3-pip
Section: utils
Priority: optional
Description: $pkg_Name package"
;;
(*)
CONTROL_CONTENT="Package: ${pkg_Name}
Version: ${pkg_Ver}
Architecture: arm64
Maintainer: Cix OS team
Depends: libc6 (>= 2.34)
Section: utils
Priority: optional
Description: $pkg_Name package"
;;
esac
if [[ -e $build_deb_dir/usr/share/doc/$pkg_Name ]]; then
if [[ -e $build_deb_dir/usr/share/doc/$pkg_Name/changelog.Debian.gz ]]; then
rm -rf $build_deb_dir/usr/share/doc/$pkg_Name/changelog.Debian.gz
fi
else
mkdir -p $build_deb_dir/usr/share/doc/$pkg_Name
fi
cp $CHANGELOG $build_deb_dir/usr/share/doc/$pkg_Name/changelog.Debian
gzip $build_deb_dir/usr/share/doc/$pkg_Name/changelog.Debian
if [[ -e $PATH_OUT_PRIVATE_DEB_PACKAGES/copyright/$pkg_Name ]]; then
mkdir -p $build_deb_dir/usr/share/doc/$pkg_Name
cp $PATH_OUT_PRIVATE_DEB_PACKAGES/copyright/$pkg_Name/copyright $build_deb_dir/usr/share/doc/$pkg_Name
fi
if [[ -e "$build_deb_dir" ]]; then
if [[ ! -e "$build_deb_dir/DEBIAN/control" ]]; then
mkdir -p "$build_deb_dir/DEBIAN"
echo "${CONTROL_CONTENT}" > "$build_deb_dir/DEBIAN/control"
else
sed -i "s/^Version: .*/Version: $pkg_Ver/" "$build_deb_dir/DEBIAN/control"
fi
chmod -R 755 "$build_deb_dir"
chmod -R g-s "$build_deb_dir"
rm -f ${PATH_OUT_DEB_PACKAGES}/${pkg_Name}_*.deb
dpkg-deb -b --root-owner-group "$build_deb_dir" "${PATH_OUT_DEB_PACKAGES}/${pkg_Name}_${pkg_Ver}_arm64.deb" > /dev/null
rm -rf ${PATH_OUT_DEB_PACKAGES}/${pkg_Name}
else
display_alert "deb path does not exist" "${build_deb_dir}" "info"
fi
}
family_tweaks_kernel () {
cix_open_src=${EXTER}/cache/sources/component_cix-${BRANCH}/cix_opensource
PATH_OUT_PRIVATE_DEB_PACKAGES=${EXTER}/cache/sources/component_cix-${BRANCH}/cix_proprietary/cix_proprietary-debs
PATH_OUT_DEB_PACKAGES=${DEB_STORAGE}/cix_debs-${BRANCH}
export ARCH=arm64
export KDIR=${SRC}/kernel/${KERNELBRANCH#branch:}
export CROSS_COMPILE=${toolchain}/${KERNEL_COMPILER}
[[ -d ${PATH_OUT_DEB_PACKAGES} ]] && rm -r ${PATH_OUT_DEB_PACKAGES}
mkdir -p ${PATH_OUT_DEB_PACKAGES}
cd ${cix_open_src}/vpu/vpu_driver/
bash ./clean.sh > /dev/null
scons $CTHREADS target=linux > /dev/null
# build deb package
pkg_Name="cix-vpu-driver"
linux_version=$(strings ${LINUXSOURCEDIR}/arch/arm64/boot/Image | grep "Linux version" | cut -d' ' -f3 | head -1)
build_deb_dir=${PATH_OUT_DEB_PACKAGES}/${pkg_Name}
rm -rf ${build_deb_dir}
install_dir=${build_deb_dir}/usr/share/cix/bin
install_dir_kernel_modules=${build_deb_dir}/lib/modules/${linux_version}/extra
install_dir_include=${build_deb_dir}/usr/share/cix/include
install_dir_firmware="${build_deb_dir}/lib/firmware"
mkdir -p ${install_dir}
mkdir -p ${install_dir_kernel_modules}
mkdir -p ${install_dir_include}
mkdir -p ${install_dir_firmware}
if [ -f bin/aarch64-none-linux-gnu/amvx.ko ]; then
cp bin/aarch64-none-linux-gnu/amvx.ko ${install_dir_kernel_modules}
cp include/aarch64-none-linux-gnu/mvx-v4l2-controls.h ${install_dir_include}
if [[ -d "${PATH_OUT_PRIVATE_DEB_PACKAGES}/cix-vpu-umd/usr/lib/firmware" ]]; then
cp -fp ${PATH_OUT_PRIVATE_DEB_PACKAGES}/cix-vpu-umd/usr/lib/firmware/* ${install_dir_firmware}/
fi
create_cix_deb "${pkg_Name}"
else
exit_with_error "vpu: amvx.ko module not exist"
fi
# finish build deb package
cd - > /dev/null
export COMPASS_DRV_BTENVAR_ARCH=${ARCH}
export COMPASS_DRV_BTENVAR_KMD_DIR=driver
export COMPASS_DRV_BTENVAR_KMD_VERSION=5.8.0
export COMPASS_DRV_BTENVAR_KPATH=${KDIR}
export BUILD_AIPU_VERSION_KMD=BUILD_ZHOUYI_V3
export BUILD_TARGET_PLATFORM_KMD=BUILD_PLATFORM_SKY1
export BUILD_NPU_DEVFREQ=y
cd ${cix_open_src}/npu/npu_driver
cp -f ${COMPASS_DRV_BTENVAR_KMD_DIR}/armchina-npu/include/armchina_aipu.h ${KDIR}/include/uapi/misc
make $CTHREADS -C ${COMPASS_DRV_BTENVAR_KMD_DIR} ARCH=${COMPASS_DRV_BTENVAR_ARCH} CROSS_COMPILE=${CROSS_COMPILE} clean > /dev/null
make $CTHREADS -C ${COMPASS_DRV_BTENVAR_KMD_DIR} ARCH=${COMPASS_DRV_BTENVAR_ARCH} CROSS_COMPILE=${CROSS_COMPILE} > /dev/null
pkg_Name="cix-npu-driver"
if [ -f ${COMPASS_DRV_BTENVAR_KMD_DIR}/aipu.ko ]; then
# build deb package
build_deb_dir=${PATH_OUT_DEB_PACKAGES}/${pkg_Name}
rm -rf ${build_deb_dir}
install_dir=${build_deb_dir}/lib/modules/${linux_version}/extra
mkdir -p ${install_dir}
cp ${COMPASS_DRV_BTENVAR_KMD_DIR}/aipu.ko ${install_dir}
create_cix_deb "${pkg_Name}"
rm -f $PATH_LINUX/include/uapi/misc/armchina_aipu.h
# finish build deb package
else
exit_with_error "npu: aipu.ko module not exist"
fi
cd - > /dev/null
export CONFIG_MALI_BASE_MODULES=y
export CONFIG_MALI_MEMORY_GROUP_MANAGER=y
export CONFIG_MALI_PROTECTED_MEMORY_ALLOCATOR=y
export CONFIG_MALI_PLATFORM_NAME="sky1"
export CONFIG_MALI_CSF_SUPPORT=y
export CONFIG_MALI_CIX_POWER_MODEL=y
cd ${cix_open_src}/gpu
bash clean.sh > /dev/null
gpu_driver_dir=${cix_open_src}/gpu/gpu_kernel/drivers
if [[ "${DOCKER_MODE}" == "docker" ]]; then
ARCH=arm64 make KCFLAGS="-D__ANDROID_COMMON_KERNEL__ -DUSING_DOCKER_MODE" $CTHREADS -C ${gpu_driver_dir}/base/arm/ > /dev/null
ARCH=arm64 make KCFLAGS="-D__ANDROID_COMMON_KERNEL__ -DUSING_DOCKER_MODE" $CTHREADS -C ${gpu_driver_dir}/gpu/arm/ > /dev/null
else
ARCH=arm64 make $CTHREADS -C ${gpu_driver_dir}/base/arm/ > /dev/null
ARCH=arm64 make $CTHREADS -C ${gpu_driver_dir}/gpu/arm/ > /dev/null
fi
# build deb package
pkg_Name="cix-gpu-driver"
build_deb_dir=${PATH_OUT_DEB_PACKAGES}/${pkg_Name}
rm -rf ${build_deb_dir}
install_dir=${build_deb_dir}/lib/modules/${linux_version}/extra
mkdir -p ${install_dir}
if [ -f ${gpu_driver_dir}/gpu/arm/midgard/mali_kbase.ko ]; then
cp ${gpu_driver_dir}/base/arm/memory_group_manager/memory_group_manager.ko ${install_dir}
cp ${gpu_driver_dir}/base/arm/protected_memory_allocator/protected_memory_allocator.ko ${install_dir}
cp ${gpu_driver_dir}/gpu/arm/midgard/mali_kbase.ko ${install_dir}
create_cix_deb "${pkg_Name}"
else
exit_with_error "gpu: amxv.ko module not exist"
fi
# finish build deb package
cd - > /dev/null
local DRV_DIR=${cix_open_src}/isp/isp_driver
MODULE=armcb_isp_v4l2
cd "${DRV_DIR}"
make ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} $CTHREADS PATH_ROOT=${KDIR} clean > /dev/null
make ARCH=${ARCH} CROSS_COMPILE=${CROSS_COMPILE} $CTHREADS PATH_ROOT=${KDIR} build > /dev/null
if [ -f ${DRV_DIR}/${MODULE}.ko ]; then
# build deb package
pkg_Name="cix-isp-driver-v4l2"
build_deb_dir=${PATH_OUT_DEB_PACKAGES}/${pkg_Name}
rm -rf ${build_deb_dir}
install_dir=${build_deb_dir}/lib/modules/${linux_version}/extra
mkdir -p ${install_dir}
cp ${DRV_DIR}/${MODULE}.ko ${install_dir}
create_cix_deb "${pkg_Name}"
else
exit_with_error "${MODULE}.ko module not exist"
fi
cd - > /dev/null
build_cix_prideb
mkdir -p ${SRC}/output/cix/ > /dev/null 2>&1
cp ${KDIR}/arch/arm64/boot/Image ${SRC}/output/cix/
cp ${KDIR}/arch/arm64/boot/dts/cix/sky1-*dtb ${SRC}/output/cix/
rm ${SRC}/output/debs/linux-dtb*
}
install_cix_debs() {
[[ $BUILD_DESKTOP != yes ]] && return
[[ ${RELEASE} == noble ]] && return
display_alert "Installing" "Cix debs" "info"
local POOL_PATH=${EXTER}/cache/sources/component_cix-${BRANCH}/cix_proprietary/cix_proprietary-debs
local DEB_PATH=${SDCARD}/root/debs
mkdir -p ${DEB_PATH}
cp -fp $POOL_PATH/pool/main/*/*/*.deb ${DEB_PATH}/
cp -fp $POOL_PATH/pool/main/*/*.deb ${DEB_PATH}/
cp ${EXTER}/cache/sources/component_cix-${BRANCH}/debs/*.deb ${DEB_PATH}/
run_on_sdcard "apt-get -y --allow-downgrades install /root/debs/*.deb"
run_on_sdcard "systemctl mask swap.target"
run_on_sdcard "systemctl enable cix_resume.service"
run_on_sdcard "systemctl enable cix_resume_prepare.service"
rm ${DEB_PATH} -rf
dpkg_install_deb_chroot "${EXTER}/cache/sources/component_cix-${BRANCH}/debs_manual/cix-gnome-core-1.43_arm64.deb"
dpkg_install_deb_chroot "${EXTER}/cache/sources/component_cix-${BRANCH}/debs_manual/yolox-demo-v4l2_2.0.0_arm64.deb"
#dpkg_install_deb_chroot "${EXTER}/cache/sources/component_cix-${BRANCH}/debs_manual/systemd_252.26-1~deb12u2_arm64.deb"
run_on_sdcard "EBIAN_FRONTEND=noninteractive apt-get -yqq install pulseaudio"
run_on_sdcard "EBIAN_FRONTEND=noninteractive apt-get -yqq remove wireplumber"
run_on_sdcard "EBIAN_FRONTEND=noninteractive apt-get -yqq remove pipewire-pulse"
rm $SDCARD/root/*.deb >/dev/null 2>&1
}
family_tweaks() {
install_balenaEtcher
#install_wiringop
if [[ -L "${SDCARD}/usr/lib/policykit-1/polkit-agent-helper-1" ]]; then
chmod 5755 ${SDCARD}/usr/lib/policykit-1/polkit-agent-helper-1
fi
cp ${DEB_STORAGE}/cix_debs-${BRANCH} ${SDCARD}/root/ -rf
run_on_sdcard "apt-get -y --allow-downgrades install /root/cix_debs-${BRANCH}/*.deb"
amvx_module=${EXTER}/cache/sources/component_cix-${BRANCH}/cix_opensource/vpu/vpu_driver/bin/aarch64-none-linux-gnu/amvx.ko
linux_version=$(modinfo ${amvx_module} | awk -F': ' '/vermagic/{split($2,a," "); print a[1]}')
run_on_sdcard "depmod -a $linux_version/"
rm -rf ${SDCARD}/root/cix_debs-${BRANCH}
rm -rf ${SDCARD}/usr/local/test.mp4
touch ${SDCARD}/root/.Xauthority
mv ${SDCARD}/usr/share/cix/bin/spidev_test ${SDCARD}/usr/bin/ >/dev/null 2>&1
rm ${SDCARD}/usr/share/cix/bin/isp_app >/dev/null 2>&1
sed -i 's/^ENABLED=true$/ENABLED=false/' ${SDCARD}/etc/default/orangepi-zram-config
run_on_sdcard "systemctl --no-reload enable getty@tty1.service >/dev/null 2>&1"
run_on_sdcard "systemctl --no-reload enable isp-daemon.service >/dev/null 2>&1"
if [[ ${RELEASE} == bookworm ]]; then
run_on_sdcard "systemctl mask ssh.socket" >/dev/null 2>&1
fi
rsync -a --chown=root:root "${EXTER}"/packages/bsp/overlays_cix/* ${SDCARD}/
}
install_balenaEtcher(){
if [[ $BUILD_DESKTOP == yes && $install_balena_etcher == yes ]]; then
[[ ${RELEASE} == noble ]] && return
balena_etcher_deb=balena-etcher-electron_1.7.9+5945ab1f_arm64.deb
balena_etcher_url="https://github.com/Itai-Nelken/BalenaEtcher-arm/releases/download/v1.7.9/${balena_etcher_deb}"
balena_etcher=${EXTER}/cache/debs/arm64/${balena_etcher_deb}
if [[ ! -f ${balena_etcher} ]]; then
wget -P ${EXTER}/cache/debs/arm64 ${balena_etcher_url}
fi
install_deb_chroot ${balena_etcher}
rm $SDCARD/root/*.deb >/dev/null 2>&1
fi
}

View File

@ -23,6 +23,7 @@ INSTALL_KSRC="no"
IGNORE_UPDATES=""
COMPRESS_OUTPUTIMAGE="no"
NO_APT_CACHER="yes"
GITEE_SERVER="no"
#install_balena_etcher="yes"
#install_zfs="yes"

View File

@ -0,0 +1 @@
db962c19a1737d10bcf14e18a8bc66e4 arm-gnu-toolchain-12.3.rel1-x86_64-aarch64-none-linux-gnu.tar.xz

View File

@ -0,0 +1 @@
db962c19a1737d10bcf14e18a8bc66e4

View File

@ -138,7 +138,8 @@ function get_ip_addresses() {
if [[ $intf =~ $HIDE_IP_PATTERN ]]; then
continue
else
local tmp=$(ip -4 addr show dev $intf | grep -v "$intf:avahi" | awk '/inet/ {print $2}' | cut -d'/' -f1)
local tmp=$(ip -4 addr show dev $intf | grep -v "$intf:avahi" | awk '/inet/ {print $2}' | cut -d'/' -f1 | head -n 1)
# add both name and IP - can be informative but becomes ugly with long persistent/predictable device names
#[[ -n $tmp ]] && ips+=("$intf: $tmp")
# add IP only

View File

@ -24,7 +24,8 @@ do_expand_partition()
# trim any btrfs subvolume identifier given in square brackets (e.g. /dev/mapper/orangepi-root[/@])
local rootsource=$(findmnt -n -o SOURCE / | sed 's~\[.*\]~~') # i.e. /dev/mmcblk0p1 or /dev/mapper/orangepi-root
old_partuuid=$(sudo blkid ${rootsource} -s PARTUUID -o value)
# check for device type
local roottype=$(lsblk -n -o TYPE $rootsource) # crypt, part or disk
case ${roottype} in
@ -160,6 +161,17 @@ do_expand_partition()
btrfs filesystem resize max / >> ${Log} 2>&1
;;
esac
if [[ ${BOARD} == orangepi6plus ]]; then
new_partuuid=$(sudo blkid ${rootsource} -s PARTUUID -o value)
if [[ ${rootdevice} == *sd* ]]; then
mount ${rootdevicepath}1 /mnt/
else
mount ${rootdevicepath}p1 /mnt/
fi
sed -i "s/root=PARTUUID=${old_partuuid}/root=PARTUUID=${new_partuuid}/g" /mnt/GRUB/GRUB.CFG
umount /mnt/
fi
}
do_resize_crypt()

View File

@ -0,0 +1,422 @@
#!/usr/bin/env sh
set -e
EXITCODE=0
# bits of this were adapted from lxc-checkconfig
# see also https://github.com/lxc/lxc/blob/lxc-1.0.2/src/lxc/lxc-checkconfig.in
possibleConfigs="
/proc/config.gz
/boot/config-$(uname -r)
/usr/src/linux-$(uname -r)/.config
/usr/src/linux/.config
"
if [ $# -gt 0 ]; then
CONFIG="$1"
else
: "${CONFIG:=/proc/config.gz}"
fi
if ! command -v zgrep > /dev/null 2>&1; then
zgrep() {
zcat "$2" | grep "$1"
}
fi
useColor=true
if [ "$NO_COLOR" = "1" ] || [ ! -t 1 ]; then
useColor=false
fi
kernelVersion="$(uname -r)"
kernelMajor="${kernelVersion%%.*}"
kernelMinor="${kernelVersion#$kernelMajor.}"
kernelMinor="${kernelMinor%%.*}"
is_set() {
zgrep "CONFIG_$1=[y|m]" "$CONFIG" > /dev/null
}
is_set_in_kernel() {
zgrep "CONFIG_$1=y" "$CONFIG" > /dev/null
}
is_set_as_module() {
zgrep "CONFIG_$1=m" "$CONFIG" > /dev/null
}
color() {
# if stdout is not a terminal, then don't do color codes.
if [ "$useColor" = "false" ]; then
return 0
fi
codes=
if [ "$1" = 'bold' ]; then
codes='1'
shift
fi
if [ "$#" -gt 0 ]; then
code=
case "$1" in
# see https://en.wikipedia.org/wiki/ANSI_escape_code#Colors
black) code=30 ;;
red) code=31 ;;
green) code=32 ;;
yellow) code=33 ;;
blue) code=34 ;;
magenta) code=35 ;;
cyan) code=36 ;;
white) code=37 ;;
esac
if [ "$code" ]; then
codes="${codes:+$codes;}$code"
fi
fi
printf '\033[%sm' "$codes"
}
wrap_color() {
text="$1"
shift
color "$@"
printf '%s' "$text"
color reset
echo
}
wrap_good() {
echo "$(wrap_color "$1" white): $(wrap_color "$2" green)"
}
wrap_bad() {
echo "$(wrap_color "$1" bold): $(wrap_color "$2" bold red)"
}
wrap_warning() {
wrap_color >&2 "$*" red
}
check_flag() {
if is_set_in_kernel "$1"; then
wrap_good "CONFIG_$1" 'enabled'
elif is_set_as_module "$1"; then
wrap_good "CONFIG_$1" 'enabled (as module)'
else
wrap_bad "CONFIG_$1" 'missing'
EXITCODE=1
fi
}
check_flags() {
for flag in "$@"; do
printf -- '- '
check_flag "$flag"
done
}
check_command() {
if command -v "$1" > /dev/null 2>&1; then
wrap_good "$1 command" 'available'
else
wrap_bad "$1 command" 'missing'
EXITCODE=1
fi
}
check_device() {
if [ -c "$1" ]; then
wrap_good "$1" 'present'
else
wrap_bad "$1" 'missing'
EXITCODE=1
fi
}
check_sysctl() {
val=$(sysctl -n $1)
want=$2
if [ "$val" = "$want" ]; then
wrap_good "sysctl $1" "enabled"
else
wrap_bad "sysctl $1" "disabled"
fi
}
if [ ! -e "$CONFIG" ]; then
wrap_warning "warning: $CONFIG does not exist, searching other paths for kernel config ..."
for tryConfig in $possibleConfigs; do
if [ -e "$tryConfig" ]; then
CONFIG="$tryConfig"
break
fi
done
if [ ! -e "$CONFIG" ]; then
wrap_warning "error: cannot find kernel config"
wrap_warning " try running this script again, specifying the kernel config:"
wrap_warning " CONFIG=/path/to/kernel/.config $0 or $0 /path/to/kernel/.config"
exit 1
fi
fi
wrap_color "info: reading kernel config from $CONFIG ..." white
echo
echo 'Generally Necessary:'
printf -- '- '
if [ "$(stat -f -c %t /sys/fs/cgroup 2> /dev/null)" = '63677270' ]; then
wrap_good 'cgroup hierarchy' 'cgroupv2'
cgroupv2ControllerFile='/sys/fs/cgroup/cgroup.controllers'
if [ -f "$cgroupv2ControllerFile" ]; then
echo ' Controllers:'
for controller in cpu cpuset io memory pids; do
if grep -qE '(^| )'"$controller"'($| )' "$cgroupv2ControllerFile"; then
echo " - $(wrap_good "$controller" 'available')"
else
echo " - $(wrap_bad "$controller" 'missing')"
fi
done
else
wrap_bad "$cgroupv2ControllerFile" 'nonexistent??'
fi
# TODO find an efficient way to check if cgroup.freeze exists in subdir
else
cgroupSubsystemDir="$(sed -rne '/^[^ ]+ ([^ ]+) cgroup ([^ ]*,)?(cpu|cpuacct|cpuset|devices|freezer|memory)[, ].*$/ { s//\1/p; q }' /proc/mounts)"
cgroupDir="$(dirname "$cgroupSubsystemDir")"
if [ -d "$cgroupDir/cpu" ] || [ -d "$cgroupDir/cpuacct" ] || [ -d "$cgroupDir/cpuset" ] || [ -d "$cgroupDir/devices" ] || [ -d "$cgroupDir/freezer" ] || [ -d "$cgroupDir/memory" ]; then
echo "$(wrap_good 'cgroup hierarchy' 'properly mounted') [$cgroupDir]"
else
if [ "$cgroupSubsystemDir" ]; then
echo "$(wrap_bad 'cgroup hierarchy' 'single mountpoint!') [$cgroupSubsystemDir]"
else
wrap_bad 'cgroup hierarchy' 'nonexistent??'
fi
EXITCODE=1
echo " $(wrap_color '(see https://github.com/tianon/cgroupfs-mount)' yellow)"
fi
fi
if [ "$(cat /sys/module/apparmor/parameters/enabled 2> /dev/null)" = 'Y' ]; then
printf -- '- '
if command -v apparmor_parser > /dev/null 2>&1; then
wrap_good 'apparmor' 'enabled and tools installed'
else
wrap_bad 'apparmor' 'enabled, but apparmor_parser missing'
printf ' '
if command -v apt-get > /dev/null 2>&1; then
wrap_color '(use "apt-get install apparmor" to fix this)'
elif command -v yum > /dev/null 2>&1; then
wrap_color '(your best bet is "yum install apparmor-parser")'
else
wrap_color '(look for an "apparmor" package for your distribution)'
fi
EXITCODE=1
fi
fi
check_flags \
NAMESPACES NET_NS PID_NS IPC_NS UTS_NS \
CGROUPS CGROUP_CPUACCT CGROUP_DEVICE CGROUP_FREEZER CGROUP_SCHED CPUSETS MEMCG \
KEYS \
VETH BRIDGE BRIDGE_NETFILTER \
IP_NF_FILTER IP_NF_MANGLE IP_NF_TARGET_MASQUERADE \
IP6_NF_FILTER IP6_NF_MANGLE IP6_NF_TARGET_MASQUERADE \
NETFILTER_XT_MATCH_ADDRTYPE \
NETFILTER_XT_MATCH_CONNTRACK \
NETFILTER_XT_MATCH_IPVS \
NETFILTER_XT_MARK \
IP_NF_RAW IP_NF_NAT NF_NAT \
IP6_NF_RAW IP6_NF_NAT NF_NAT \
POSIX_MQUEUE
# (POSIX_MQUEUE is required for bind-mounting /dev/mqueue into containers)
if [ "$kernelMajor" -lt 4 ] || ([ "$kernelMajor" -eq 4 ] && [ "$kernelMinor" -lt 8 ]); then
check_flags DEVPTS_MULTIPLE_INSTANCES
fi
if [ "$kernelMajor" -lt 5 ] || [ "$kernelMajor" -eq 5 -a "$kernelMinor" -le 1 ]; then
check_flags NF_NAT_IPV4
fi
if [ "$kernelMajor" -lt 5 ] || [ "$kernelMajor" -eq 5 -a "$kernelMinor" -le 2 ]; then
check_flags NF_NAT_NEEDED
fi
# check availability of BPF_CGROUP_DEVICE support
if [ "$kernelMajor" -ge 5 ] || ([ "$kernelMajor" -eq 4 ] && [ "$kernelMinor" -ge 15 ]); then
check_flags CGROUP_BPF
fi
echo
echo 'Optional Features:'
{
check_flags USER_NS
}
{
check_flags SECCOMP
check_flags SECCOMP_FILTER
}
{
check_flags CGROUP_PIDS
}
{
# Kernel v5.8+ removes MEMCG_SWAP_ENABLED and deprecates MEMCG_SWAP.
if [ "$kernelMajor" -lt 5 ] || [ "$kernelMajor" -eq 5 -a "$kernelMinor" -lt 8 ]; then
CODE=${EXITCODE}
check_flags MEMCG_SWAP MEMCG_SWAP_ENABLED
# FIXME this check is cgroupv1-specific
if [ -e /sys/fs/cgroup/memory/memory.memsw.limit_in_bytes ]; then
echo " $(wrap_color '(cgroup swap accounting is currently enabled)' bold black)"
EXITCODE=${CODE}
elif is_set MEMCG_SWAP && ! is_set MEMCG_SWAP_ENABLED; then
echo " $(wrap_color '(cgroup swap accounting is currently not enabled, you can enable it by setting boot option "swapaccount=1")' bold black)"
fi
else
# Kernel v5.8+ enables swap accounting by default.
echo " $(wrap_color '(cgroup swap accounting is currently enabled)' bold black)"
fi
}
{
if is_set LEGACY_VSYSCALL_NATIVE; then
printf -- '- '
wrap_bad "CONFIG_LEGACY_VSYSCALL_NATIVE" 'enabled'
echo " $(wrap_color '(dangerous, provides an ASLR-bypassing target with usable ROP gadgets.)' bold black)"
elif is_set LEGACY_VSYSCALL_EMULATE; then
printf -- '- '
wrap_good "CONFIG_LEGACY_VSYSCALL_EMULATE" 'enabled'
elif is_set LEGACY_VSYSCALL_NONE; then
printf -- '- '
wrap_bad "CONFIG_LEGACY_VSYSCALL_NONE" 'enabled'
echo " $(wrap_color '(containers using eglibc <= 2.13 will not work. Switch to' bold black)"
echo " $(wrap_color ' "CONFIG_VSYSCALL_[NATIVE|EMULATE]" or use "vsyscall=[native|emulate]"' bold black)"
echo " $(wrap_color ' on kernel command line. Note that this will disable ASLR for the,' bold black)"
echo " $(wrap_color ' VDSO which may assist in exploiting security vulnerabilities.)' bold black)"
# else Older kernels (prior to 3dc33bd30f3e, released in v4.40-rc1) do
# not have these LEGACY_VSYSCALL options and are effectively
# LEGACY_VSYSCALL_EMULATE. Even older kernels are presumably
# effectively LEGACY_VSYSCALL_NATIVE.
fi
}
if [ "$kernelMajor" -lt 4 ] || ([ "$kernelMajor" -eq 4 ] && [ "$kernelMinor" -le 5 ]); then
check_flags MEMCG_KMEM
fi
if [ "$kernelMajor" -lt 3 ] || ([ "$kernelMajor" -eq 3 ] && [ "$kernelMinor" -le 18 ]); then
check_flags RESOURCE_COUNTERS
fi
if [ "$kernelMajor" -lt 3 ] || ([ "$kernelMajor" -eq 3 ] && [ "$kernelMinor" -le 13 ]); then
netprio=NETPRIO_CGROUP
else
netprio=CGROUP_NET_PRIO
fi
if [ "$kernelMajor" -lt 5 ]; then
check_flags IOSCHED_CFQ CFQ_GROUP_IOSCHED
fi
check_flags \
BLK_CGROUP BLK_DEV_THROTTLING \
CGROUP_PERF \
CGROUP_HUGETLB \
NET_CLS_CGROUP $netprio \
CFS_BANDWIDTH FAIR_GROUP_SCHED \
IP_NF_TARGET_REDIRECT \
IP_SCTP \
IP_VS \
IP_VS_NFCT \
IP_VS_PROTO_TCP \
IP_VS_PROTO_UDP \
IP_VS_RR \
SECURITY_SELINUX \
SECURITY_APPARMOR
check_flags \
NFT_CT \
NFT_FIB_IPV4 \
NFT_FIB_IPV6 \
NFT_FIB \
NFT_MASQ \
NFT_NAT \
NF_TABLES
if ! is_set EXT4_USE_FOR_EXT2; then
check_flags EXT3_FS EXT3_FS_XATTR EXT3_FS_POSIX_ACL EXT3_FS_SECURITY
if ! is_set EXT3_FS || ! is_set EXT3_FS_XATTR || ! is_set EXT3_FS_POSIX_ACL || ! is_set EXT3_FS_SECURITY; then
echo " $(wrap_color '(enable these ext3 configs if you are using ext3 as backing filesystem)' bold black)"
fi
fi
check_flags EXT4_FS EXT4_FS_POSIX_ACL EXT4_FS_SECURITY
if ! is_set EXT4_FS || ! is_set EXT4_FS_POSIX_ACL || ! is_set EXT4_FS_SECURITY; then
if is_set EXT4_USE_FOR_EXT2; then
echo " $(wrap_color 'enable these ext4 configs if you are using ext3 or ext4 as backing filesystem' bold black)"
else
echo " $(wrap_color 'enable these ext4 configs if you are using ext4 as backing filesystem' bold black)"
fi
fi
echo '- Network Drivers:'
echo " - \"$(wrap_color 'bridge' blue)\":"
check_sysctl net.ipv4.ip_forward 1 | sed 's/^/ - /'
check_sysctl net.ipv6.conf.all.forwarding 1 | sed 's/^/ - /'
check_sysctl net.ipv6.conf.default.forwarding 1 | sed 's/^/ - /'
echo " - \"$(wrap_color 'overlay' blue)\":"
check_flags VXLAN BRIDGE_VLAN_FILTERING | sed 's/^/ /'
echo ' Optional (for encrypted networks):'
check_flags CRYPTO CRYPTO_AEAD CRYPTO_GCM CRYPTO_SEQIV CRYPTO_GHASH \
XFRM XFRM_USER XFRM_ALGO INET_ESP NETFILTER_XT_MATCH_BPF | sed 's/^/ /'
if [ "$kernelMajor" -lt 5 ] || [ "$kernelMajor" -eq 5 -a "$kernelMinor" -le 3 ]; then
check_flags INET_XFRM_MODE_TRANSPORT | sed 's/^/ /'
fi
echo " - \"$(wrap_color 'ipvlan' blue)\":"
check_flags IPVLAN | sed 's/^/ /'
echo " - \"$(wrap_color 'macvlan' blue)\":"
check_flags MACVLAN DUMMY | sed 's/^/ /'
echo " - \"$(wrap_color 'ftp,tftp client in container' blue)\":"
check_flags NF_NAT_FTP NF_CONNTRACK_FTP NF_NAT_TFTP NF_CONNTRACK_TFTP | sed 's/^/ /'
# only fail if no storage drivers available
CODE=${EXITCODE}
EXITCODE=0
STORAGE=1
echo '- Storage Drivers:'
echo " - \"$(wrap_color 'btrfs' blue)\":"
check_flags BTRFS_FS | sed 's/^/ /'
check_flags BTRFS_FS_POSIX_ACL | sed 's/^/ /'
[ "$EXITCODE" = 0 ] && STORAGE=0
EXITCODE=0
echo " - \"$(wrap_color 'overlay' blue)\":"
check_flags OVERLAY_FS | sed 's/^/ /'
[ "$EXITCODE" = 0 ] && STORAGE=0
EXITCODE=0
echo " - \"$(wrap_color 'zfs' blue)\":"
printf ' - '
check_device /dev/zfs
printf ' - '
check_command zfs
printf ' - '
check_command zpool
[ "$EXITCODE" = 0 ] && STORAGE=0
EXITCODE=0
EXITCODE=$CODE
[ "$STORAGE" = 1 ] && EXITCODE=1
echo
check_limit_over() {
if [ "$(cat "$1")" -le "$2" ]; then
wrap_bad "- $1" "$(cat "$1")"
wrap_color " This should be set to at least $2, for example set: sysctl -w kernel/keys/root_maxkeys=1000000" bold black
EXITCODE=1
else
wrap_good "- $1" "$(cat "$1")"
fi
}
echo 'Limits:'
check_limit_over /proc/sys/kernel/keys/root_maxkeys 10000
echo
exit $EXITCODE

View File

@ -0,0 +1,29 @@
# GDM configuration storage
#
# See /usr/share/gdm/gdm.schemas for a list of available options.
[daemon]
# Uncomment the line below to force the login screen to use Xorg
XorgEnable=false
#WaylandEnable=true
# Enabling automatic login
AutomaticLoginEnable = true
AutomaticLogin = orangepi
# Enabling timed login
# TimedLoginEnable = true
# TimedLogin = user1
# TimedLoginDelay = 10
[security]
[xdmcp]
[chooser]
[debug]
# Uncomment the line below to turn on debugging
# More verbose logs
# Additionally lets the X server dump core if it crashes
#Enable=true

View File

@ -0,0 +1,5 @@
blacklist r8125
blacklist pgdrv
blacklist rtk_btusb
blacklist amdgpu
blacklist armcb_isp

View File

@ -0,0 +1,4 @@
export KWIN_COMPOSE=O2ES
export QT_OPENGL=es2
export GDK_GL=gles
export GST_GL_API=gles2

View File

@ -0,0 +1,30 @@
#!/bin/bash
#
# Copyright (c) Authors: https://www.armbian.com/authors
#
# This file is licensed under the terms of the GNU General Public
# License version 2. This program is licensed "as is" without any
# warranty of any kind, whether express or implied.
# DO NOT EDIT THIS FILE but add config options to /etc/default/orangepi-motd
# any changes will be lost on board support package update
THIS_SCRIPT="config"
MOTD_DISABLE=""
[[ -f /etc/default/orangepi-motd ]] && . /etc/default/orangepi-motd
for f in $MOTD_DISABLE; do
[[ $f == $THIS_SCRIPT ]] && exit 0
done
#if [[ $(( $RANDOM % 2 )) == 0 ]]; then
# if [[ -f /usr/sbin/orangepi-config ]]; then
# echo -e "[\e[31m General system configuration (beta)\e[0m: \e[1morangepi-config\e[0m ]\n"
# else
# echo -e "[\e[31m Menu-driven system configuration (beta)\e[0m: \e[1msudo dpkg -i orangepi-config.deb\e[0m ]\n"
# fi
#fi
exit 0

Binary file not shown.

View File

@ -0,0 +1,32 @@
#!/bin/bash
# 检查至少提供一个 GPIO 引脚
if [ "$#" -lt 1 ]; then
echo "Usage: $0 gpio_number1 [gpio_number2 ... gpio_numberN]"
exit 1
fi
# 导出和设置方向为输出
for gpio in "$@"; do
if [ ! -e "/sys/class/gpio/gpio${gpio}" ]; then
echo "Exporting GPIO $gpio"
echo $gpio > /sys/class/gpio/export
fi
echo "Setting GPIO $gpio direction to out"
echo "out" > /sys/class/gpio/gpio${gpio}/direction
done
# 闪烁逻辑
while true; do
# 设置 GPIO 高电平
for gpio in "$@"; do
echo 1 > /sys/class/gpio/gpio${gpio}/value
done
sleep 1 # 调整为所需的闪烁时间间隔
# 设置 GPIO 低电平
for gpio in "$@"; do
echo 0 > /sys/class/gpio/gpio${gpio}/value
done
sleep 1 # 调整为所需的闪烁时间间隔
done

View File

@ -0,0 +1,2 @@
gst-launch-1.0 v4l2src device=/dev/video1 ! videoconvert ! autovideosink

View File

@ -0,0 +1 @@
gst-launch-1.0 v4l2src device=/dev/video3 ! videoconvert ! autovideosink

View File

@ -0,0 +1,3 @@
#!/bin/bash
blink_gpio.sh 65 64 106 32 33 108 17 14 18 57 37 40 41 66 69 114 115 34 109 35 36 15 16 56 38 39 70 71

View File

@ -0,0 +1,6 @@
#gst-launch-1.0 v4l2src device=/dev/video1 ! videoconvert ! autovideosink &
gst-launch-1.0 v4l2src device=/dev/video1 ! videoconvert ! autovideosink \
v4l2src device=/dev/video3 ! videoconvert ! autovideosink
#gst-launch-1.0 v4l2src device=/dev/video3 ! videoconvert ! autovideosink &

Binary file not shown.

View File

@ -0,0 +1,4 @@
#!/bin/bash
wget -O install.sh \
http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh

View File

@ -0,0 +1,24 @@
#!/bin/bash
release=$(lsb_release -cs)
sudo apt update
if [[ $release =~ focal|bionic|buster ]]; then
sudo apt-get -y install qt5-default qttools5-dev-tools qtbase5-doc-html qt5-assistant qt5-doc
elif [[ $release =~ bullseye|bookworm|jammy ]]; then
sudo apt-get -y install qttools5-dev-tools qtbase5-doc-html qt5-assistant qt5-doc qt5-qmake qt5-qmake-bin
else
echo "Unsupported system!"
exit
fi
sudo apt-get -y install qtcreator qmlscene gdb qtdeclarative5-dev qtbase5-examples cmake
if [[ $release =~ bookworm ]]; then
sudo apt-get -y install qt6-wayland qtwayland5
sudo apt-get -y install libegl1-mesa-dev libgles2-mesa-dev
fi
sudo chown orangepi:orangepi /usr/lib/aarch64-linux-gnu/qt5/examples -R
qmake -v

Binary file not shown.

View File

@ -0,0 +1,4 @@
#!/bin/bash
sudo rm /etc/ssh/ssh_host_*
sudo dpkg-reconfigure openssh-server

Binary file not shown.

View File

@ -0,0 +1,84 @@
#!/bin/bash
# USB Gadget 配置脚本
# 功能:将设备配置为 USB NCM (网络控制模型) 设备
set -e # 遇到任何错误立即退出
GADGET_DIR="/sys/kernel/config/usb_gadget/g1"
echo "正在设置 USB NCM Gadget..."
# 检查是否以 root 权限运行
if [ "$EUID" -ne 0 ]; then
echo "错误:请使用 sudo 或以 root 用户运行此脚本"
exit 1
fi
# 检查 configfs 是否已挂载
if ! mountpoint -q /sys/kernel/config; then
echo "挂载 configfs..."
mount -t configfs none /sys/kernel/config || {
echo "错误:无法挂载 configfs"
exit 1
}
fi
# 清理现有配置(如果存在)
if [ -d "$GADGET_DIR" ]; then
echo "清理现有 gadget 配置..."
echo "" > "$GADGET_DIR/UDC" 2>/dev/null || true
rm -f "$GADGET_DIR/configs/c.1/ncm.usb0"
rmdir "$GADGET_DIR/configs/c.1/strings/0x409" 2>/dev/null || true
rmdir "$GADGET_DIR/configs/c.1" 2>/dev/null || true
rmdir "$GADGET_DIR/functions/ncm.usb0" 2>/dev/null || true
rmdir "$GADGET_DIR/strings/0x409" 2>/dev/null || true
rmdir "$GADGET_DIR" 2>/dev/null || true
sleep 1
fi
# 创建 gadget 目录
echo "创建 gadget 目录..."
mkdir "$GADGET_DIR"
# 设置 USB 设备描述符
echo "设置设备描述符..."
echo 0x35b1 > "$GADGET_DIR/idVendor"
echo 0x0009 > "$GADGET_DIR/idProduct"
echo 0x0200 > "$GADGET_DIR/bcdDevice"
echo 0x0210 > "$GADGET_DIR/bcdUSB"
echo "super-speed-plus" > "$GADGET_DIR/max_speed"
# 设置字符串描述符
echo "设置字符串描述符..."
mkdir -m 0770 "$GADGET_DIR/strings/0x409"
echo "0123456789ABCDEF" > "$GADGET_DIR/strings/0x409/serialnumber"
echo "cix" > "$GADGET_DIR/strings/0x409/manufacturer"
echo "USB ncm Device" > "$GADGET_DIR/strings/0x409/product"
# 创建配置
echo "创建配置..."
mkdir -m 0770 "$GADGET_DIR/configs/c.1"
mkdir -m 0770 "$GADGET_DIR/configs/c.1/strings/0x409"
echo "ncm" > "$GADGET_DIR/configs/c.1/strings/0x409/configuration"
# 创建 NCM 功能
echo "创建 NCM 功能..."
mkdir "$GADGET_DIR/functions/ncm.usb0"
# 将功能链接到配置
echo "链接功能到配置..."
ln -s "$GADGET_DIR/functions/ncm.usb0" "$GADGET_DIR/configs/c.1/"
# 启用 gadget
echo "启用 USB 设备控制器..."
UDC_DEVICE=$(ls /sys/class/udc/ | head -n1)
if [ -n "$UDC_DEVICE" ]; then
echo "$UDC_DEVICE" > "$GADGET_DIR/UDC"
echo "已启用 UDC: $UDC_DEVICE"
else
echo "警告:未找到可用的 UDC 设备"
fi
echo "USB NCM Gadget 配置完成!"
echo "设备现在应该被识别为 USB 网络设备"

View File

@ -0,0 +1,11 @@
#!/bin/bash
echo "Video Device and Name Correspondence:"
echo "====================================="
for dev in /dev/video*; do
dev_name=$(basename $dev)
if [ -f "/sys/class/video4linux/${dev_name}/name" ]; then
name=$(cat "/sys/class/video4linux/${dev_name}/name")
echo "$dev : $name"
fi
done

View File

@ -0,0 +1,27 @@
#!/bin/bash
echo 3 | sudo tee /sys/kernel/debug/amvx/log/group/perf/enable > /dev/null
echo "开始监控VPU使用率只显示大于0的情况..."
echo "按 Ctrl+C 停止监控"
while true
do
# 读取VPU使用率
utilization=$(sudo cat /sys/kernel/debug/amvx/log/group/perf/utilization | awk '{print $3}' | tr -d '%')
# 只有当使用率大于0时才输出
if (( $(echo "$utilization > 0" | bc -l) )); then
# 获取当前时间
current_time=$(date '+%H:%M:%S')
# 读取实时FPS信息
fps_info=$(sudo cat /sys/kernel/debug/amvx/log/group/perf/realtime_fps)
# 输出信息
echo "VPU Utilization: ${utilization}%"
if [ -n "$fps_info" ] && [ "$fps_info" != "null" ]; then
echo "$current_time $fps_info"
fi
fi
done

View File

@ -0,0 +1,15 @@
[Unit]
Description=ISP Daemon
After=network.target load-isp-modules.service
[Service]
Type=simple
Environment=LD_LIBRARY_PATH="/usr/share/cix/lib"
ExecStart=/usr/bin/isp_app -s 0 &
Restart=always
RestartSec=1
StartLimitInterval=10
StartLimitBurst=5
[Install]
WantedBy=multi-user.target

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

View File

@ -0,0 +1,79 @@
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <termios.h>
#include <string.h>
#include <errno.h>
int main(int argc, char *argv[]) {
if (argc < 2) {
printf("Usage: %s <serialport>\n", argv[0]);
return 1;
}
char *portname = argv[1];
// 打开串口
int fd = open(portname, O_RDWR | O_NOCTTY | O_SYNC);
if (fd < 0) {
printf("Error opening %s: %s\n", portname, strerror(errno));
return -1;
}
// 配置串口
struct termios tty;
memset(&tty, 0, sizeof tty);
if (tcgetattr(fd, &tty) != 0) {
printf("Error from tcgetattr: %s\n", strerror(errno));
return -1;
}
cfsetospeed(&tty, B115200); // 设置波特率为 115200
cfsetispeed(&tty, B115200);
tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS8; // 8-bit chars
tty.c_iflag &= ~IGNBRK; // 禁用break处理
tty.c_lflag = 0; // 不使用规范模式
tty.c_oflag = 0; // 不执行输出处理
tty.c_cc[VMIN] = 0; // 读取不需要字符
tty.c_cc[VTIME] = 5; // 0.5秒超时
tty.c_iflag &= ~(IXON | IXOFF | IXANY); // 关闭流控制
tty.c_cflag |= (CLOCAL | CREAD); // 忽略调制解调器状态线,开启接收
tty.c_cflag &= ~(PARENB | PARODD); // 关闭奇偶校验
tty.c_cflag &= ~CSTOPB; // 无停止位
tty.c_cflag &= ~CRTSCTS; // 禁用硬件流控制
if (tcsetattr(fd, TCSANOW, &tty) != 0) {
printf("Error from tcsetattr: %s\n", strerror(errno));
return -1;
}
// 向串口写数据
char *msg = "Hello, Serial Port!\n";
int wlen = write(fd, msg, strlen(msg));
if (wlen != strlen(msg)) {
printf("Error from write: %d, %d\n", wlen, errno);
}
tcdrain(fd); // 等待传输完成
printf("W: %s", msg);
// 从串口读数据
unsigned char buf[100];
int total_read = 0;
int rdlen;
while ((rdlen = read(fd, buf + total_read, sizeof(buf) - 1 - total_read)) > 0) {
total_read += rdlen;
if (total_read >= sizeof(buf) - 1 || buf[total_read - 1] == '\n') {
break;
}
}
if (total_read > 0) {
buf[total_read] = 0; // 确保字符串正确终止
printf("R: %s", buf);
}
// 关闭串口 - 这部分代码将不会被执行,因为循环是无限的
close(fd);
return 0;
}

196
scripts/build-cix-image.sh Executable file
View File

@ -0,0 +1,196 @@
#!/usr/bin/env bash
# Copyright 2024 Cix Technology Group Co., Ltd.
# All Rights Reserved.
#
# The following programs are the sole property of Cix Technology Group Co., Ltd.,
# and contain its proprietary and confidential information.
#
function replace_line_if_exist() {
local src=$1
local dst=$2
local file=$3
if [[ -e "$file" ]]; then
set +E
local res=`grep -n "${src}" "${file}"`
#echo "res:$res"
if [[ ${#res} -gt 0 ]]; then
line=`echo "${res}" | cut -d ":" -f 1`
fi
set -E
#echo "line: $line"
if [[ $line -gt 0 ]]; then
sed -i "${line}c${dst}" "${file}"
fi
fi
}
function create_cix_rootfs()
{
display_alert "Preparing" "cix rootfs" "info"
local PATH_OUT=${SRC}/output/cix
local ROOT_FREE_SIZE=4096000
rootfs_ext4=${PATH_OUT}/images/rootfs.ext4
rm -rf ${PATH_OUT} > /dev/null 2>&1
mkdir -p ${PATH_OUT}/images > /dev/null 2>&1
mount --bind --make-private $SDCARD $MOUNT/
local debianSize=`sudo du ${MOUNT} -d 0 -k | sudo awk -F ' ' '{print $1}'`
debianSize=`expr $debianSize \* 13 / 10`
if [[ ${debianSize} -lt 1024 ]]; then
totalsize='10240'
elif [[ ${debianSize} -lt 10240 ]]; then
totalsize=`expr $debianSize \* 50 / 10`
elif [[ ${debianSize} -lt 102400 ]]; then
totalsize=`expr $debianSize \* 25 / 10`
elif [[ ${debianSize} -lt 1024000 ]]; then
totalsize=`expr $debianSize \* 20 / 10`
else
totalsize=`expr $debianSize + ${ROOT_FREE_SIZE:-4096000}`
fi
local count=`expr $totalsize / 4`
root_uuid=$(uuidgen)
boot_uuid=$(uuidgen | tr -d '-' | cut -c1-8 | tr 'a-f' 'A-F')
formatted_boot_uuid="${boot_uuid:0:4}-${boot_uuid:4:4}"
cat <<-END > ${SDCARD}/etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a device; this may
# be used with UUID= as a more robust way to name devices that works even if
# disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
END
#echo "UUID=${formatted_boot_uuid} /boot vfat defaults,umask=0077 0 2" >> $MOUNT/etc/fstab
#echo "UUID=$root_uuid / ext4 errors=remount-ro 0 1" >> $MOUNT/etc/fstab
dd if=/dev/zero of="${rootfs_ext4}" bs=4k count=$count > /dev/null 2>&1
#mkfs.ext4 -U ${uuid} -F -i 4096 "${rootfs_ext4}" -d "${MOUNT}" > /dev/null 2>&1
mkfs.ext4 -F -i 4096 "${rootfs_ext4}" -d "${MOUNT}" > /dev/null 2>&1
fsck.ext4 -pvfD "${rootfs_ext4}" > /dev/null 2>&1
umount $MOUNT
rm -rf $MOUNT
}
function create_cix_image()
{
display_alert "Creating" "cix image" "info"
local PATH_OUT=${SRC}/output/cix
local gpt_btp=${PATH_OUT}/images/partition.bpt
local SCRIPT_DIR=${EXTER}/cache/sources/component_cix-${BRANCH}
if [[ $SELECTED_CONFIGURATION == "cli_standard" ]]; then
IMAGE_TYPE=server
elif [[ $SELECTED_CONFIGURATION == "cli_minimal" ]]; then
IMAGE_TYPE=minimal
else
IMAGE_TYPE=desktop
fi
version="${BOARD^}_${REVISION}_${DISTRIBUTION,}_${RELEASE}_${IMAGE_TYPE}"${DESKTOP_ENVIRONMENT:+_$DESKTOP_ENVIRONMENT}"_linux$(grab_version "$LINUXSOURCEDIR")"
mkdir -p ${SRC}/output/images/${version}
local cix_image_name="${SRC}/output/images/${version}/${version}.img"
cp -f "${SCRIPT_DIR}/debian/fb/partition.bpt" "${gpt_btp}" || {
display_alert "Failed to copy BPT template" "${gpt_btp}" "err"
return 1
}
local boot_start=$(expr $(sed -n '6p' ${gpt_btp} | awk '{print $2}') / 1024 / 1024)
local boot_size=$(expr $(sed -n '11p' ${gpt_btp} | awk -F '"' '{print $4}' | awk '{print $1}'))
if [[ ! -f "${rootfs_ext4}" ]]; then
display_alert "Rootfs missing" "${rootfs_ext4}" "err"
return 1
fi
local rootfs_ext4="${PATH_OUT}/images/rootfs.ext4"
local root_size=`du -s -b ${rootfs_ext4} | awk '{print $1}'`
root_size=`expr $root_size / 1024 / 1024 + 10`
local total_size=`expr $root_size + $boot_size + $boot_start + 1`
local root_start=`expr $boot_size + $boot_start`
local boot_end=$root_start
local root_end=$total_size
#echo "total size: ${total_size}M"
#echo "boot: ${boot_start}, ${boot_end}M"
#echo "rootfs: ${root_start}, ${root_end}M"
replace_line_if_exist "\"disk_size\":" "\ \ \ \ \ \ \ \ \"disk_size\": \"${total_size} MiB\"," "${gpt_btp}"
sudo "${SCRIPT_DIR}/debian/fb/bpttool" make_table --input "${gpt_btp}" --output_gpt "${PATH_OUT}/images/partition-table.img" --output_json "${PATH_OUT}/partition-table.json"
sudo chown ${USER}:${USER} "${PATH_OUT}/images/partition-table.img"
boot_size=$(expr $boot_size \* 1024 \* 1024)
#echo "boot_start: ${boot_start}Mib, boot_size: ${boot_size} bytes"
cp "${SCRIPT_DIR}/debian/grub-post-silicon.cfg" "${PATH_OUT}/images/grub.cfg"
local root_device_guid=$("${SCRIPT_DIR}/debian/cix_tool" --flash-tool -d "${PATH_OUT}/images/partition-table.img" | grep "PARTITION1, guid:" | awk -F ":" '{print $2}')
sed -i "s:root=/dev/nvme0n1p2:root=PARTUUID=${root_device_guid}:g" "${PATH_OUT}/images/grub.cfg"
sed -i "s:root=/dev/sda2:root=PARTUUID=${root_device_guid}:g" "${PATH_OUT}/images/grub.cfg"
local dtb_args=()
while IFS= read -r -d $'\0' dtb; do
dtb_args+=("${dtb}" "/$(basename "${dtb}")")
done < <(find "${LINUXSOURCEDIR}/arch/arm64/boot/dts/cix/" -maxdepth 1 -name "*.dtb" -print0)
sed -i '3cset default="0"' "${PATH_OUT}/images/grub.cfg"
"${SCRIPT_DIR}/tools/mk-part-fat" \
-o "${PATH_OUT}/images/boot.img" \
-s "${boot_size}" \
-l "ESP" \
"${SCRIPT_DIR}/grub.efi" "/EFI/BOOT/BOOTAA64.EFI" \
"${PATH_OUT}/images/grub.cfg" "/grub/grub.cfg" \
"${LINUXSOURCEDIR}/arch/arm64/boot/Image" "/Image" \
"${SCRIPT_DIR}/cix_binary/device/images/rootfs.cpio.gz" "/rootfs.cpio.gz" \
"${dtb_args[@]}" > /dev/null 2>&1
fatlabel -i "${PATH_OUT}/images/boot.img" "0x${boot_uuid}"
dd if=/dev/zero of="${cix_image_name}" bs=1M count=$total_size > /dev/null 2>&1
parted -s "${cix_image_name}" mklabel gpt > /dev/null 2>&1
dd if="${PATH_OUT}/images/partition-table.img" of="${cix_image_name}" conv=notrunc,fsync bs=1M seek=0 > /dev/null 2>&1
local boot_offset=`"${SCRIPT_DIR}/debian/cix_tool" --flash-tool -d "${PATH_OUT}/images/partition-table.img" -p boot | awk '{print $1}'`
boot_offset=`expr $boot_offset \* 512 / 1024 / 1024`
#echo "boot offset: $boot_offset M bytes"
dd if="${PATH_OUT}/images/boot.img" of="${cix_image_name}" conv=notrunc,fsync bs=1M seek=$boot_offset > /dev/null 2>&1
local rootfs_offset=`"${SCRIPT_DIR}/debian/cix_tool" --flash-tool -d "${PATH_OUT}/images/partition-table.img" -p root | awk '{print $1}'`
rootfs_offset=`expr $rootfs_offset \* 512 / 1024 / 1024`
#echo "root offset: $rootfs_offset M bytes"
dd if="${rootfs_ext4}" of="${cix_image_name}" conv=notrunc,fsync bs=1M seek=$rootfs_offset > /dev/null 2>&1
if [[ $COMPRESS_OUTPUTIMAGE == "" || $COMPRESS_OUTPUTIMAGE == no ]]; then
COMPRESS_OUTPUTIMAGE="sha,img"
elif [[ $COMPRESS_OUTPUTIMAGE == yes ]]; then
COMPRESS_OUTPUTIMAGE="sha,xz"
fi
if [[ $COMPRESS_OUTPUTIMAGE == *xz* ]]; then
display_alert "Compressing" "${cix_image_name}.xz" "info"
# compressing consumes a lot of memory we don't have. Waiting for previous packing job to finish helps to run a lot more builds in parallel
available_cpu=$(grep -c 'processor' /proc/cpuinfo)
[[ ${available_cpu} -gt 8 ]] && available_cpu=8 # using more cpu cores for compressing is pointless
available_mem=$(LC_ALL=c free | grep Mem | awk '{print $4/$2 * 100.0}' | awk '{print int($1)}') # in percentage
pixz -7 -p ${available_cpu} -f $(expr ${available_cpu} + 2) < $cix_image_name > ${cix_image_name}.xz
compression_type=".xz"
fi
if [[ $COMPRESS_OUTPUTIMAGE == *sha* ]]; then
cd ${SRC}/output/images/${version}/
display_alert "SHA256 calculating" "${version}.img${compression_type}" "info"
sha256sum -b ${version}.img${compression_type} > ${version}.img${compression_type}.sha
fi
display_alert "Done building" "$cix_image_name" "info"
}

View File

@ -542,6 +542,8 @@ CUSTOM_KERNEL_CONFIG
rsync --remove-source-files -rq ./*.deb "${DEB_STORAGE}/" || exit_with_error "Failed moving kernel DEBs"
[[ $(type -t family_tweaks_kernel) == function ]] && family_tweaks_kernel
# store git hash to the file and create a change log
#HASHTARGET="${EXTER}/cache/hash"$([[ ${BETA} == yes ]] && echo "-beta")"/linux-image-${BRANCH}-${LINUXFAMILY}"
#OLDHASHTARGET=$(head -1 "${HASHTARGET}.githash" 2>/dev/null)
@ -592,7 +594,12 @@ compile_firmware()
plugin_dir="orangepi-firmware${FULL}"
mkdir -p "${firmwaretempdir}/${plugin_dir}/lib/firmware"
[[ $IGNORE_UPDATES != yes ]] && fetch_from_repo "https://github.com/orangepi-xunlong/firmware" "${EXTER}/cache/sources/orangepi-firmware-git" "branch:master"
if [[ $GITEE_SERVER == yes ]]; then
[[ $IGNORE_UPDATES != yes ]] && fetch_from_repo "https://gitee.com/orangepi-xunlong/firmware" "${EXTER}/cache/sources/orangepi-firmware-git" "branch:master"
else
[[ $IGNORE_UPDATES != yes ]] && fetch_from_repo "https://github.com/orangepi-xunlong/firmware" "${EXTER}/cache/sources/orangepi-firmware-git" "branch:master"
fi
if [[ -n $FULL ]]; then
[[ $IGNORE_UPDATES != yes ]] && fetch_from_repo "$MAINLINE_FIRMWARE_SOURCE" "${EXTER}/cache/sources/linux-firmware-git" "branch:master"
# cp : create hardlinks
@ -645,8 +652,13 @@ compile_orangepi-zsh()
orangepi_zsh_dir=orangepi-zsh_${REVISION}_all
display_alert "Building deb" "orangepi-zsh" "info"
[[ $IGNORE_UPDATES != yes ]] && fetch_from_repo "https://github.com/robbyrussell/oh-my-zsh" "${EXTER}/cache/sources/oh-my-zsh" "branch:master"
[[ $IGNORE_UPDATES != yes ]] && fetch_from_repo "https://github.com/mroth/evalcache" "${EXTER}/cache/sources/evalcache" "branch:master"
if [[ $GITEE_SERVER == yes ]]; then
[[ $IGNORE_UPDATES != yes ]] && fetch_from_repo "https://gitee.com/orangepi-xunlong/oh-my-zsh" "${EXTER}/cache/sources/oh-my-zsh" "branch:master"
[[ $IGNORE_UPDATES != yes ]] && fetch_from_repo "https://gitee.com/orangepi-xunlong/evalcache" "${EXTER}/cache/sources/evalcache" "branch:master"
else
[[ $IGNORE_UPDATES != yes ]] && fetch_from_repo "https://github.com/robbyrussell/oh-my-zsh" "${EXTER}/cache/sources/oh-my-zsh" "branch:master"
[[ $IGNORE_UPDATES != yes ]] && fetch_from_repo "https://github.com/mroth/evalcache" "${EXTER}/cache/sources/evalcache" "branch:master"
fi
mkdir -p "${tmp_dir}/${orangepi_zsh_dir}"/{DEBIAN,etc/skel/,etc/oh-my-zsh/,/etc/skel/.oh-my-zsh/cache}

View File

@ -259,8 +259,12 @@ if [[ $BUILD_DESKTOP == "yes" && -z $DESKTOP_ENVIRONMENT ]]; then
for desktop_env_dir in "${DESKTOP_CONFIGS_DIR}/"*; do
local desktop_env_name=$(basename ${desktop_env_dir})
local expert_infos=""
[[ "${EXPERT}" == "yes" ]] && expert_infos="[$(cat "${desktop_env_dir}/support" 2> /dev/null)]"
desktop_element_supported "${desktop_env_dir}" "${ARCH}" && options+=("${desktop_env_name}" "${desktop_env_name^} desktop environment ${expert_infos}")
if [[ $BOARDFAMILY == "cix" && $desktop_env_name == xfce ]]; then
:
else
[[ "${EXPERT}" == "yes" ]] && expert_infos="[$(cat "${desktop_env_dir}/support" 2> /dev/null)]"
desktop_element_supported "${desktop_env_dir}" "${ARCH}" && options+=("${desktop_env_name}" "${desktop_env_name^} desktop environment ${expert_infos}")
fi
done
}

View File

@ -90,8 +90,13 @@ PRE_INSTALL_DISTRIBUTION_SPECIFIC
display_alert "Starting FEL boot" "$BOARD" "info"
source $SRC/scripts/fel-load.sh
else
prepare_partitions
create_image
if [[ $BOARDFAMILY == "cix" ]]; then
create_cix_rootfs
create_cix_image
else
prepare_partitions
create_image
fi
fi
# stage: unmount tmpfs
@ -215,7 +220,7 @@ create_rootfs_cache()
cd $SDCARD # this will prevent error sh: 0: getcwd() failed
eval 'debootstrap --variant=minbase --include=${DEBOOTSTRAP_LIST// /,} ${PACKAGE_LIST_EXCLUDE:+ --exclude=${PACKAGE_LIST_EXCLUDE// /,}} \
--arch=$ARCH --components=${DEBOOTSTRAP_COMPONENTS} $DEBOOTSTRAP_OPTION --foreign ${release_version} $SDCARD/ ${apt_mirror}' \
--no-check-gpg --arch=$ARCH --components=${DEBOOTSTRAP_COMPONENTS} $DEBOOTSTRAP_OPTION --foreign ${release_version} $SDCARD/ ${apt_mirror}' \
${PROGRESS_LOG_TO_FILE:+' | tee -a $DEST/${LOG_SUBPATH}/debootstrap.log'} \
${OUTPUT_DIALOG:+' | dialog --backtitle "$backtitle" --progressbox "Debootstrap (stage 1/2)..." $TTY_Y $TTY_X'} \
${OUTPUT_VERYSILENT:+' >/dev/null 2>/dev/null'} ';EVALPIPE=(${PIPESTATUS[@]})'
@ -347,6 +352,7 @@ create_rootfs_cache()
install_docker
[[ ${BOARDFAMILY} == "starfive2" ]] && jh7110_install_libs
[[ ${BOARDFAMILY} == "cix" ]] && install_cix_debs
# Remove packages from packages.uninstall

View File

@ -460,9 +460,6 @@ POST_INSTALL_KERNEL_DEBS
[[ -f "${SDCARD}"/usr/bin/gnome-session ]] && sed -i "s/user-session.*/user-session=ubuntu-wayland/" ${SDCARD}/etc/lightdm/lightdm.conf.d/22-orangepi-autologin.conf > /dev/null 2>&1
[[ -f "${SDCARD}"/usr/bin/startplasma-x11 ]] && sed -i "s/user-session.*/user-session=plasma-x11/" ${SDCARD}/etc/lightdm/lightdm.conf.d/22-orangepi-autologin.conf
# execute $LINUXFAMILY-specific tweaks
[[ $(type -t family_tweaks) == function ]] && family_tweaks
call_extension_method "post_family_tweaks" << 'FAMILY_TWEAKS'
*customize the tweaks made by $LINUXFAMILY-specific family_tweaks*
It is run after packages are installed in the rootfs, but before enabling additional services.
@ -636,6 +633,8 @@ FAMILY_TWEAKS
# disable MOTD for first boot - we want as clean 1st run as possible
chmod -x "${SDCARD}"/etc/update-motd.d/*
# execute $LINUXFAMILY-specific tweaks
[[ $(type -t family_tweaks) == function ]] && family_tweaks
}
install_rclocal()

View File

@ -1425,7 +1425,8 @@ prepare_host()
nfs-kernel-server ntpdate p7zip-full parted patchutils pigz pixz \
pkg-config pv python3-dev python3-distutils qemu-user-static rsync swig \
systemd-container u-boot-tools udev unzip uuid-dev wget whiptail zip \
zlib1g-dev gcc-riscv64-linux-gnu"
zlib1g-dev gcc-riscv64-linux-gnu uuid-runtime fatattr git-lfs scons \
mtools"
if [[ $(dpkg --print-architecture) == amd64 ]]; then
@ -1559,21 +1560,30 @@ prepare_host()
display_alert "Checking for external GCC compilers" "" "info"
# download external Linaro compiler and missing special dependencies since they are needed for certain sources
local toolchains=(
"ky-toolchain-linux-glibc-x86_64-v1.0.1.tar.xz"
"gcc-linaro-aarch64-none-elf-4.8-2013.11_linux.tar.xz"
"gcc-linaro-arm-none-eabi-4.8-2014.04_linux.tar.xz"
"gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux.tar.xz"
"gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi.tar.xz"
"gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu.tar.xz"
"gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf.tar.xz"
"gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabi.tar.xz"
"gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu.tar.xz"
"gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf.tar.xz"
"gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz"
"gcc-arm-11.2-2022.02-x86_64-arm-none-linux-gnueabihf.tar.xz"
"gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu.tar.xz"
)
case ${BOARDFAMILY} in
cix)
local toolchains=(
"arm-gnu-toolchain-12.3.rel1-x86_64-aarch64-none-linux-gnu.tar.xz"
)
;;
*)
local toolchains=(
"ky-toolchain-linux-glibc-x86_64-v1.0.1.tar.xz"
"gcc-linaro-aarch64-none-elf-4.8-2013.11_linux.tar.xz"
"gcc-linaro-arm-none-eabi-4.8-2014.04_linux.tar.xz"
"gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux.tar.xz"
"gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi.tar.xz"
"gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu.tar.xz"
"gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf.tar.xz"
"gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabi.tar.xz"
"gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu.tar.xz"
"gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf.tar.xz"
"gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu.tar.xz"
"gcc-arm-11.2-2022.02-x86_64-arm-none-linux-gnueabihf.tar.xz"
"gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu.tar.xz"
)
;;
esac
USE_TORRENT_STATUS=${USE_TORRENT}
USE_TORRENT="no"
@ -1655,6 +1665,11 @@ function webseed ()
https://mirrors.bfsu.edu.cn/armbian-releases/
)
fi
if [[ ${filename} == *ky* ]] || [[ ${filename} == *arm-gnu-toolchain* ]]; then
WEBSEED=(
http://www.iplaystore.cn/upload/
)
fi
for toolchain in ${WEBSEED[@]}; do
text="${text} ${toolchain}${1}"
done
@ -1681,13 +1696,12 @@ download_and_verify()
local server=${ARMBIAN_MIRROR}
fi
if [[ -f ${localdir}/${dirname}/.download-complete ]]; then
return
if [[ ${filename} == *ky* ]] || [[ ${filename} == *arm-gnu-toolchain* ]]; then
server="http://www.iplaystore.cn/upload/"
fi
if [[ ${filename} == *ky* ]]; then
server="http://www.iplaystore.cn/"
remotedir=""
if [[ -f ${localdir}/${dirname}/.download-complete ]]; then
return
fi
# switch to china mirror if US timeouts
@ -1695,16 +1709,21 @@ download_and_verify()
if [[ $? -ne 7 && $? -ne 22 && $? -ne 0 ]]; then
display_alert "Timeout from $server" "retrying" "info"
server="https://mirrors.tuna.tsinghua.edu.cn/armbian-releases/"
if [[ ${filename} == *ky* ]] || [[ ${filename} == *arm-gnu-toolchain* ]]; then
server="http://www.iplaystore.cn/upload/"
fi
# switch to another china mirror if tuna timeouts
timeout 10 curl --head --fail --silent ${server}${remotedir}/${filename} 2>&1 >/dev/null
if [[ $? -ne 7 && $? -ne 22 && $? -ne 0 ]]; then
display_alert "Timeout from $server" "retrying" "info"
server="https://mirrors.bfsu.edu.cn/armbian-releases/"
if [[ ${filename} == *ky* ]] || [[ ${filename} == *arm-gnu-toolchain* ]]; then
server="http://www.iplaystore.cn/upload/"
fi
fi
fi
# check if file exists on remote server before running aria2 downloader
[[ ! `timeout 10 curl --head --fail --silent ${server}${remotedir}/${filename}` ]] && return
@ -1925,9 +1944,9 @@ install_docker() {
esac
#if [[ ${SELECTED_CONFIGURATION} == desktop ]]; then
mirror_url=https://repo.huaweicloud.com
# mirror_url=https://repo.huaweicloud.com
#else
# mirror_url=https://mirrors.aliyun.com
mirror_url=https://mirrors.aliyun.com
#fi
chroot "${SDCARD}" /bin/bash -c "curl -fsSL ${mirror_url}/docker-ce/linux/${distributor_id}/gpg | apt-key add -"

View File

@ -84,6 +84,8 @@ source "${SRC}"/scripts/general.sh # general functions
source "${SRC}"/scripts/chroot-buildpackages.sh # chroot packages building
# shellcheck source=pack.sh
source "${SRC}"/scripts/pack-uboot.sh
# shellcheck source=build-cix-image.sh
source "${SRC}"/scripts/build-cix-image.sh
# set log path
@ -159,48 +161,6 @@ fi
# if BUILD_OPT, KERNEL_CONFIGURE, BOARD, BRANCH or RELEASE are not set, display selection menu
if [[ -z $BUILD_OPT ]]; then
options+=("u-boot" "U-boot package")
options+=("kernel" "Kernel package")
options+=("rootfs" "Rootfs and all deb packages")
options+=("image" "Full OS image for flashing")
menustr="Compile image | rootfs | kernel | u-boot"
BUILD_OPT=$(whiptail --title "${titlestr}" --backtitle "${backtitle}" --notags \
--menu "${menustr}" "${TTY_Y}" "${TTY_X}" $((TTY_Y - 8)) \
--cancel-button Exit --ok-button Select "${options[@]}" \
3>&1 1>&2 2>&3)
unset options
[[ -z $BUILD_OPT ]] && exit_with_error "No option selected"
[[ $BUILD_OPT == rootfs ]] && ROOT_FS_CREATE_ONLY="yes"
fi
if [[ ${BUILD_OPT} =~ kernel|image ]]; then
if [[ -z $KERNEL_CONFIGURE ]]; then
options+=("no" "Do not change the kernel configuration")
options+=("yes" "Show a kernel configuration menu before compilation")
menustr="Select the kernel configuration."
KERNEL_CONFIGURE=$(whiptail --title "${titlestr}" --backtitle "$backtitle" --notags \
--menu "${menustr}" $TTY_Y $TTY_X $((TTY_Y - 8)) \
--cancel-button Exit --ok-button Select "${options[@]}" \
3>&1 1>&2 2>&3)
unset options
[[ -z $KERNEL_CONFIGURE ]] && exit_with_error "No option selected"
fi
fi
if [[ -z $BOARD ]]; then
@ -246,6 +206,7 @@ if [[ -z $BOARD ]]; then
options+=("orangepi5plus" "Rockchip RK3588 octa core 4-32GB RAM 2.5GBE USB3 USB-C WiFi/BT NVMe eMMC")
options+=("orangepicm4" "Rockchip RK3566 quad core 2-8GB RAM GBE eMMC USB3 NvMe WiFi/BT")
options+=("orangepi3b" "Rockchip RK3566 quad core 2-8GB RAM GBE eMMC USB3 NvMe WiFi/BT")
options+=("orangepi6plus" "Cix P1 12-core 16-64GB RAM 5GBE USB3 USB-C WiFi/BT NVMe")
options+=("orangepirv" "Starfive JH7110 quad core 2-8GB RAM GBE USB3 NvMe WiFi/BT")
options+=("orangepirv2" "Ky X1 octa core 2-8GB RAM GBE USB3 WiFi/BT NVMe eMMC")
#options+=("orangepir2s" "Ky X1 octa core 2-8GB RAM 2.5GBE USB3 eMMC")
@ -269,6 +230,55 @@ LINUXFAMILY="${BOARDFAMILY}"
[[ -z $KERNEL_TARGET ]] && exit_with_error "Board configuration does not define valid kernel config"
# if BUILD_OPT, KERNEL_CONFIGURE, BOARD, BRANCH or RELEASE are not set, display selection menu
if [[ -z $BUILD_OPT ]]; then
if [[ $BOARDFAMILY != "cix" ]]; then
options+=("u-boot" "U-boot package")
fi
options+=("kernel" "Kernel package")
options+=("rootfs" "Rootfs and all deb packages")
options+=("image" "Full OS image for flashing")
if [[ $BOARDFAMILY != "cix" ]]; then
menustr="Compile image | rootfs | kernel | u-boot"
else
menustr="Compile image | rootfs | kernel"
fi
BUILD_OPT=$(whiptail --title "${titlestr}" --backtitle "${backtitle}" --notags \
--menu "${menustr}" "${TTY_Y}" "${TTY_X}" $((TTY_Y - 8)) \
--cancel-button Exit --ok-button Select "${options[@]}" \
3>&1 1>&2 2>&3)
unset options
[[ -z $BUILD_OPT ]] && exit_with_error "No option selected"
[[ $BUILD_OPT == rootfs ]] && ROOT_FS_CREATE_ONLY="yes"
fi
if [[ ${BUILD_OPT} =~ kernel|image ]]; then
if [[ -z $KERNEL_CONFIGURE ]]; then
options+=("no" "Do not change the kernel configuration")
options+=("yes" "Show a kernel configuration menu before compilation")
menustr="Select the kernel configuration."
KERNEL_CONFIGURE=$(whiptail --title "${titlestr}" --backtitle "$backtitle" --notags \
--menu "${menustr}" $TTY_Y $TTY_X $((TTY_Y - 8)) \
--cancel-button Exit --ok-button Select "${options[@]}" \
3>&1 1>&2 2>&3)
unset options
[[ -z $KERNEL_CONFIGURE ]] && exit_with_error "No option selected"
fi
fi
if [[ -z $BRANCH ]]; then
options=()
@ -438,7 +448,18 @@ if [[ ${IGNORE_UPDATES} != yes ]]; then
display_alert "Downloading sources" "" "info"
[[ $BUILD_OPT =~ u-boot|image ]] && fetch_from_repo "$BOOTSOURCE" "$BOOTDIR" "$BOOTBRANCH" "yes"
if [[ $BOARDFAMILY != "cix" ]]; then
[[ $BUILD_OPT =~ u-boot|image ]] && fetch_from_repo "$BOOTSOURCE" "$BOOTDIR" "$BOOTBRANCH" "yes"
fi
if [[ $BOARDFAMILY == "cix" ]]; then
fetch_from_repo "https://github.com/orangepi-xunlong/component_cix-$BRANCH.git" "${EXTER}/cache/sources/component_cix-$BRANCH" "branch:main"
fi
[[ $BUILD_OPT =~ kernel|image ]] && fetch_from_repo "$KERNELSOURCE" "$KERNELDIR" "$KERNELBRANCH" "yes"
if [[ -n ${ATFSOURCE} ]]; then
@ -520,18 +541,20 @@ done
# Compile u-boot if packed .deb does not exist or use the one from Orange Pi
if [[ $BUILD_OPT == u-boot || $BUILD_OPT == image ]]; then
if [[ ! -f "${DEB_STORAGE}"/u-boot/${CHOSEN_UBOOT}_${REVISION}_${ARCH}.deb ]]; then
if [[ $BOARDFAMILY != "cix" ]]; then
if [[ ! -f "${DEB_STORAGE}"/u-boot/${CHOSEN_UBOOT}_${REVISION}_${ARCH}.deb ]]; then
[[ -n "${ATFSOURCE}" && "${REPOSITORY_INSTALL}" != *u-boot* ]] && compile_atf
[[ ${REPOSITORY_INSTALL} != *u-boot* ]] && compile_uboot
fi
[[ -n "${ATFSOURCE}" && "${REPOSITORY_INSTALL}" != *u-boot* ]] && compile_atf
if [[ $BUILD_OPT == "u-boot" ]]; then
unset BUILD_MINIMAL BUILD_DESKTOP COMPRESS_OUTPUTIMAGE
display_alert "U-boot build done" "@host" "info"
display_alert "Target directory" "${DEB_STORAGE}/u-boot" "info"
display_alert "File name" "${CHOSEN_UBOOT}_${REVISION}_${ARCH}.deb" "info"
[[ ${REPOSITORY_INSTALL} != *u-boot* ]] && compile_uboot
fi
if [[ $BUILD_OPT == "u-boot" ]]; then
unset BUILD_MINIMAL BUILD_DESKTOP COMPRESS_OUTPUTIMAGE
display_alert "U-boot build done" "@host" "info"
display_alert "Target directory" "${DEB_STORAGE}/u-boot" "info"
display_alert "File name" "${CHOSEN_UBOOT}_${REVISION}_${ARCH}.deb" "info"
fi
fi
fi
@ -567,7 +590,7 @@ if [[ $BUILD_OPT == rootfs || $BUILD_OPT == image ]]; then
fi
# Compile plymouth-theme-orangepi if packed .deb does not exist or use the one from repository
if [[ ! -f ${DEB_STORAGE}/plymouth-theme-orangepi_${REVISION}_all.deb ]]; then
if [[ ! -f ${DEB_STORAGE}/plymouth-theme-orangepi_${REVISION}_all.deb && $PLYMOUTH == yes ]]; then
[[ "${REPOSITORY_INSTALL}" != *plymouth-theme-orangepi* ]] && compile_plymouth-theme-orangepi
fi