From 8a103cb7ecad171dae95614f323d08af5989f149 Mon Sep 17 00:00:00 2001 From: leeboby Date: Fri, 12 Dec 2025 16:19:52 +0800 Subject: [PATCH] OPi 6 Plus: Support Ubuntu24.04 --- .gitignore | 15 +- build.sh | 2 +- external/config/boards/orangepi6plus.conf | 1 + .../environments/gnome/config_base/packages | 70 +++- .../noble/environments/gnome/debian/postinst | 18 +- .../gnome/orangepi/create_desktop_package.sh | 318 +++++++++--------- .../kernel/linux-6.1-cix-p1-current.config | 105 +++--- .../kernel/linux-6.6-cix-p1-next.config | 101 +++--- external/config/sources/families/cix.conf | 80 ++++- .../orangepi/orangepi-hardware-optimization | 5 + .../bsp/overlays_cix/etc/gdm3/daemon.conf | 29 -- .../overlays_cix/usr/bin/install_bt_panel.sh | 6 +- .../bsp/overlays_cix/usr/bin/install_qt.sh | 4 +- .../bsp/overlays_cix/usr/bin/install_ros.sh | 103 ++++++ .../bsp/overlays_cix/usr/bin/spidev_test | Bin 0 -> 42856 bytes .../bsp/overlays_cix/usr/bin/test_ros.sh | 37 ++ scripts/general.sh | 16 +- 17 files changed, 572 insertions(+), 338 deletions(-) delete mode 100644 external/packages/bsp/overlays_cix/etc/gdm3/daemon.conf create mode 100755 external/packages/bsp/overlays_cix/usr/bin/install_ros.sh create mode 100755 external/packages/bsp/overlays_cix/usr/bin/spidev_test create mode 100755 external/packages/bsp/overlays_cix/usr/bin/test_ros.sh diff --git a/.gitignore b/.gitignore index d7a1da9fd1ba..8171991f8bad 100644 --- a/.gitignore +++ b/.gitignore @@ -36,23 +36,26 @@ external/cache/.gpg external/cache/hash external/cache/rootfs external/cache/sources/extra +external/cache/sources/wiringOP external/cache/sources/evalcache external/cache/sources/oh-my-zsh external/cache/sources/sunxi-tools external/cache/sources/rkbin-tools external/cache/sources/ffmpeg_kodi* +external/cache/sources/hi3403-tools +external/cache/sources/t527_packages +external/cache/sources/ascend-driver external/cache/sources/orangepi-test +external/cache/sources/component_cix* +external/cache/sources/wiringOP-Python external/cache/sources/rk3588_packages* external/cache/sources/rk356x_packages external/cache/sources/rk35xx_packages -external/cache/sources/t527_packages -external/cache/sources/sun60iw2_packages external/cache/sources/rk-rootfs-build* +external/cache/sources/sun60iw2_packages 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 +external/cache/sources/arm-trusted-firmware-2.2-hi3403 external/cache/sources/arm-trusted-firmware-sunxi-mainline +external/cache/debs/arm64/balenaEtcher-1.7.9+5945ab1f-arm64.AppImage external/cache/debs/arm64/balena-etcher-electron_1.7.9+5945ab1f_arm64.deb diff --git a/build.sh b/build.sh index 671abd18bf72..773f783121c2 100755 --- a/build.sh +++ b/build.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # # Copyright (c) 2013-2021 Igor Pecovnik, igor.pecovnik@gma**.com # diff --git a/external/config/boards/orangepi6plus.conf b/external/config/boards/orangepi6plus.conf index bdf381faf797..7875effb1cf3 100644 --- a/external/config/boards/orangepi6plus.conf +++ b/external/config/boards/orangepi6plus.conf @@ -4,6 +4,7 @@ BOARDFAMILY="cix" KERNEL_TARGET="current next" IMAGE_PARTITION_TABLE="gpt" DISTRIB_TYPE_CURRENT="bookworm" +DISTRIB_TYPE_NEXT="bookworm noble" MODULES_CURRENT="armcb_isp_v4l2 btusb" PLYMOUTH="no" BUILD_MINIMAL="no" diff --git a/external/config/desktop/noble/environments/gnome/config_base/packages b/external/config/desktop/noble/environments/gnome/config_base/packages index ab1e833cc222..e94e0cb34631 100644 --- a/external/config/desktop/noble/environments/gnome/config_base/packages +++ b/external/config/desktop/noble/environments/gnome/config_base/packages @@ -1,42 +1,87 @@ +alsa-ucm-conf anacron apt-xapian-index at-spi2-core +bluetooth +bluez-obexd +bluez-tools +cheese +clpeak +cmake colord +command-not-found cups dbus-x11 -dmz-cursor-theme dconf-cli +dconf-editor +dkms +dmidecode +dmz-cursor-theme eject -foomatic-db-compressed-ppds +ffmpeg +fonts-dejavu +fonts-liberation fonts-noto-cjk fonts-ubuntu fonts-ubuntu-console +foomatic-db-compressed-ppds +fswebcam gdebi +gdm3 +git-lfs +glmark2 +glmark2-es2 +glmark2-es2-wayland +glmark2-wayland +gnome +gnome-bluetooth 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-packagekit +gnome-remote-desktop +gnome-screenshot gnome-session gnome-shell gnome-shell-extension-appindicator +gnome-system-monitor +gnome-terminal +gparted +gpiod +gstreamer1.0-libav +gstreamer1.0-plugins-bad +gstreamer1.0-tools gvfs-backends +ibus +ibus-libpinyin +im-config inputattach +language-pack-zh-hans +libdrm-radeon1 +libgpiod2 +libgpiod-dev libnotify-bin -gdm3 +libreoffice +libreoffice-gtk3 +libxcb-dri2-0 lm-sensors +locales +mesa-utils +mpv nautilus nautilus-extension-gnome-terminal +obexftp pavucontrol printer-driver-all profile-sync-daemon -pulseaudio -pulseaudio-module-bluetooth +python3-dev +python3-pip +python-is-python3 +smartmontools +smplayer +snapd software-properties-gtk synaptic system-config-printer @@ -44,7 +89,11 @@ terminator tracker tracker-extract tracker-miner-fs +tree +ttf-mscorefonts-installer upower +v4l-utils +vulkan-tools x11-apps x11-session-utils x11-utils @@ -56,4 +105,3 @@ xfonts-base xserver-xorg xwayland zenity -tree diff --git a/external/config/desktop/noble/environments/gnome/debian/postinst b/external/config/desktop/noble/environments/gnome/debian/postinst index ee52254c5932..d8f0c7f10d08 100644 --- a/external/config/desktop/noble/environments/gnome/debian/postinst +++ b/external/config/desktop/noble/environments/gnome/debian/postinst @@ -1,11 +1,11 @@ -# 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 +## 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 # set wallpapper to armbian keys=/etc/dconf/db/local.d/00-bg @@ -17,7 +17,7 @@ install -Dv /dev/null $profile # set default shortcuts echo " [org/gnome/shell] -favorite-apps = ['terminator.desktop', 'org.gnome.Nautilus.desktop', 'chromium-browser.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' diff --git a/external/config/desktop/noble/environments/gnome/orangepi/create_desktop_package.sh b/external/config/desktop/noble/environments/gnome/orangepi/create_desktop_package.sh index 65267a1d277f..3df2d103dae7 100755 --- a/external/config/desktop/noble/environments/gnome/orangepi/create_desktop_package.sh +++ b/external/config/desktop/noble/environments/gnome/orangepi/create_desktop_package.sh @@ -1,164 +1,164 @@ -# install lightdm greeter -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 - -#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 - -# install wallpapers -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 +## install lightdm greeter +#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 +# +##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 +# +## install wallpapers +#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 # 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 < "${destination}"/usr/share/gnome-background-properties/orangepi.xml - - - - - OrangePi black-pyscho - /usr/share/backgrounds/orangepi/orangepi-default.png - zoom - #ffffff - #000000 - - - OrangePi bluie-circle - /usr/share/backgrounds/orangepi/orangepi-default.png - zoom - #ffffff - #000000 - - - OrangePi blue-monday - /usr/share/backgrounds/orangepi/orangepi-default.png - zoom - #ffffff - #000000 - - - OrangePi blue-penguin - /usr/share/backgrounds/orangepi/orangepi-default.png - zoom - #ffffff - #000000 - - - OrangePi gray-resultado - /usr/share/backgrounds/orangepi/orangepi-default.png - zoom - #ffffff - #000000 - - - OrangePi green-penguin - /usr/share/backgrounds/orangepi/orangepi-default.png - zoom - #ffffff - #000000 - - - OrangePi green-retro - /usr/share/backgrounds/orangepi/orangepi-default.png - zoom - #ffffff - #000000 - - - OrangePi green-wall-penguin - /usr/share/backgrounds/orangepi/orangepi-default.png - zoom - #ffffff - #000000 - - - OrangePi 4k-neglated - /usr/share/backgrounds/orangepi/orangepi-default.png - zoom - #ffffff - #000000 - - - OrangePi neon-gray-penguin - /usr/share/backgrounds/orangepi/orangepi-default.png - zoom - #ffffff - #000000 - - - OrangePi plastic-love - /usr/share/backgrounds/orangepi/orangepi-default.png - zoom - #ffffff - #000000 - - - OrangePi purple-penguine - /usr/share/backgrounds/orangepi/orangepi-default.png - zoom - #ffffff - #000000 - - - OrangePi purplepunk-resultado - /usr/share/backgrounds/orangepi/orangepi-default.png - zoom - #ffffff - #000000 - - - OrangePi red-penguin-dark - /usr/share/backgrounds/orangepi/orangepi-default.png - zoom - #ffffff - #000000 - - - OrangePi red-penguin - /usr/share/backgrounds/orangepi/orangepi-default.png - zoom - #ffffff - #000000 - - - OrangePi light - /usr/share/backgrounds/orangepi/orangepi-default.png - zoom - #ffffff - #000000 - - - OrangePi dark - /usr/share/backgrounds/orangepi/orangepi-default.png - zoom - #ffffff - #000000 - - - OrangePi uc - /usr/share/backgrounds/orangepi/orangepi-default.png - zoom - #ffffff - #000000 - - - OrangePi clear - /usr/share/backgrounds/orangepi/orangepi-default.png - zoom - #ffffff - #000000 - - -EOF +##generate wallpaper list for background changer +#mkdir -p "${destination}"/usr/share/gnome-background-properties +#cat < "${destination}"/usr/share/gnome-background-properties/orangepi.xml +# +# +# +# +# OrangePi black-pyscho +# /usr/share/backgrounds/orangepi/orangepi-default.png +# zoom +# #ffffff +# #000000 +# +# +# OrangePi bluie-circle +# /usr/share/backgrounds/orangepi/orangepi-default.png +# zoom +# #ffffff +# #000000 +# +# +# OrangePi blue-monday +# /usr/share/backgrounds/orangepi/orangepi-default.png +# zoom +# #ffffff +# #000000 +# +# +# OrangePi blue-penguin +# /usr/share/backgrounds/orangepi/orangepi-default.png +# zoom +# #ffffff +# #000000 +# +# +# OrangePi gray-resultado +# /usr/share/backgrounds/orangepi/orangepi-default.png +# zoom +# #ffffff +# #000000 +# +# +# OrangePi green-penguin +# /usr/share/backgrounds/orangepi/orangepi-default.png +# zoom +# #ffffff +# #000000 +# +# +# OrangePi green-retro +# /usr/share/backgrounds/orangepi/orangepi-default.png +# zoom +# #ffffff +# #000000 +# +# +# OrangePi green-wall-penguin +# /usr/share/backgrounds/orangepi/orangepi-default.png +# zoom +# #ffffff +# #000000 +# +# +# OrangePi 4k-neglated +# /usr/share/backgrounds/orangepi/orangepi-default.png +# zoom +# #ffffff +# #000000 +# +# +# OrangePi neon-gray-penguin +# /usr/share/backgrounds/orangepi/orangepi-default.png +# zoom +# #ffffff +# #000000 +# +# +# OrangePi plastic-love +# /usr/share/backgrounds/orangepi/orangepi-default.png +# zoom +# #ffffff +# #000000 +# +# +# OrangePi purple-penguine +# /usr/share/backgrounds/orangepi/orangepi-default.png +# zoom +# #ffffff +# #000000 +# +# +# OrangePi purplepunk-resultado +# /usr/share/backgrounds/orangepi/orangepi-default.png +# zoom +# #ffffff +# #000000 +# +# +# OrangePi red-penguin-dark +# /usr/share/backgrounds/orangepi/orangepi-default.png +# zoom +# #ffffff +# #000000 +# +# +# OrangePi red-penguin +# /usr/share/backgrounds/orangepi/orangepi-default.png +# zoom +# #ffffff +# #000000 +# +# +# OrangePi light +# /usr/share/backgrounds/orangepi/orangepi-default.png +# zoom +# #ffffff +# #000000 +# +# +# OrangePi dark +# /usr/share/backgrounds/orangepi/orangepi-default.png +# zoom +# #ffffff +# #000000 +# +# +# OrangePi uc +# /usr/share/backgrounds/orangepi/orangepi-default.png +# zoom +# #ffffff +# #000000 +# +# +# OrangePi clear +# /usr/share/backgrounds/orangepi/orangepi-default.png +# zoom +# #ffffff +# #000000 +# +# +#EOF diff --git a/external/config/kernel/linux-6.1-cix-p1-current.config b/external/config/kernel/linux-6.1-cix-p1-current.config index d80bdc6d6f1c..e37f94097596 100644 --- a/external/config/kernel/linux-6.1-cix-p1-current.config +++ b/external/config/kernel/linux-6.1-cix-p1-current.config @@ -5865,60 +5865,61 @@ CONFIG_USB_ISP1760_DUAL_ROLE=y # USB port drivers # CONFIG_USB_SERIAL=y -# CONFIG_USB_SERIAL_CONSOLE is not set +CONFIG_USB_SERIAL_CONSOLE=y CONFIG_USB_SERIAL_GENERIC=y -# CONFIG_USB_SERIAL_SIMPLE is not set -# CONFIG_USB_SERIAL_AIRCABLE is not set -# CONFIG_USB_SERIAL_ARK3116 is not set -# CONFIG_USB_SERIAL_BELKIN is not set -# CONFIG_USB_SERIAL_CH341 is not set -# CONFIG_USB_SERIAL_WHITEHEAT is not set -# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +CONFIG_USB_SERIAL_SIMPLE=m +CONFIG_USB_SERIAL_AIRCABLE=m +CONFIG_USB_SERIAL_ARK3116=m +CONFIG_USB_SERIAL_BELKIN=m +CONFIG_USB_SERIAL_CH341=m +CONFIG_USB_SERIAL_WHITEHEAT=m +CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m CONFIG_USB_SERIAL_CP210X=m -# CONFIG_USB_SERIAL_CYPRESS_M8 is not set -# CONFIG_USB_SERIAL_EMPEG is not set +CONFIG_USB_SERIAL_CYPRESS_M8=m +CONFIG_USB_SERIAL_EMPEG=m CONFIG_USB_SERIAL_FTDI_SIO=m -# CONFIG_USB_SERIAL_VISOR is not set -# CONFIG_USB_SERIAL_IPAQ is not set -# CONFIG_USB_SERIAL_IR is not set -# CONFIG_USB_SERIAL_EDGEPORT is not set -# CONFIG_USB_SERIAL_EDGEPORT_TI is not set -# CONFIG_USB_SERIAL_F81232 is not set -# CONFIG_USB_SERIAL_F8153X is not set -# CONFIG_USB_SERIAL_GARMIN is not set -# CONFIG_USB_SERIAL_IPW is not set -# CONFIG_USB_SERIAL_IUU is not set -# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set -# CONFIG_USB_SERIAL_KEYSPAN is not set -# CONFIG_USB_SERIAL_KLSI is not set -# CONFIG_USB_SERIAL_KOBIL_SCT is not set -# CONFIG_USB_SERIAL_MCT_U232 is not set -# CONFIG_USB_SERIAL_METRO is not set -# CONFIG_USB_SERIAL_MOS7720 is not set -# CONFIG_USB_SERIAL_MOS7840 is not set -# CONFIG_USB_SERIAL_MXUPORT is not set -# CONFIG_USB_SERIAL_NAVMAN is not set -# CONFIG_USB_SERIAL_PL2303 is not set -# CONFIG_USB_SERIAL_OTI6858 is not set -# CONFIG_USB_SERIAL_QCAUX is not set -CONFIG_USB_SERIAL_QUALCOMM=y -# CONFIG_USB_SERIAL_SPCP8X5 is not set -# CONFIG_USB_SERIAL_SAFE is not set -# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set -# CONFIG_USB_SERIAL_SYMBOL is not set -# CONFIG_USB_SERIAL_TI is not set -# CONFIG_USB_SERIAL_CYBERJACK is not set -CONFIG_USB_SERIAL_WWAN=y -CONFIG_USB_SERIAL_OPTION=y -# CONFIG_USB_SERIAL_OMNINET is not set -# CONFIG_USB_SERIAL_OPTICON is not set -# CONFIG_USB_SERIAL_XSENS_MT is not set -# CONFIG_USB_SERIAL_WISHBONE is not set -# CONFIG_USB_SERIAL_SSU100 is not set -CONFIG_USB_SERIAL_QT2=y -# CONFIG_USB_SERIAL_UPD78F0730 is not set -# CONFIG_USB_SERIAL_XR is not set -# CONFIG_USB_SERIAL_DEBUG is not set +CONFIG_USB_SERIAL_VISOR=m +CONFIG_USB_SERIAL_IPAQ=m +CONFIG_USB_SERIAL_IR=m +CONFIG_USB_SERIAL_EDGEPORT=m +CONFIG_USB_SERIAL_EDGEPORT_TI=m +CONFIG_USB_SERIAL_F81232=m +CONFIG_USB_SERIAL_F8153X=m +CONFIG_USB_SERIAL_GARMIN=m +CONFIG_USB_SERIAL_IPW=m +CONFIG_USB_SERIAL_IUU=m +CONFIG_USB_SERIAL_KEYSPAN_PDA=y +CONFIG_USB_SERIAL_KEYSPAN=m +CONFIG_USB_SERIAL_KLSI=m +CONFIG_USB_SERIAL_KOBIL_SCT=m +CONFIG_USB_SERIAL_MCT_U232=m +CONFIG_USB_SERIAL_METRO=m +CONFIG_USB_SERIAL_MOS7720=m +CONFIG_USB_SERIAL_MOS7840=m +CONFIG_USB_SERIAL_MXUPORT=m +CONFIG_USB_SERIAL_NAVMAN=m +CONFIG_USB_SERIAL_PL2303=m +CONFIG_USB_SERIAL_OTI6858=m +CONFIG_USB_SERIAL_QCAUX=m +CONFIG_USB_SERIAL_QUALCOMM=m +CONFIG_USB_SERIAL_SPCP8X5=m +CONFIG_USB_SERIAL_SAFE=m +CONFIG_USB_SERIAL_SAFE_PADDED=y +CONFIG_USB_SERIAL_SIERRAWIRELESS=m +CONFIG_USB_SERIAL_SYMBOL=m +CONFIG_USB_SERIAL_TI=m +CONFIG_USB_SERIAL_CYBERJACK=m +CONFIG_USB_SERIAL_WWAN=m +CONFIG_USB_SERIAL_OPTION=m +CONFIG_USB_SERIAL_OMNINET=m +CONFIG_USB_SERIAL_OPTICON=m +CONFIG_USB_SERIAL_XSENS_MT=m +CONFIG_USB_SERIAL_WISHBONE=m +CONFIG_USB_SERIAL_SSU100=m +CONFIG_USB_SERIAL_QT2=m +CONFIG_USB_SERIAL_UPD78F0730=m +CONFIG_USB_SERIAL_XR=m +CONFIG_USB_SERIAL_DEBUG=m # # USB Miscellaneous drivers @@ -5943,7 +5944,7 @@ CONFIG_USB_TEST=y # CONFIG_USB_EHSET_TEST_FIXTURE is not set # CONFIG_USB_ISIGHTFW is not set # CONFIG_USB_YUREX is not set -# CONFIG_USB_EZUSB_FX2 is not set +CONFIG_USB_EZUSB_FX2=y # CONFIG_USB_HUB_USB251XB is not set CONFIG_USB_HSIC_USB3503=y # CONFIG_USB_HSIC_USB4604 is not set diff --git a/external/config/kernel/linux-6.6-cix-p1-next.config b/external/config/kernel/linux-6.6-cix-p1-next.config index b7f3f06cd698..be34de90bd98 100644 --- a/external/config/kernel/linux-6.6-cix-p1-next.config +++ b/external/config/kernel/linux-6.6-cix-p1-next.config @@ -6168,60 +6168,61 @@ CONFIG_USB_ISP1760_DUAL_ROLE=y # USB port drivers # CONFIG_USB_SERIAL=y -# CONFIG_USB_SERIAL_CONSOLE is not set +CONFIG_USB_SERIAL_CONSOLE=y CONFIG_USB_SERIAL_GENERIC=y -# CONFIG_USB_SERIAL_SIMPLE is not set -# CONFIG_USB_SERIAL_AIRCABLE is not set -# CONFIG_USB_SERIAL_ARK3116 is not set -# CONFIG_USB_SERIAL_BELKIN is not set -# CONFIG_USB_SERIAL_CH341 is not set -# CONFIG_USB_SERIAL_WHITEHEAT is not set -# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set +CONFIG_USB_SERIAL_SIMPLE=m +CONFIG_USB_SERIAL_AIRCABLE=m +CONFIG_USB_SERIAL_ARK3116=m +CONFIG_USB_SERIAL_BELKIN=m +CONFIG_USB_SERIAL_CH341=m +CONFIG_USB_SERIAL_WHITEHEAT=m +CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m CONFIG_USB_SERIAL_CP210X=m -# CONFIG_USB_SERIAL_CYPRESS_M8 is not set -# CONFIG_USB_SERIAL_EMPEG is not set +CONFIG_USB_SERIAL_CYPRESS_M8=m +CONFIG_USB_SERIAL_EMPEG=m CONFIG_USB_SERIAL_FTDI_SIO=m -# CONFIG_USB_SERIAL_VISOR is not set -# CONFIG_USB_SERIAL_IPAQ is not set -# CONFIG_USB_SERIAL_IR is not set -# CONFIG_USB_SERIAL_EDGEPORT is not set -# CONFIG_USB_SERIAL_EDGEPORT_TI is not set -# CONFIG_USB_SERIAL_F81232 is not set -# CONFIG_USB_SERIAL_F8153X is not set -# CONFIG_USB_SERIAL_GARMIN is not set -# CONFIG_USB_SERIAL_IPW is not set -# CONFIG_USB_SERIAL_IUU is not set -# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set -# CONFIG_USB_SERIAL_KEYSPAN is not set -# CONFIG_USB_SERIAL_KLSI is not set -# CONFIG_USB_SERIAL_KOBIL_SCT is not set -# CONFIG_USB_SERIAL_MCT_U232 is not set -# CONFIG_USB_SERIAL_METRO is not set -# CONFIG_USB_SERIAL_MOS7720 is not set -# CONFIG_USB_SERIAL_MOS7840 is not set -# CONFIG_USB_SERIAL_MXUPORT is not set -# CONFIG_USB_SERIAL_NAVMAN is not set -# CONFIG_USB_SERIAL_PL2303 is not set -# CONFIG_USB_SERIAL_OTI6858 is not set -# CONFIG_USB_SERIAL_QCAUX is not set -CONFIG_USB_SERIAL_QUALCOMM=y -# CONFIG_USB_SERIAL_SPCP8X5 is not set -# CONFIG_USB_SERIAL_SAFE is not set -# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set -# CONFIG_USB_SERIAL_SYMBOL is not set -# CONFIG_USB_SERIAL_TI is not set -# CONFIG_USB_SERIAL_CYBERJACK is not set +CONFIG_USB_SERIAL_VISOR=m +CONFIG_USB_SERIAL_IPAQ=m +CONFIG_USB_SERIAL_IR=m +CONFIG_USB_SERIAL_EDGEPORT=m +CONFIG_USB_SERIAL_EDGEPORT_TI=m +CONFIG_USB_SERIAL_F81232=m +CONFIG_USB_SERIAL_F8153X=m +CONFIG_USB_SERIAL_GARMIN=m +CONFIG_USB_SERIAL_IPW=m +CONFIG_USB_SERIAL_IUU=m +CONFIG_USB_SERIAL_KEYSPAN_PDA=m +CONFIG_USB_SERIAL_KEYSPAN=m +CONFIG_USB_SERIAL_KLSI=m +CONFIG_USB_SERIAL_KOBIL_SCT=m +CONFIG_USB_SERIAL_MCT_U232=m +CONFIG_USB_SERIAL_METRO=m +CONFIG_USB_SERIAL_MOS7720=m +CONFIG_USB_SERIAL_MOS7840=m +CONFIG_USB_SERIAL_MXUPORT=m +CONFIG_USB_SERIAL_NAVMAN=m +CONFIG_USB_SERIAL_PL2303=m +CONFIG_USB_SERIAL_OTI6858=m +CONFIG_USB_SERIAL_QCAUX=m +CONFIG_USB_SERIAL_QUALCOMM=m +CONFIG_USB_SERIAL_SPCP8X5=m +CONFIG_USB_SERIAL_SAFE=m +CONFIG_USB_SERIAL_SAFE_PADDED=y +CONFIG_USB_SERIAL_SIERRAWIRELESS=m +CONFIG_USB_SERIAL_SYMBOL=m +CONFIG_USB_SERIAL_TI=m +CONFIG_USB_SERIAL_CYBERJACK=m CONFIG_USB_SERIAL_WWAN=y CONFIG_USB_SERIAL_OPTION=y -# CONFIG_USB_SERIAL_OMNINET is not set -# CONFIG_USB_SERIAL_OPTICON is not set -# CONFIG_USB_SERIAL_XSENS_MT is not set -# CONFIG_USB_SERIAL_WISHBONE is not set -# CONFIG_USB_SERIAL_SSU100 is not set -CONFIG_USB_SERIAL_QT2=y -# CONFIG_USB_SERIAL_UPD78F0730 is not set -# CONFIG_USB_SERIAL_XR is not set -# CONFIG_USB_SERIAL_DEBUG is not set +CONFIG_USB_SERIAL_OMNINET=m +CONFIG_USB_SERIAL_OPTICON=m +CONFIG_USB_SERIAL_XSENS_MT=m +CONFIG_USB_SERIAL_WISHBONE=m +CONFIG_USB_SERIAL_SSU100=m +CONFIG_USB_SERIAL_QT2=m +CONFIG_USB_SERIAL_UPD78F0730=m +CONFIG_USB_SERIAL_XR=m +CONFIG_USB_SERIAL_DEBUG=m # # USB Miscellaneous drivers @@ -6245,7 +6246,7 @@ CONFIG_USB_TEST=y # CONFIG_USB_EHSET_TEST_FIXTURE is not set # CONFIG_USB_ISIGHTFW is not set # CONFIG_USB_YUREX is not set -# CONFIG_USB_EZUSB_FX2 is not set +CONFIG_USB_EZUSB_FX2=m # CONFIG_USB_HUB_USB251XB is not set CONFIG_USB_HSIC_USB3503=y # CONFIG_USB_HSIC_USB4604 is not set diff --git a/external/config/sources/families/cix.conf b/external/config/sources/families/cix.conf index 99c87f1200fa..fad563a3d1bd 100644 --- a/external/config/sources/families/cix.conf +++ b/external/config/sources/families/cix.conf @@ -248,10 +248,12 @@ family_tweaks_kernel () { install_cix_debs() { [[ $BUILD_DESKTOP != yes ]] && return - [[ ${RELEASE} == noble ]] && return display_alert "Installing" "Cix debs" "info" + rm -rf ${SDCARD}/bin/sh + run_on_sdcard "ln -sf /bin/bash /bin/sh" + local POOL_PATH=${EXTER}/cache/sources/component_cix-${BRANCH}/cix_proprietary/cix_proprietary-debs local DEB_PATH=${SDCARD}/root/debs @@ -260,18 +262,27 @@ install_cix_debs() { cp -fp $POOL_PATH/pool/main/*/*/*.deb ${DEB_PATH}/ cp -fp $POOL_PATH/pool/main/*/*.deb ${DEB_PATH}/ fi - cp ${EXTER}/cache/sources/component_cix-${BRANCH}/debs/*.deb ${DEB_PATH}/ - chroot $SDCARD /bin/bash -e -c "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 + if [[ ${RELEASE} == noble ]]; then + cp ${EXTER}/cache/sources/component_cix-${BRANCH}/debs/cix-npu-onnxruntime*.deb ${DEB_PATH}/ + cp ${EXTER}/cache/sources/component_cix-${BRANCH}/ubuntu_debs/*.deb ${DEB_PATH}/ - 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" - dpkg_install_deb_chroot "${EXTER}/cache/sources/component_cix-${BRANCH}/debs_manual/gnome-core_arm64.deb" + chroot $SDCARD /bin/bash -e -c "apt-get -y --allow-downgrades install /root/debs/*.deb" + rm ${DEB_PATH} -rf + else + cp ${EXTER}/cache/sources/component_cix-${BRANCH}/debs/*.deb ${DEB_PATH}/ + + chroot $SDCARD /bin/bash -e -c "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 + + 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" + dpkg_install_deb_chroot "${EXTER}/cache/sources/component_cix-${BRANCH}/debs_manual/gnome-core_arm64.deb" + fi rm $SDCARD/root/*.deb >/dev/null 2>&1 } @@ -313,6 +324,32 @@ family_tweaks() { fi run_on_sdcard "systemctl --no-reload enable isp-daemon.service >/dev/null 2>&1" + #run_on_sdcard "apt-get -qqy install libgpiod-dev libgpiod2 gpiod >/dev/null 2>&1" + + if [[ ${RELEASE} == noble ]]; then + sed -i 's/^# *AutomaticLoginEnable.*/AutomaticLoginEnable = true/' ${SDCARD}/etc/gdm3/custom.conf + sed -i "s/^# *AutomaticLogin.*/AutomaticLogin = ${OPI_USERNAME}/" ${SDCARD}/etc/gdm3/custom.conf + + # fix cix chromium + cp ${EXTER}/cache/sources/component_cix-${BRANCH}/ubuntu_debs/libjpeg.so.62 $SDCARD/usr/lib/aarch64-linux-gnu/ + + run_on_sdcard "apt-mark hold \ + gstreamer1.0-gl \ + gstreamer1.0-gtk3 \ + gstreamer1.0-plugins-base \ + gstreamer1.0-plugins-base-apps \ + gstreamer1.0-plugins-good \ + gstreamer1.0-pulseaudio \ + gir1.2-gst-plugins-base-1.0 \ + libgstreamer-plugins-base1.0-0 \ + libgstreamer-plugins-good1.0-0 \ + libavcodec60 \ + xwayland" + else + sed -i 's/^# *AutomaticLoginEnable.*/AutomaticLoginEnable = true/' ${SDCARD}/etc/gdm3/daemon.conf + sed -i "s/^# *AutomaticLogin.*/AutomaticLogin = ${OPI_USERNAME}/" ${SDCARD}/etc/gdm3/daemon.conf + fi + rm $SDCARD/root/*.deb >/dev/null 2>&1 } @@ -322,15 +359,26 @@ install_balenaEtcher(){ [[ ${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 [[ ${RELEASE} == backup ]]; then + balena_etcher_name=balenaEtcher-1.7.9+5945ab1f-arm64.AppImage + else + balena_etcher_name=balena-etcher-electron_1.7.9+5945ab1f_arm64.deb + fi + + balena_etcher_url="https://github.com/Itai-Nelken/BalenaEtcher-arm/releases/download/v1.7.9/${balena_etcher_name}" + balena_etcher=${EXTER}/cache/debs/arm64/${balena_etcher_name} 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 + if [[ ${RELEASE} == backup ]]; then + display_alert "Installing" "${balena_etcher_name}" "info" + cp ${balena_etcher} $SDCARD/opt/ + chmod +x $SDCARD/opt/${balena_etcher_name} + else + install_deb_chroot ${balena_etcher} + rm $SDCARD/root/*.deb >/dev/null 2>&1 + fi fi } diff --git a/external/packages/bsp/common/usr/lib/orangepi/orangepi-hardware-optimization b/external/packages/bsp/common/usr/lib/orangepi/orangepi-hardware-optimization index e2570d211a8f..47dae4c51e6c 100755 --- a/external/packages/bsp/common/usr/lib/orangepi/orangepi-hardware-optimization +++ b/external/packages/bsp/common/usr/lib/orangepi/orangepi-hardware-optimization @@ -212,6 +212,11 @@ prepare_board() { --baudrate 1500000 --patchram /lib/firmware/SYN43711A0.hcd /dev/ttyS7 & fi ;; + orangepi6plus) + if [ ! -e /dev/dma_heap/linux,cma ]; then + ln -s /dev/dma_heap/reserved /dev/dma_heap/linux,cma + fi + ;; orangepi3-lts) #aplay /usr/share/sounds/alsa/audio.wav -D hw:0,0 > /dev/null 2>&1 rfkill unblock all diff --git a/external/packages/bsp/overlays_cix/etc/gdm3/daemon.conf b/external/packages/bsp/overlays_cix/etc/gdm3/daemon.conf deleted file mode 100644 index 9c19633231d7..000000000000 --- a/external/packages/bsp/overlays_cix/etc/gdm3/daemon.conf +++ /dev/null @@ -1,29 +0,0 @@ -# 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 diff --git a/external/packages/bsp/overlays_cix/usr/bin/install_bt_panel.sh b/external/packages/bsp/overlays_cix/usr/bin/install_bt_panel.sh index 0df0464c93ca..7550fddfcd96 100755 --- a/external/packages/bsp/overlays_cix/usr/bin/install_bt_panel.sh +++ b/external/packages/bsp/overlays_cix/usr/bin/install_bt_panel.sh @@ -1,4 +1,6 @@ #!/bin/bash -wget -O install.sh \ -http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh +#wget -O install.sh \ +#http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh + +if [ -f /usr/bin/curl ];then curl -sSO https://download.bt.cn/install/install_panel.sh;else wget -O install_panel.sh https://download.bt.cn/install/install_panel.sh;fi;bash install_panel.sh ssl251104 diff --git a/external/packages/bsp/overlays_cix/usr/bin/install_qt.sh b/external/packages/bsp/overlays_cix/usr/bin/install_qt.sh index cca794a6f52f..c0e89e4c5dff 100755 --- a/external/packages/bsp/overlays_cix/usr/bin/install_qt.sh +++ b/external/packages/bsp/overlays_cix/usr/bin/install_qt.sh @@ -5,7 +5,7 @@ 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 +elif [[ $release =~ bullseye|bookworm|jammy|noble ]]; 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!" @@ -14,7 +14,7 @@ fi sudo apt-get -y install qtcreator qmlscene gdb qtdeclarative5-dev qtbase5-examples cmake -if [[ $release =~ bookworm ]]; then +if [[ $release =~ bookworm|noble ]]; then sudo apt-get -y install qt6-wayland qtwayland5 sudo apt-get -y install libegl1-mesa-dev libgles2-mesa-dev fi diff --git a/external/packages/bsp/overlays_cix/usr/bin/install_ros.sh b/external/packages/bsp/overlays_cix/usr/bin/install_ros.sh new file mode 100755 index 000000000000..a8a2f46beaf1 --- /dev/null +++ b/external/packages/bsp/overlays_cix/usr/bin/install_ros.sh @@ -0,0 +1,103 @@ +#!/bin/bash + +#mirror_url=http://mirrors.ustc.edu.cn +mirror_url=https://repo.huaweicloud.com + +if [[ -n $1 && $1 =~ ros1|ros2 ]]; then + version=$1 +else + echo "usage: install_ros.sh ros1/ros2" + exit +fi + +release=$(lsb_release -cs) + +if [[ $version == "ros1" && $release =~ focal ]]; then + + [[ -f /etc/apt/sources.list.d/ros-latest.list ]] && sudo rm /etc/apt/sources.list.d/ros-latest.list + sudo sh -c "echo deb ${mirror_url}/ros/ubuntu $(lsb_release -sc) main > /etc/apt/sources.list.d/ros1.list" + sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 + sudo apt update + sudo apt install -y ros-noetic-desktop-full + + sudo sh -c 'echo "source /opt/ros/noetic/setup.bash" >> /root/.bashrc' + echo "source /opt/ros/noetic/setup.bash" >> /home/orangepi/.bashrc + + sudo apt install -y python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential + + sudo sh -c 'echo "151.101.84.133 raw.githubusercontent.com" >> /etc/hosts' + source /opt/ros/noetic/setup.bash + sudo rosdep init + rosdep update + + exit +fi + +if [[ $version == "ros2" && $release =~ focal ]]; then + + sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 + echo "deb [arch=$(dpkg --print-architecture)] ${mirror_url}/ros2/ubuntu $(source /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list + + sudo apt update + sudo apt install -y ros-galactic-desktop + sudo apt install -y ros-dev-tools + + sudo sh -c 'echo "source /opt/ros/galactic/setup.bash" >> /root/.bashrc' + echo "source /opt/ros/galactic/setup.bash" >> /home/orangepi/.bashrc + + source /opt/ros/galactic/setup.bash + ros2 -h + + exit + +fi + +if [[ $version == "ros2" && $release =~ jammy ]]; then + + sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 + echo "deb [arch=$(dpkg --print-architecture)] ${mirror_url}/ros2/ubuntu $(source /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list + + sudo apt update + sudo apt install -y ros-humble-desktop + sudo apt install -y ros-dev-tools + + sudo sh -c 'echo "source /opt/ros/humble/setup.bash" >> /root/.bashrc' + echo "source /opt/ros/humble/setup.bash" >> /home/orangepi/.bashrc + + source /opt/ros/humble/setup.bash + ros2 -h + + exit + +fi + +if [[ $version == "ros2" && $release =~ noble ]]; then + + sudo locale-gen en_US en_US.UTF-8 + sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 + export LANG=en_US.UTF-8 + sudo apt install -y software-properties-common curl gnupg2 + + sudo sh -c 'echo "deb https://mirrors.huaweicloud.com/ros2/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros2-latest.list' + curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add - + + sudo apt update + sudo apt install -y ros-jazzy-desktop-full + sudo apt install -y python3-colcon-common-extensions \ + python3-rosdep \ + python3-rosinstall-generator \ + python3-pip \ + build-essential + sudo apt install -y ros-dev-tools + + sudo sh -c 'echo "source /opt/ros/jazzy/setup.bash" >> /root/.bashrc' + echo "source /opt/ros/jazzy/setup.bash" >> /home/orangepi/.bashrc + + source /opt/ros/jazzy/setup.bash + ros2 -h + + exit + +fi + +echo "Unsupported System!" diff --git a/external/packages/bsp/overlays_cix/usr/bin/spidev_test b/external/packages/bsp/overlays_cix/usr/bin/spidev_test new file mode 100755 index 0000000000000000000000000000000000000000..84b4bcfac9f3755957a013a740b60301400cc7a5 GIT binary patch literal 42856 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 HfQtVET79Xg literal 0 HcmV?d00001 diff --git a/external/packages/bsp/overlays_cix/usr/bin/test_ros.sh b/external/packages/bsp/overlays_cix/usr/bin/test_ros.sh new file mode 100755 index 000000000000..26344f39c97a --- /dev/null +++ b/external/packages/bsp/overlays_cix/usr/bin/test_ros.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +if [[ -f /opt/ros/noetic/setup.bash ]]; then + + source /opt/ros/noetic/setup.bash + roscore & + + sleep 5 + + rosrun turtlesim turtlesim_node & + rosrun turtlesim turtle_teleop_key + +fi + +if [[ -f /opt/ros/galactic/setup.bash ]]; then + + source /opt/ros/galactic/setup.bash + ros2 run demo_nodes_cpp talker & + ros2 run demo_nodes_py listener + +fi + +if [[ -f /opt/ros/humble/setup.bash ]]; then + + source /opt/ros/humble/setup.bash + ros2 run demo_nodes_cpp talker & + ros2 run demo_nodes_py listener + +fi + +if [[ -f /opt/ros/jazzy/setup.bash ]]; then + + source /opt/ros/jazzy/setup.bash + ros2 run demo_nodes_cpp talker & + ros2 run demo_nodes_py listener + +fi diff --git a/scripts/general.sh b/scripts/general.sh index 35dc0eccd9bd..84ed0a6bdd9d 100755 --- a/scripts/general.sh +++ b/scripts/general.sh @@ -227,7 +227,7 @@ create_sources_list() EOF ;; - xenial|bionic|focal|hirsute|impish|jammy|noble) + xenial|bionic|focal|hirsute|impish|jammy) cat <<-EOF > "${basedir}"/etc/apt/sources.list deb http://${UBUNTU_MIRROR} $release main restricted universe multiverse #deb-src http://${UBUNTU_MIRROR} $release main restricted universe multiverse @@ -243,6 +243,20 @@ create_sources_list() EOF ;; + noble) + distro="ubuntu" + # Drop deboostrap sources leftovers + rm -f "${basedir}/etc/apt/sources.list" + + cat <<- EOF > "${basedir}/etc/apt/sources.list.d/${distro}.sources" + Types: deb + URIs: http://${UBUNTU_MIRROR} + Suites: ${release} ${release}-security ${release}-updates ${release}-backports + Components: main restricted universe multiverse + Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg + EOF + ;; + raspi) cat <<-EOF > "${basedir}"/etc/apt/sources.list deb http://${DEBIAN_MIRROR} bullseye main contrib non-free