first commit

This commit is contained in:
Your Name
2026-02-07 20:22:48 +08:00
commit 1b9711d5e4
2270 changed files with 805872 additions and 0 deletions

Binary file not shown.

View File

@@ -0,0 +1,44 @@
#!/bin/bash
killall brcm_patchram_plus1
echo 0 > /sys/class/rfkill/rfkill0/state
sleep 2
echo 1 > /sys/class/rfkill/rfkill0/state
sleep 2
COMPATIBLE=$(cat /proc/device-tree/compatible)
if [[ $(expr $COMPATIBLE : ".*rk3588") -ne 0 ]]; then
brcm_patchram_plus1 --bd_addr_rand --enable_hci --no2bytes --use_baudrate_for_download --tosleep 200000 --baudrate 1500000 --patchram /system/etc/firmware/ /dev/ttyS8 &
hciconfig hci0 up
sleep 1
elif [[ $(expr $COMPATIBLE : ".*rk3568") -ne 0 ]]; then
brcm_patchram_plus1 --bd_addr_rand --enable_hci --no2bytes --use_baudrate_for_download --tosleep 200000 --baudrate 1500000 --patchram /system/etc/firmware/ /dev/ttyS8 &
hciconfig hci0 up
sleep 1
elif [[ $(expr $COMPATIBLE : ".*rk3566") -ne 0 ]]; then
brcm_patchram_plus1 --bd_addr_rand --enable_hci --no2bytes --use_baudrate_for_download --tosleep 200000 --baudrate 1500000 --patchram /system/etc/firmware/ /dev/ttyS0 &
hciconfig hci0 up
sleep 1
elif [[ $(expr $COMPATIBLE : ".*rk3399") -ne 0 ]]; then
brcm_patchram_plus1 --bd_addr_rand --enable_hci --no2bytes --use_baudrate_for_download --tosleep 200000 --baudrate 1500000 --patchram /system/etc/firmware/ /dev/ttyS0 &
hciconfig hci0 up
sleep 1
elif [[ $(expr $COMPATIBLE : ".*rk3288") -ne 0 ]]; then
brcm_patchram_plus1 --bd_addr_rand --enable_hci --no2bytes --use_baudrate_for_download --tosleep 200000 --baudrate 1500000 --patchram /system/etc/firmware/ /dev/ttyS0 &
hciconfig hci0 up
sleep 1
elif [[ $(expr $COMPATIBLE : ".*rk3326") -ne 0 ]]; then
brcm_patchram_plus1 --bd_addr_rand --enable_hci --no2bytes --use_baudrate_for_download --tosleep 200000 --baudrate 1500000 --patchram /system/etc/firmware/ /dev/ttyS1 &
hciconfig hci0 up
sleep 1
elif [[ $(expr $COMPATIBLE : ".*px30") -ne 0 ]]; then
brcm_patchram_plus1 --bd_addr_rand --enable_hci --no2bytes --use_baudrate_for_download --tosleep 200000 --baudrate 1500000 --patchram /system/etc/firmware/ /dev/ttyS1 &
hciconfig hci0 up
sleep 1
else
brcm_patchram_plus1 --bd_addr_rand --enable_hci --no2bytes --use_baudrate_for_download --tosleep 200000 --baudrate 1500000 --patchram /system/etc/firmware/ /dev/ttyS0 &
hciconfig hci0 up
sleep 1
fi

View File

@@ -0,0 +1,5 @@
#!/bin/sh
killall start_rknn.sh > /dev/null 2>&1
killall rknn_server > /dev/null 2>&1
start_rknn.sh &

Binary file not shown.

BIN
external/packages/bsp/rk356x/usr/bin/rknn_demo vendored Executable file

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,7 @@
#!/bin/sh
while true
do
sleep 1
rknn_server #>/dev/null 2>&1
done

View File

@@ -0,0 +1,25 @@
#! /bin/sh
sleep 1
dev_path=/sys$1
state=`cat ${dev_path}/state`
if [ "$state"x != "config"x ] ; then
UDC=`ls /sys/class/udc/| awk '{print $1}'`
echo $UDC > /sys/kernel/config/usb_gadget/rockchip/UDC
functions=`cat /sys/kernel/config/usb_gadget/rockchip/configs/b.1/strings/0x409/configuration`
# if no "_" string to "cut" command, it will set the full string to output.
# add "_" to string functions avoiding no "_" case
i=2
functions=_${functions}
tmp=`echo $functions | cut -d _ -f $i`
until [ -z "$tmp" ]; do
if [ "$tmp" == "mtp" ]; then
mtp-server&
break
fi
i=`expr $i + 1`
tmp=`echo $functions | cut -d _ -f $i`
done
fi

620
external/packages/bsp/rk356x/usr/bin/usbdevice vendored Executable file
View File

@@ -0,0 +1,620 @@
#!/bin/sh -e
# Uncomment below to see more logs
# set -x
# Load default env variables from profiles
. /etc/profile
LOG_FILE=/tmp/usbdevice.log
USB_FUNCS_FILE=/tmp/.usbdevice
alias usb_enable='touch $USB_FUNCS_FILE'
alias usb_disable='rm -f $USB_FUNCS_FILE'
alias usb_is_enabled='[ -f $USB_FUNCS_FILE ]'
alias usb_set_started='echo $USB_FUNCS > $USB_FUNCS_FILE'
usb_get_started()
{
usb_is_enabled || return 0
cat $USB_FUNCS_FILE
}
CONFIGFS_DIR=/sys/kernel/config
USB_GROUP=rockchip
USB_STRINGS_ATTR=strings/0x409
USB_GADGET_DIR=$CONFIGFS_DIR/usb_gadget/$USB_GROUP
USB_GADGET_STRINGS_DIR=$USB_GADGET_DIR/$USB_STRINGS_ATTR
USB_FUNCTIONS_DIR=$USB_GADGET_DIR/functions
USB_CONFIGS_DIR=$USB_GADGET_DIR/configs/b.1
USB_CONFIGS_STRINGS_DIR=$USB_CONFIGS_DIR/$USB_STRINGS_ATTR
# Make sure that we own this session (pid equals sid)
if ! ps x -o cmd,pid,sid | grep -wq "$$$"; then
setsid $0 $@
exit $?
fi
# ---- helper functions
usb_msg()
{
logger -t $(basename $0) "[$$]: $@"
echo "[$(date +"%F %T")] $@"
}
usb_pid()
{
case $1 in
ums) echo 0x0000;;
mtp) echo 0x0001;;
uvc) echo 0x0005;;
adb) echo 0x0006;;
adb_mtp) echo 0x0011;;
adb_ums) echo 0x0018;;
adb_uvc) echo 0x0015;;
ntb_uvc) echo 0x0017;;
acm) echo 0x1005;;
*) echo 0x0019;;
esac
}
usb_instances()
{
for func in $@; do
VAR=$(echo $func | tr 'a-z' 'A-Z')_INSTANCES
eval echo "\${$VAR:-$func.gs0}"
done
}
usb_run_stage()
{
for f in $1_pre_$2_hook $1_$2 $1_post_$2_hook; do
type $f >/dev/null 2>/dev/null || continue
usb_msg "Run stage: $f"
eval $f || break
done
}
usb_wait_files()
{
for i in `seq 200`;do
fuser -s $@ 2>/dev/null && break
sleep .01
done
}
usb_release_files()
{
for i in `seq 200`;do
fuser -s -k $@ 2>/dev/null || break
sleep .01
done
}
# usage: usb_mount <src> <mountpoint> <options>
usb_mount()
{
mkdir -p $2
mountpoint -q $2 || mount $@
}
usb_umount()
{
mountpoint -q $1 || return 0
usb_release_files -m $1
umount $1
}
usb_symlink()
{
mkdir -p $1
[ -e $2 ] || ln -s $1 $2
}
usb_try_symlink()
{
usb_symlink $@ &>/dev/null || true
}
usb_write()
{
if echo "x$1" | grep -q "^x-"; then
OPTS=$1
shift
fi
FILE=$1
shift
if [ -r $FILE ] && [ "$(cat $FILE)" = "$@" ]; then
return 0
fi
echo $OPTS "$@" > $FILE
}
usb_try_write()
{
usb_write $@ &>/dev/null || true
}
usb_start_daemon()
{
NAME=$(echo $1 | sed "s#^[^ ]*/\([^ ]*\).*#\1#")
TAG_FILE=/tmp/.usb_$NAME
# Enable spawn
touch $TAG_FILE
# Already started
[ -z "$(usb_get_started)" ] || return 0
# Start and spawn background daemon
{
exec 3<&-
cd /
while usb_is_enabled; do
# Don't spawn after stopped
[ ! -f $TAG_FILE ] ||
start-stop-daemon -Sqx $@ || true
sleep .5
done
}&
}
usb_stop_daemon()
{
NAME=$(echo $1 | sed "s#^[^ ]*/\([^ ]*\).*#\1#")
TAG_FILE=/tmp/.usb_$NAME
# Stop and disable spawn
rm -f $TAG_FILE
start-stop-daemon -Kqox $@
}
usb_load_config()
{
USB_CONFIG_FILE=$(find /etc/ -name .usb_config | head -n 1)
[ -n "$USB_CONFIG_FILE" -a -r $USB_CONFIG_FILE ] || return 0
ums_parse()
{
grep "\<$1=" $USB_CONFIG_FILE | cut -d'=' -f2
}
UMS_FILE=$(ums_parse ums_block)
UMS_SIZE=$(ums_parse ums_block_size || echo 0)M
UMS_FSTYPE=$(ums_parse ums_block_type)
UMS_MOUNT=$([ "$(ums_parse ums_block_auto_mount)" != on ]; echo $?)
UMS_RO=$([ "$(ums_parse ums_block_ro)" != on ]; echo $?)
USB_FUNCS=$(grep "usb_.*_en" $USB_CONFIG_FILE | cut -d'_' -f2 | xargs)
}
# ---- adb
ADB_INSTANCES=${ADB_INSTANCES:-ffs.adb}
adb_prepare()
{
usb_mount adb /dev/usb-ffs/adb -o uid=2000,gid=2000 -t functionfs
usb_start_daemon /usr/bin/adbd
usb_wait_files -m /dev/usb-ffs/adb
}
adb_stop()
{
usb_stop_daemon /usr/bin/adbd
}
# ---- ntb
NTB_INSTANCES=${NTB_INSTANCES:-ffs.ntb}
ntb_prepare()
{
usb_mount ntb /dev/usb-ffs/ntb -o uid=2000,gid=2000 -t functionfs
}
# ---- uac1
uac1_prepare()
{
for f in $(find . -name "*_feature_unit"); do
echo 1 >$f
done
}
# ---- uac2
uac2_prepare()
{
uac1_prepare
}
# ---- mtp
mtp_prepare()
{
echo "MTP" > os_desc/interface.MTP/compatible_id
echo 1 > $USB_GADGET_DIR/os_desc/use
}
mtp_start()
{
usb_start_daemon /usr/bin/mtp-server
usb_wait_files /dev/mtp_usb
}
mtp_stop()
{
usb_stop_daemon /usr/bin/mtp-server
usb_release_files /dev/mtp_usb
echo 0 > $USB_GADGET_DIR/os_desc/use
}
# ---- acm
ACM_INSTANCES=${ACM_INSTANCES:-acm.gs6}
# ---- rndis
# Nothing special
# ---- uvc
UVC_INSTANCES=${UVC_INSTANCES:-uvc.gs6}
uvc_add_yuyv()
{
WIDTH=$(echo $1 | cut -d'x' -f1)
HEIGHT=$(echo $1 | cut -d'x' -f2)
DIR=${HEIGHT}p
[ ! -d $DIR ] || return 0
mkdir -p $DIR
echo $WIDTH > $DIR/wWidth
echo $HEIGHT > $DIR/wHeight
echo 333333 > $DIR/dwDefaultFrameInterval
echo $((WIDTH * HEIGHT * 20)) > $DIR/dwMinBitRate
echo $((WIDTH * HEIGHT * 20)) > $DIR/dwMaxBitRate
echo $((WIDTH * HEIGHT * 2)) > $DIR/dwMaxVideoFrameBufferSize
echo -e "333333\n666666\n1000000\n2000000" > $DIR/dwFrameInterval
}
uvc_add_mjpeg()
{
WIDTH=$(echo $1 | cut -d'x' -f1)
HEIGHT=$(echo $1 | cut -d'x' -f2)
DIR=${HEIGHT}p
[ ! -d $DIR ] || return 0
mkdir -p $DIR
echo $WIDTH > $DIR/wWidth
echo $HEIGHT > $DIR/wHeight
echo 333333 > $DIR/dwDefaultFrameInterval
echo $((WIDTH * HEIGHT * 20)) > $DIR/dwMinBitRate
echo $((WIDTH * HEIGHT * 20)) > $DIR/dwMaxBitRate
echo $((WIDTH * HEIGHT * 2)) > $DIR/dwMaxVideoFrameBufferSize
echo -e "333333\n666666\n1000000\n2000000" > $DIR/dwFrameInterval
}
uvc_add_h264()
{
WIDTH=$(echo $1 | cut -d'x' -f1)
HEIGHT=$(echo $1 | cut -d'x' -f2)
DIR=${HEIGHT}p
[ ! -d $DIR ] || return 0
mkdir -p $DIR
echo $WIDTH > $DIR/wWidth
echo $HEIGHT > $DIR/wHeight
echo 333333 > $DIR/dwDefaultFrameInterval
echo $((WIDTH * HEIGHT * 10)) > $DIR/dwMinBitRate
echo $((WIDTH * HEIGHT * 10)) > $DIR/dwMaxBitRate
echo -e "333333\n666666\n1000000\n2000000" > $DIR/dwFrameInterval
}
uvc_support_resolutions()
{
case ${1:-yuyv} in
yuyv) echo "640x480 1280x720";;
mjpeg) echo "640x480 1280x720 1920x1080 2560x1440 2592x1944";;
h264) echo "640x480 1280x720 1920x1080";;
esac
}
uvc_prepare()
{
UVC_DIR=$(pwd)
usb_symlink $UVC_DIR/control/header/h $UVC_DIR/control/class/fs/h
usb_symlink $UVC_DIR/control/header/h $UVC_DIR/control/class/ss/h
usb_symlink $UVC_DIR/streaming/header/h $UVC_DIR/streaming/class/fs/h
usb_symlink $UVC_DIR/streaming/header/h $UVC_DIR/streaming/class/hs/h
usb_symlink $UVC_DIR/streaming/header/h $UVC_DIR/streaming/class/ss/h
UVC_YUYV_RES=$(uvc_support_resolutions yuyv)
if [ -n "$UVC_YUYV_RES" ]; then
usb_try_symlink $UVC_DIR/streaming/uncompressed/u \
$UVC_DIR/streaming/header/h/u
cd $UVC_DIR/streaming/uncompressed/u
for res in $UVC_YUYV_RES; do
uvc_add_yuyv $res
done
fi
UVC_MJPEG_RES=$(uvc_support_resolutions mjpeg)
if [ -n "$UVC_MJPEG_RES" ]; then
usb_try_symlink $UVC_DIR/streaming/mjpeg/m \
$UVC_DIR/streaming/header/h/m
cd $UVC_DIR/streaming/mjpeg/m
for res in $UVC_MJPEG_RES; do
uvc_add_mjpeg $res
done
fi
UVC_H264_RES=$(uvc_support_resolutions h264)
if [ -n "$UVC_H264_RES" ]; then
usb_try_symlink $UVC_DIR/streaming/framebased/f \
$UVC_DIR/streaming/header/h/f
cd $UVC_DIR/streaming/framebased/f
for res in $UVC_H264_RES; do
uvc_add_h264 $res
done
usb_try_write -ne guidFormat "\\x48\\x32\\x36\\x34\\x00\\x00\\x10\\x00\\x80\\x00\\x00\\xaa\\x00\\x38\\x9b\\x71"
fi
}
# TODO: Start UVC daemon in uvc_start
# TODO: Stop UVC daemon in uvc_stop
# ---- hid
HID_INSTANCES=${HID_INSTANCES:-hid.usb0}
hid_prepare()
{
echo 1 > protocol
echo 1 > subclass
echo 8 > report_length
echo -ne "\\x05\\x01\\x09\\x06\\xa1\\x01\\x05\\x07\\x19\\xe0\\x29\\xe7\\x15\\x00\\x25\\x01\\x75\\x01\\x95\\x08\\x81\\x02\\x95\\x01\\x75\\x08\\x81\\x03\\x95\\x05\\x75\\x01\\x05\\x08\\x19\\x01\\x29\\x05\\x91\\x02\\x95\\x01\\x75\\x03\\x91\\x03\\x95\\x06\\x75\\x08\\x15\\x00\\x25\\x65\\x05\\x07\\x19\\x00\\x29\\x65\\x81\\x00\\xc0" \
> report_desc
}
# ---- ums
UMS_INSTANCES=${UMS_INSTANCES:-mass_storage.0}
ums_prepare()
{
if [ ! -f $UMS_FILE ]; then
usb_msg "Formating $UMS_FILE($UMS_SIZE) to $UMS_FSTYPE"
truncate -s $UMS_SIZE $UMS_FILE
mkfs.$UMS_FSTYPE $UMS_FILE || \
usb_msg "Failed to format $UMS_FILE to $UMS_FSTYPE"
fi
}
ums_stop()
{
echo > lun.0/file
usb_umount $UMS_MOUNTPOINT
[ "$UMS_MOUNT" -eq 1 ] || return 0
# Try auto fstype firstly
usb_mount $UMS_FILE $UMS_MOUNTPOINT -o sync 2>/dev/null || \
usb_mount $UMS_FILE $UMS_MOUNTPOINT -o sync -t $UMS_FSTYPE
}
ums_start()
{
case "$USB_STATE" in
CONFIGURED)
if [ "$(cat lun.0/ro)" != "$UMS_RO" ]; then
echo > lun.0/file
echo $UMS_RO > lun.0/ro
fi
if ! grep -wq $UMS_FILE lun.0/file; then
usb_umount $UMS_MOUNTPOINT
echo $UMS_FILE > lun.0/file
fi
;;
DISCONNECTED)
ums_stop
;;
esac
}
# ---- global
usb_init()
{
usb_msg "Initializing"
echo 0x2207 > idVendor
echo 0x0310 > bcdDevice
echo 0x0200 > bcdUSB
mkdir -p $USB_GADGET_STRINGS_DIR
SERIAL=$(grep Serial /proc/cpuinfo | cut -d':' -f2)
echo ${SERIAL:-0123456789ABCDEF} > $USB_GADGET_STRINGS_DIR/serialnumber
echo $USB_GROUP > $USB_GADGET_STRINGS_DIR/manufacturer
echo "rk3xxx" > $USB_GADGET_STRINGS_DIR/product
mkdir -p $USB_CONFIGS_DIR
echo 500 > $USB_CONFIGS_DIR/MaxPower
echo 0x1 > os_desc/b_vendor_code
echo MSFT100 > os_desc/qw_sign
ln -s $USB_CONFIGS_DIR os_desc/
mkdir -p $USB_CONFIGS_STRINGS_DIR
}
usb_funcs_grep()
{
echo $USB_FUNCS | xargs -n 1 | sort | uniq | grep $@ || true
}
usb_funcs_sort()
{
{
for func in $@; do
usb_funcs_grep -E $func
done
usb_funcs_grep -vE $(echo $@ | tr ' ' '|')
} | uniq | xargs
}
usb_prepare()
{
usb_load_config
# Allow function/variable overriding
[ -d /etc/usbdevice.d ] && . /etc/usbdevice.d/*
UMS_FILE=${UMS_FILE:-/userdata/ums_shared.img}
UMS_SIZE=${UMS_SIZE:-256M}
UMS_FSTYPE=${UMS_FSTYPE:-vfat}
UMS_MOUNT=${UMS_MOUNT:-0}
UMS_MOUNTPOINT=${UMS_MOUNTPOINT:-/mnt/ums}
UMS_RO=${UMS_RO:-0}
# Put RNDIS & UAC & UVC at first (required by kernel)
USB_FUNCS=$(usb_funcs_sort rndis uac uvc)
if [ ! -d $USB_GADGET_DIR ]; then
mountpoint -q $CONFIGFS_DIR || \
mount -t configfs none $CONFIGFS_DIR
mkdir -p $USB_GADGET_DIR
cd $USB_GADGET_DIR
# Global initialize
usb_run_stage usb init
fi
USB_STATE=$(cat /sys/class/android_usb/android0/state)
USB_UDC=$(ls /sys/class/udc/ | head -n 1)
# Parse started USB functions
OLD_FUNCS=$(usb_get_started)
# Stop old USB functions when USB functions changed
if [ -n "$OLD_FUNCS" ] && [ "$OLD_FUNCS" != "$USB_FUNCS" ]; then
usb_msg "Functions changed $OLD_FUNCS -> $USB_FUNCS"
usb_stop
fi
}
usb_start()
{
usb_msg "Starting functions: $USB_FUNCS"
echo $USB_FUNCS | tr ' ' '_' > $USB_CONFIGS_STRINGS_DIR/configuration
for func in $USB_FUNCS; do
for instance in $(usb_instances $func); do
usb_msg "Preparing instance: $instance"
if ! mkdir -p $USB_FUNCTIONS_DIR/$instance 2>/dev/null; then
usb_msg "Failed to create instance: $instance"
continue
fi
cd $USB_FUNCTIONS_DIR/$instance &>/dev/null || continue
usb_run_stage $func prepare
# Make symlink after prepared (required by UVC)
usb_symlink $USB_FUNCTIONS_DIR/$instance \
$USB_CONFIGS_DIR/f-$instance
done
done
usb_write $USB_GADGET_DIR/UDC $USB_UDC
for func in $USB_FUNCS; do
for instance in $(usb_instances $func); do
cd $USB_FUNCTIONS_DIR/$instance &>/dev/null || continue
usb_msg "Starting instance: $instance"
usb_run_stage $func start
done
done
# Store started functions
usb_set_started
}
usb_stop()
{
if [ -n "$OLD_FUNCS" ]; then
usb_msg "Stopping functions: $OLD_FUNCS"
fi
usb_write $USB_GADGET_DIR/UDC ""
for func in $USB_FUNCS; do
for instance in $(usb_instances $func); do
cd $USB_FUNCTIONS_DIR/$instance &>/dev/null || continue
usb_msg "Stopping instance: $instance"
usb_run_stage $func stop
done
done
rm -f $USB_CONFIGS_DIR/f-*
# Clear functions to avoid stopping them again
unset OLD_FUNCS
}
usb_restart()
{
usb_run_stage usb stop
usb_run_stage usb start
}
ACTION=${1:-update}
if [ "$ACTION" = update ]; then
usb_is_enabled || exit 0
fi
# Lock it
exec 3<$0
flock -x 3
echo "Starting $0 ${ACTION}, log saved to $LOG_FILE"
# Redirect outputs to log file
exec >>$LOG_FILE 2>&1
usb_msg "Handling ${ACTION} request"
usb_run_stage usb prepare
case "$ACTION" in
start|update)
usb_enable
usb_run_stage usb start
;;
stop)
usb_disable
usb_run_stage usb stop
;;
restart)
usb_enable
usb_run_stage usb restart
;;
*)
echo "Usage: usbdevice [start|stop|restart|update]" >&2
;;
esac
usb_msg "Done $ACTION request"
echo
# Unlock it
flock -u 3

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,5 @@
[Service]
ExecStartPre=/bin/sh -c 'exec /bin/sleep 10'
ExecStart=
ExecStart=-/sbin/agetty --noissue --autologin orangepi %I $TERM
Type=idle

View File

@@ -0,0 +1,5 @@
[Service]
ExecStartPre=/bin/sh -c 'exec /bin/sleep 10'
ExecStart=
ExecStart=-/sbin/agetty --noissue --autologin orangepi %I $TERM
Type=idle

View File

@@ -0,0 +1,12 @@
[Unit]
Description=Manage USB device functions
DefaultDependencies=no
After=local-fs.target
[Service]
Type=forking
ExecStart=/usr/bin/usbdevice start
ExecStop=/usr/bin/usbdevice stop
[Install]
WantedBy=sysinit.target

View File

@@ -0,0 +1,29 @@
# rockchip internal storage links: /dev/disk/by-partlabel and /dev/block/by-name
ACTION=="remove", GOTO="rk_internal_storage_end"
ENV{UDEV_DISABLE_ROCKCHIP_STORAGE_RULES_FLAG}=="1", GOTO="rk_internal_storage_end"
SUBSYSTEM!="block|mtd", GOTO="rk_internal_storage_end"
KERNEL!="mmcblk*[0-9]|rkflash*|rknand*|mtd*|nvme*", GOTO="rk_internal_storage_end"
# ignore partitions that span the entire disk
TEST=="whole_disk", GOTO="rk_internal_storage_end"
# for partitions import parent information
ENV{DEVTYPE}=="partition", IMPORT{parent}="ID_*"
# for rknand parameter partition name
ENV{DEVNAME}=="/dev/rknand*", ENV{DEVTYPE}=="disk", ENV{DEVPATH}=="/devices/virtual/block/rknand", ENV{ID_RKNAND_PART_NAME}=""
# for rkflash gpt partition name by-partlabel and /dev/block/by-name link
ENV{DEVTYPE}=="partition", ENV{PARTNAME}=="?*", SYMLINK+="disk/by-partlabel/$env{PARTNAME}", SYMLINK+="block/by-name/$env{PARTNAME}"
# for emmc gpt partition name /dev/block/by-name link
ENV{ID_PART_ENTRY_SCHEME}=="gpt", ENV{ID_PART_ENTRY_NAME}=="?*", SYMLINK+="block/by-name/$env{ID_PART_ENTRY_NAME}"
# for mtd partition name /dev/block/by-name link
ENV{DEVNAME}=="/dev/mtd*", ENV{DEVTYPE}=="mtd", ATTRS{name}=="?*", SYMLINK+="block/by-name/$attr{name}"
# for nvme partition name /dev/block/by-name link
ENV{DEVNAME}=="/dev/nvme*", ENV{DEVTYPE}=="disk", ATTRS{name}=="?*", SYMLINK+="block/by-name/$attr{name}"
LABEL="rk_internal_storage_end"

View File

@@ -0,0 +1 @@
SUBSYSTEM=="android_usb",ACTION=="change",RUN+="/usr/bin/usbdevice update"

View File

@@ -0,0 +1,29 @@
#!/bin/bash
if [[ -z $1 ]]; then
user=root
else
user=$1
fi
[[ -d /lib/systemd/system/getty@.service.d/ ]] && rm /lib/systemd/system/getty@.service.d/ -rf
[[ -f /lib/systemd/system/serial-getty@.service.d/override.conf ]] && rm /lib/systemd/system/serial-getty@.service.d/override.conf -f
[[ -d /etc/systemd/system/getty@.service.d/ ]] && rm /etc/systemd/system/getty@.service.d/ -rf
[[ -f /etc/systemd/system/serial-getty@.service.d/override.conf ]] && rm /etc/systemd/system/serial-getty@.service.d/override.conf -f
if [[ $1 == "-d" ]]; then
exit
fi
mkdir -p /etc/systemd/system/getty@.service.d/
mkdir -p /etc/systemd/system/serial-getty@.service.d/
cat <<-EOF > \
/etc/systemd/system/serial-getty@.service.d/override.conf
[Service]
ExecStartPre=/bin/sh -c 'exec /bin/sleep 10'
ExecStart=
ExecStart=-/sbin/agetty --noissue --autologin ${user} %I \$TERM
Type=idle
EOF
cp /etc/systemd/system/serial-getty@.service.d/override.conf \
/etc/systemd/system/getty@.service.d/override.conf

View File

@@ -0,0 +1,3 @@
#!/bin/bash
cat /proc/cpuinfo | grep "Serial"

View File

@@ -0,0 +1,20 @@
#!/bin/bash
sudo apt-get update
sudo apt-get install -y build-essential zlib1g-dev \
libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libsqlite3-dev \
libreadline-dev libffi-dev curl libbz2-dev
version=3.9.9
[[ -n $1 ]] && version=$1
# optimize build time with 100% CPU usage
CPUS=$(grep -c 'processor' /proc/cpuinfo)
CTHREADS="-j$((CPUS + CPUS/2))"
wget https://cdn.npmmirror.com/binaries/python/$version/Python-${version}.tgz
tar xvf Python-${version}.tgz
cd Python-${version}
./configure --enable-optimizations
make ${CTHREADS}
sudo make altinstall

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,11 @@
#!/bin/bash
if [[ -z $1 ]]; then
user=root
else
user=$1
fi
sudo sed -i '/autologin-user=/d' /etc/lightdm/lightdm.conf.d/22-orangepi-autologin.conf
sudo echo autologin-user=${user} >> /etc/lightdm/lightdm.conf.d/22-orangepi-autologin.conf
sudo sed -i 's/root/anything/' /etc/pam.d/lightdm-autologin

View File

@@ -0,0 +1,5 @@
#!/bin/bash
sudo sed -i \
"s/autologin-user=.*/#&/" \
/etc/lightdm/lightdm.conf.d/22-orangepi-autologin.conf

View File

@@ -0,0 +1,77 @@
#!/bin/bash -x
export DISPLAY=${DISPLAY:-:0}
function prepare_env() {
# Try to figure out XAUTHORITY and DISPLAY
for pid in $(pgrep X 2>/dev/null || \
ls /proc|grep -ow "[0-9]*"|sort -rn); do
PROC_DIR=/proc/$pid
# Filter out non-X processes
readlink $PROC_DIR/exe|grep -qwE "X$|Xorg$" || continue
# Parse auth file and display from cmd args
export XAUTHORITY=$(cat $PROC_DIR/cmdline|tr '\0' '\n'| \
grep -w "\-auth" -A 1|tail -1)
export DISPLAY=$(cat $PROC_DIR/cmdline|tr '\0' '\n'| \
grep -w "^:.*" || echo ":0")
logger -t $0 "Found auth: $XAUTHORITY for dpy: $DISPLAY"
return
done
}
function xrandr_wrapper() {
xrandr --screen ${SCREEN:-0} $@
}
if ! xdpyinfo &>/dev/null; then
# Try to setup env
prepare_env
if ! xdpyinfo &>/dev/null; then
# Try to switch to an authorized user
for XUSER in root $(users);do
sudo -u $XUSER xdpyinfo &>/dev/null || continue
logger -t $0 "Switch to user: $XUSER"
sudo -u $XUSER $0; exit 0
done
logger -t $0 "Unable to contact Xserver!"
exit 0
fi
fi
TMP=$(mktemp)
SCREENS=$(xdpyinfo|grep screens|cut -d':' -f2)
for SCREEN in $(seq 0 ${SCREENS:-0}); do
# Get monitors and current mode info
xrandr_wrapper 2>&1|grep -oE "^.*connected|^.*\*"|tee $TMP
# Result:
# eDP-1 connected
# 1536x2048 59.99*
# DP-1 disconnected
# HDMI-1 connected
# 1920x1080 60.00*
#
# "*" means valid current mode.
# Make sure every connected monitors been enabled with a valid mode.
for MONITOR in $(grep -w connected $TMP|cut -d' ' -f1); do
# Find monitors without a valid current mode
if ! grep -w $MONITOR $TMP -A 1|grep "\*"; then
# Ether disabled or wrongly configured
xrandr_wrapper --output $MONITOR --auto
logger -t $0 "Output $MONITOR enabled."
fi
done
done
rm -rf $TMP
exit 0

View File

@@ -0,0 +1,4 @@
#!/bin/bash
sudo systemctl enable docker.service
sudo systemctl start docker.service

View File

@@ -0,0 +1,8 @@
#!/bin/bash
mmc_dev=$(ls -d -1 /dev/mmcblk* | grep -w 'mmcblk[0-9]' | cut -d '/' -f3)
sed -i "s/^rootdev=.*/rootdev=\/dev\/${mmc_dev}p2/" /boot/orangepiEnv.txt
sed -i '/boot/d' /etc/fstab
echo "/dev/${mmc_dev}p1 /boot vfat defaults 0 2" >> /etc/fstab
echo "Done"

View File

@@ -0,0 +1,9 @@
#!/bin/bash
while true; do
gpu_load=$(cat /sys/devices/platform/fb000000.gpu/devfreq/fb000000.gpu/load | cut -d "@" -f 1)
echo $(date "+%H:%M:%S") : GPU load is : ${gpu_load}%
sleep 1
done

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,17 @@
#!/bin/bash
distributor_id=$(lsb_release -is)
distributor_id=${distributor_id,}
sudo apt-get remove -y docker docker-engine docker-ce docker.io
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg2 software-properties-common
curl -fsSL https://repo.huaweicloud.com/docker-ce/linux/${distributor_id}/gpg | sudo apt-key add -
echo "deb [arch=$(dpkg --print-architecture)] https://repo.huaweicloud.com/docker-ce/linux/${distributor_id} $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
sudo groupadd docker
sudo usermod -aG docker $USER

View File

@@ -0,0 +1,25 @@
#!/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|jammy ]]; then
sudo apt-get -y install qttools5-dev-tools qtbase5-doc-html qt5-assistant qt5-doc qt5-qmake qt5-qmake-bin
elif [[ $release =~ bookworm ]]; then
sudo apt-get -y install qttools5-dev-tools qtbase5-doc-html qt5-doc qt5-qmake qt5-qmake-bin
else
echo "Unsupported system!"
exit
fi
if [[ $release =~ focal|bionic|buster ]]; then
sudo apt-get -y install qtcreator qmlscene gdb qtdeclarative5-dev cmake
else
sudo apt-get -y install qtcreator qmlscene gdb qtdeclarative5-dev qtbase5-examples cmake
fi
sudo chown orangepi:orangepi /usr/lib/aarch64-linux-gnu/qt5/examples -R
qmake -v

View File

@@ -0,0 +1,74 @@
#!/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
echo "Unsupported System!"

BIN
external/packages/bsp/rk356x/usr/local/bin/io vendored Executable file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

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

View File

@@ -0,0 +1,4 @@
#!/bin/bash
sudo bash -c "echo peripheral > /sys/devices/platform/fe8a0000.usb2-phy/otg_mode"
sudo systemctl restart usbdevice

View File

@@ -0,0 +1,37 @@
#!/bin/bash
if [[ -n $1 && $1 =~ left|right|inverted|none ]]; then
type=$1
else
echo "usage: set_lcd_rotate.sh [left|right|inverted|none]"
exit
fi
case $1 in
left)
rotate=3
matrix="0 -1 1 1 0 0 0 0 1"
;;
right)
rotate=1
matrix="0 1 0 -1 0 1 0 0 1"
;;
inverted)
rotate=2
matrix="-1 0 1 0 -1 1 0 0 1"
;;
none)
rotate=0
matrix="1 0 0 0 1 0 0 0 1"
;;
esac
sudo sed -i '/TransformationMatrix/d' /usr/share/X11/xorg.conf.d/40-libinput.conf
sudo sed -i "/libinput touchscreen catchall/a Option \"TransformationMatrix\" \"${matrix}\"" /usr/share/X11/xorg.conf.d/40-libinput.conf
sudo sed -i '/extraargs=fbcon=rotate/d' /boot/orangepiEnv.txt
sudo bash -c "echo extraargs=fbcon=rotate:${rotate} >> /boot/orangepiEnv.txt"
sudo sed -i 's/bootlogo=true/bootlogo=false/g' /boot/orangepiEnv.txt
sudo sync
sudo reboot

View File

@@ -0,0 +1,21 @@
#!/bin/bash
[[ -d ~/.vnc ]] && rm -rf ~/.vnc
vncserver
vncserver -kill :1
mv ~/.vnc/xstartup ~/.vnc/xstartup.bak
cat <<-EOF > \
~/.vnc/xstartup
#!/bin/bash
xrdb $HOME/.Xresources
startxfce4 &
EOF
chmod +x ~/.vnc/xstartup
vncserver
sudo chown orangepi:root .Xauthority
sync

Binary file not shown.

View File

@@ -0,0 +1,34 @@
#!/bin/bash
export DISPLAY=:0.0
device_id0=$(v4l2-ctl --list-devices | grep -A1 rkisp-vir0 |grep -v rkisp-vir0 |awk -F ' ' '{print $NF}')
device_id1=$(v4l2-ctl --list-devices | grep -A1 rkisp-vir1 |grep -v rkisp-vir1 |awk -F ' ' '{print $NF}')
echo "Start MIPI CSI Camera Preview!"
if [[ ! -z $device_id0 ]]; then
su root -c "gst-launch-1.0 v4l2src device=${device_id0} io-mode=4 ! videoconvert \
! video/x-raw,format=NV12,width=1280,height=720 \
! autovideosink 2>&1 > /dev/null &"
fi
if [[ ! -z $device_id1 ]]; then
su root -c "gst-launch-1.0 v4l2src device=${device_id1} io-mode=4 ! videoconvert \
! video/x-raw,format=NV12,width=640,height=480 \
! autovideosink 2>&1 > /dev/null &"
fi
echo "[Ctrl + C] exit"
while true
do
sleep 10
done
trap 'onCtrlC' INT
function onCtrlC () {
echo 'Ctrl+C is captured'
killall gst-launch-1.0
exit 0
}

View File

@@ -0,0 +1,11 @@
#!/bin/bash
export DISPLAY=:0.0
#export GST_DEBUG=*:5
#export GST_DEBUG_FILE=/tmp/2.txt
# xv vo
while true
do
mpv --hwdec=rkmpp --vd-lavc-software-fallback=no --vo=xv /usr/local/test.mp4
done

View File

@@ -0,0 +1,14 @@
#!/bin/bash
export DISPLAY=:0.0
if [[ -z $1 ]]; then
video=/usr/local/test.mp4
else
video=$1
fi
while true
do
gst-play-1.0 $video --videosink=xvimagesink
done

View File

@@ -0,0 +1,43 @@
#!/bin/bash
if [[ -n $1 && $1 =~ main|headset ]]; then
type=$1
else
echo "usage: test_record.sh main/headset"
exit
fi
card=$(aplay -l | grep "es8388" | cut -d ':' -f 1 | cut -d ' ' -f 2)
if [[ $type == "main" ]]; then
tinymix -D 2 3 4
tinymix -D 2 4 2
tinymix -D 2 14 192
tinymix -D 2 16 0
tinymix -D 2 17 0
tinymix -D 2 31 1
tinymix -D 2 32 1
tinymix -D 2 33 1
else
tinymix -D 2 3 2
tinymix -D 2 4 1
tinymix -D 2 14 192
tinymix -D 2 16 0
tinymix -D 2 17 0
tinymix -D 2 31 0
tinymix -D 2 32 0
tinymix -D 2 33 0
fi
echo "Start recording: /tmp/test.wav"
arecord -D hw:${card},0 -d 5 -f cd -t wav /tmp/test.wav
echo "Start playing"
aplay /tmp/test.wav -D hw:1,0
aplay /tmp/test.wav -D hw:2,0
#aplay /tmp/test.wav -D hw:0,0

View File

@@ -0,0 +1,7 @@
#!/bin/sh
echo "Start RKNN_DEMO Camera Preview!"
echo performance | tee $(find /sys/ -name *governor)
sudo service lightdm stop
/usr/bin/npu_transfer_proxy&
rknn_demo

View File

@@ -0,0 +1,29 @@
#!/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

View File

@@ -0,0 +1,13 @@
#!/bin/sh
export DISPLAY=:0.0
#export GST_DEBUG=*:5
#export GST_DEBUG_FILE=/tmp/2.txt
# server:
# vlc v4l2:// :v4l2-dev=/dev/video0 :v4l2-width=640 \
# :v4l2-height=480 --sout="#transcode{vcodec=h264,vb=800,scale=1,\
# acodec=mp4a,ab=128,channels=2,samplerate=44100}:rtp{sdp=rtsp://:8554/}" -I dummy
gst-launch-1.0 rtspsrc location=rtsp://192.168.31.163:8554/ ! \
! rtph264depay ! h264parse ! mppvideodec ! rkximagesink sync=false

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,3 @@
#!/bin/bash
echo host > /sys/kernel/debug/usb/fc000000.usb/mode

View File

@@ -0,0 +1,5 @@
#!/bin/bash
sudo bash -c "echo 0x100 > /sys/module/rk_vcodec/parameters/mpp_dev_debug"
sudo dmesg -c > /dev/null
dmesg -w

Binary file not shown.

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,91 @@
???
person
bicycle
car
motorcycle
airplane
bus
train
truck
boat
traffic light
fire hydrant
???
stop sign
parking meter
bench
bird
cat
dog
horse
sheep
cow
elephant
bear
zebra
giraffe
???
backpack
umbrella
???
???
handbag
tie
suitcase
frisbee
skis
snowboard
sports ball
kite
baseball bat
baseball glove
skateboard
surfboard
tennis racket
bottle
???
wine glass
cup
fork
knife
spoon
bowl
banana
apple
sandwich
orange
broccoli
carrot
hot dog
pizza
donut
cake
chair
couch
potted plant
bed
???
dining table
???
???
toilet
???
tv
laptop
mouse
remote
keyboard
cell phone
microwave
oven
toaster
sink
refrigerator
???
book
clock
vase
scissors
teddy bear
hair drier
toothbrush

Binary file not shown.