More Updates and Fixes.

This commit is contained in:
Justin Hammond 2024-03-12 16:48:29 +08:00
parent f668f54d5b
commit 4884a6fa12
27 changed files with 57582 additions and 11 deletions

File diff suppressed because it is too large Load diff

View file

@ -1,5 +1,6 @@
CONFIG_SYSVIPC=y
CONFIG_POSIX_MQUEUE=y
CONFIG_GENERIC_IRQ_DEBUGFS=y
CONFIG_NO_HZ_IDLE=y
CONFIG_HIGH_RES_TIMERS=y
CONFIG_PREEMPT=y
@ -22,12 +23,8 @@ CONFIG_CC_OPTIMIZE_FOR_SIZE=y
# CONFIG_FHANDLE is not set
# CONFIG_BUG is not set
# CONFIG_BASE_FULL is not set
# CONFIG_EPOLL is not set
# CONFIG_SIGNALFD is not set
# CONFIG_TIMERFD is not set
# CONFIG_AIO is not set
# CONFIG_IO_URING is not set
# CONFIG_ADVISE_SYSCALLS is not set
CONFIG_BPF_SYSCALL=y
CONFIG_USERFAULTFD=y
CONFIG_EMBEDDED=y
# CONFIG_SLUB_DEBUG is not set
CONFIG_FORCE_MAX_ZONEORDER=10
@ -460,14 +457,29 @@ CONFIG_PWM=y
CONFIG_SIFIVE_PLIC=y
CONFIG_ANDROID=y
CONFIG_EXT4_FS=y
CONFIG_XFS_FS=m
CONFIG_XFS_QUOTA=y
CONFIG_XFS_POSIX_ACL=y
CONFIG_XFS_RT=y
CONFIG_XFS_ONLINE_SCRUB=y
CONFIG_XFS_ONLINE_REPAIR=y
CONFIG_BTRFS_FS=m
CONFIG_BTRFS_FS_POSIX_ACL=y
CONFIG_BTRFS_FS_RUN_SANITY_TESTS=y
# CONFIG_MANDATORY_FILE_LOCKING is not set
CONFIG_FUSE_FS=y
CONFIG_CUSE=y
CONFIG_OVERLAY_FS=y
CONFIG_ISO9660_FS=m
CONFIG_JOLIET=y
CONFIG_ZISOFS=y
CONFIG_UDF_FS=m
CONFIG_MSDOS_FS=y
CONFIG_VFAT_FS=y
CONFIG_EXFAT_FS=m
# CONFIG_PROC_PAGE_MONITOR is not set
CONFIG_TMPFS=y
CONFIG_HUGETLBFS=y
CONFIG_JFFS2_FS=y
CONFIG_JFFS2_FS_WBUF_VERIFY=y
CONFIG_UBIFS_FS=y
@ -476,11 +488,87 @@ CONFIG_SQUASHFS=y
CONFIG_SQUASHFS_LZ4=y
CONFIG_SQUASHFS_XZ=y
CONFIG_NFS_FS=y
CONFIG_NFS_V3_ACL=y
CONFIG_NFS_V4=m
CONFIG_NFS_V4_1=y
CONFIG_NFS_V4_2=y
CONFIG_NFS_V4_2_READ_PLUS=y
CONFIG_NFSD=y
CONFIG_NFSD_V3_ACL=y
CONFIG_NFSD_V4=y
CONFIG_CIFS=m
CONFIG_CIFS_STATS2=y
CONFIG_CIFS_WEAK_PW_HASH=y
CONFIG_CIFS_UPCALL=y
CONFIG_CIFS_XATTR=y
CONFIG_CIFS_POSIX=y
# CONFIG_CIFS_DEBUG is not set
CONFIG_CIFS_DFS_UPCALL=y
CONFIG_NLS_CODEPAGE_437=y
CONFIG_NLS_ISO8859_1=y
CONFIG_NLS_ISO8859_2=y
CONFIG_NLS_ISO8859_3=y
CONFIG_KEY_DH_OPERATIONS=y
CONFIG_CRYPTO_USER=m
CONFIG_CRYPTO_CRYPTD=m
CONFIG_CRYPTO_ECRDSA=m
CONFIG_CRYPTO_SM2=m
CONFIG_CRYPTO_CURVE25519=m
CONFIG_CRYPTO_CHACHA20POLY1305=m
CONFIG_CRYPTO_AEGIS128=m
CONFIG_CRYPTO_SEQIV=m
CONFIG_CRYPTO_ECHAINIV=m
CONFIG_CRYPTO_CBC=m
CONFIG_CRYPTO_CFB=m
CONFIG_CRYPTO_CTS=m
CONFIG_CRYPTO_LRW=m
CONFIG_CRYPTO_OFB=m
CONFIG_CRYPTO_PCBC=m
CONFIG_CRYPTO_XTS=m
CONFIG_CRYPTO_KEYWRAP=m
CONFIG_CRYPTO_ADIANTUM=m
CONFIG_CRYPTO_ESSIV=m
CONFIG_CRYPTO_XCBC=m
CONFIG_CRYPTO_VMAC=m
CONFIG_CRYPTO_CRC32=m
CONFIG_CRYPTO_BLAKE2S=m
CONFIG_CRYPTO_CRCT10DIF=m
CONFIG_CRYPTO_MICHAEL_MIC=m
CONFIG_CRYPTO_RMD128=m
CONFIG_CRYPTO_RMD160=m
CONFIG_CRYPTO_RMD256=m
CONFIG_CRYPTO_RMD320=m
CONFIG_CRYPTO_SHA1=m
CONFIG_CRYPTO_SHA3=m
CONFIG_CRYPTO_TGR192=m
CONFIG_CRYPTO_WP512=m
CONFIG_CRYPTO_AES=m
CONFIG_CRYPTO_AES_TI=m
CONFIG_CRYPTO_ANUBIS=m
CONFIG_CRYPTO_ARC4=m
CONFIG_CRYPTO_BLOWFISH=m
CONFIG_CRYPTO_CAMELLIA=m
CONFIG_CRYPTO_CAST5=m
CONFIG_CRYPTO_CAST6=m
CONFIG_CRYPTO_DES=m
CONFIG_CRYPTO_FCRYPT=m
CONFIG_CRYPTO_KHAZAD=m
CONFIG_CRYPTO_SALSA20=m
CONFIG_CRYPTO_SEED=m
CONFIG_CRYPTO_SERPENT=m
CONFIG_CRYPTO_SM4=m
CONFIG_CRYPTO_TEA=m
CONFIG_CRYPTO_TWOFISH=m
CONFIG_CRYPTO_842=m
CONFIG_CRYPTO_LZ4=m
CONFIG_CRYPTO_LZ4HC=m
CONFIG_CRYPTO_USER_API_HASH=m
CONFIG_CRYPTO_USER_API_SKCIPHER=m
CONFIG_CRYPTO_USER_API_RNG=m
CONFIG_CRYPTO_USER_API_RNG_CAVP=y
CONFIG_CRYPTO_USER_API_AEAD=m
# CONFIG_CRYPTO_HW is not set
CONFIG_PKCS8_PRIVATE_KEY_PARSER=y
# CONFIG_XZ_DEC_X86 is not set
# CONFIG_XZ_DEC_POWERPC is not set
# CONFIG_XZ_DEC_IA64 is not set

View file

@ -0,0 +1,62 @@
#!/bin/sh
${CVI_SHOPTS}
# from fsbl/plat/mars/include/platform_def.h
# struct _time_records { ... }
fields="
fsbl_start
ddr_init_start
ddr_init_end
release_blcp_2nd
load_loader_2nd_end
fsbl_decomp_start
fsbl_decomp_end
fsbl_exit
uboot_start
bootcmd_start
decompress_kernel_start
kernel_start
kernel_run_init_start
NONE
"
fields=$(echo $fields)
TIME_RECORDS_ADDR=0x0e000010
TIME_RECORDS_SIZE=$((2 * 14))
OUTPUT=/tmp/boottime
echo > "$OUTPUT"
for i in $(seq 0 4 $((TIME_RECORDS_SIZE - 4))); do
addr=$((TIME_RECORDS_ADDR + i))
ts=$(devmem $addr 32)
# printf "0x%08x=0x%08x\n" "$a" "$ts"
t0=$((ts & 0xffff))
t1=$((ts >> 16))
f0="${fields%% *}"
fields="${fields#* }"
f1="${fields%% *}"
fields="${fields#* }"
eval "${f0}=${t0}"
eval "${f1}=${t1}"
{
echo "${f0}=${t0}ms"
echo "${f1}=${t1}ms"
} >> "$OUTPUT"
done
{
uname -a
echo "ROM elapsed time: ${fsbl_start} milliseconds"
echo "DDR init elapsed time: $((ddr_init_end - ddr_init_start)) milliseconds"
echo "C906L FreeRTOS start at: ${release_blcp_2nd} milliseconds"
echo "Kernel uptime: $(awk '{print $1}' /proc/uptime) seconds"
echo "Total boottime: ?"
} >> "$OUTPUT"

View file

@ -7,7 +7,7 @@ start() {
return 1
fi
echo 'Resizing Rootfs'
growpart /dev/mmcblk0 2
parted -s /dev/mmcblk0 resizepart 2 100%
status=$?
if [ "$status" -eq 0 ]; then
echo "Partition Resized"

View file

@ -0,0 +1,30 @@
#!/bin/sh
${CVI_SHOPTS}
case "$1" in
start)
if [ -e /mnt/system/ko/dwc2.ko ]
then
insmod /mnt/system/ko/dwc2.ko
fi
echo device > /proc/cviusb/otg_role
printf "Starting usbdev: "
/etc/run_usb.sh probe acm
/etc/run_usb.sh probe rndis
/etc/run_usb.sh start
[ $? = 0 ] && echo "OK" || echo "FAIL"
;;
stop)
printf "Stopping usbdev: "
/etc/run_usb.sh stop
echo "OK"
sleep 1
;;
restart)
printf "Restarting usbdev: "
/etc/run_usb.sh stop
sleep 1
/etc/run_usb.sh start
echo "OK"
;;
esac

View file

@ -0,0 +1,49 @@
#!/bin/sh
CONF=/boot/udhcpd.usb0.conf
case "$1" in
start)
printf "Starting udhcpd.usb0: "
id2=$(printf "%d" 0x$(sha512sum /sys/class/cvi-base/base_uid | head -c 2))
id3=$(printf "%d" 0x$(sha512sum /sys/class/cvi-base/base_uid | head -c 4 | tail -c 2))
if [ "$id2" -ge 255 ]
then
id2=254
fi
if [ "$id3" -ge 255 ]
then
id3=254
fi
ip=10.${id2}.${id3}.1/24
if [ ! -e ${CONF} ]
then
if [ ! -e /etc/udhcpd.usb0.conf ]
then
cp /etc/udhcpd.usb0.conf.skel /etc/udhcpd.usb0.conf
sed -i -e s/10.100.100/10.${id2}.${id3}/g /etc/udhcpd.usb0.conf
fi
CONF=/etc/udhcpd.usb0.conf
fi
if [ -e /boot/rndis_ipv4_addr ]
then
ip=$(cat /boot/rndis_ipv4_addr)
fi
ip link set usb0 up
ip addr add ${ip} dev usb0
busybox udhcpd -S /etc/udhcpd.usb0.conf
[ $? = 0 ] && echo "OK" || echo "FAIL"
;;
stop)
printf "Stopping udhcpd.usb0: "
kill $(cat /var/run/udhcpd.usb0.pid)
echo "OK"
sleep 1
;;
restart)
printf "Restarting udhcpd.usb0: "
stop
start
echo "OK"
;;
esac

View file

@ -0,0 +1,41 @@
# /etc/inittab
#
# Copyright (C) 2001 Erik Andersen <andersen@codepoet.org>
#
# Note: BusyBox init doesn't support runlevels. The runlevels field is
# completely ignored by BusyBox init. If you want runlevels, use
# sysvinit.
#
# Format for each entry: <id>:<runlevels>:<action>:<process>
#
# id == tty to run on, or empty for /dev/console
# runlevels == ignored
# action == one of sysinit, respawn, askfirst, wait, and once
# process == program to run
# Startup the system
::sysinit:/bin/mount -t proc proc /proc
::sysinit:/bin/mount -o remount,rw /
::sysinit:/bin/mkdir -p /dev/pts /dev/shm
::sysinit:/bin/mount -a
::sysinit:/bin/mkdir -p /run/lock/subsys
::sysinit:/sbin/swapon -a
null::sysinit:/bin/ln -sf /proc/self/fd /dev/fd
null::sysinit:/bin/ln -sf /proc/self/fd/0 /dev/stdin
null::sysinit:/bin/ln -sf /proc/self/fd/1 /dev/stdout
null::sysinit:/bin/ln -sf /proc/self/fd/2 /dev/stderr
::sysinit:/bin/hostname -F /etc/hostname
# now run any rc scripts
::sysinit:/etc/init.d/rcS
# Put a getty on the serial port
console::respawn:/sbin/getty -L console 0 vt100 # GENERIC_SERIAL
ttyGS0::askfirst:/sbin/getty -L ttyGS0 115200 vt100
# Stuff to do for the 3-finger salute
#::ctrlaltdel:/sbin/reboot
# Stuff to do before rebooting
::shutdown:/etc/init.d/rcK
::shutdown:/sbin/swapoff -a
::shutdown:/bin/umount -a -r

View file

@ -0,0 +1,293 @@
CLASS=acm
VID=0x3346
PID=0x1003
MSC_PID=0x1008
RNDIS_PID=0x1009
UVC_PID=0x100A
UAC_PID=0x100B
ADB_VID=0x18D1
ADB_PID=0x4EE0
ADB_PID_M1=0x4EE2
ADB_PID_M2=0x4EE4
MANUFACTURER="Cvitek"
PRODUCT="USB Com Port"
PRODUCT_RNDIS="RNDIS"
PRODUCT_UVC="UVC"
PRODUCT_UAC="UAC"
PRODUCT_ADB="ADB"
ADBD_PATH=/usr/bin/
SERIAL="0123456789"
MSC_FILE=$3
CVI_DIR=/tmp/usb
CVI_GADGET=$CVI_DIR/usb_gadget/cvitek
CVI_FUNC=$CVI_GADGET/functions
FUNC_NUM=0
MAX_EP_NUM=4
TMP_NUM=0
INTF_NUM=0
EP_IN=0
EP_OUT=0
case "$2" in
acm)
CLASS=acm
;;
msc)
CLASS=mass_storage
PID=$MSC_PID
;;
cvg)
CLASS=cvg
;;
rndis)
CLASS=rndis
PID=$RNDIS_PID
PRODUCT=$PRODUCT_RNDIS
;;
uvc)
CLASS=uvc
PID=$UVC_PID
PRODUCT=$PRODUCT_UVC
;;
uac1)
CLASS=uac1
PID=$UAC_PID
PRODUCT=$PRODUCT_UAC
;;
adb)
CLASS=ffs.adb
VID=$ADB_VID
PID=$ADB_PID
PRODUCT=$PRODUCT_ADB
;;
*)
if [ "$1" = "probe" ] ; then
echo "Usage: $0 probe {acm|msc|cvg|rndis|uvc|uac1|adb}"
exit 1
fi
esac
calc_func() {
FUNC_NUM=$(ls $CVI_GADGET/functions -l | grep ^d | wc -l)
echo "$FUNC_NUM file(s)"
}
res_check() {
TMP_NUM=$(find $CVI_GADGET/functions/ -name "acm*" | wc -l)
EP_OUT=$(($EP_OUT+$TMP_NUM))
TMP_NUM=$(($TMP_NUM * 2))
EP_IN=$(($EP_IN+$TMP_NUM))
INTF_NUM=$(($INTF_NUM+$TMP_NUM))
TMP_NUM=$(find $CVI_GADGET/functions/ -name "mass_storage*" | wc -l)
EP_IN=$(($EP_IN+$TMP_NUM))
EP_OUT=$(($EP_OUT+$TMP_NUM))
INTF_NUM=$(($INTF_NUM+$TMP_NUM))
TMP_NUM=$(find $CVI_GADGET/functions/ -name "cvg*" | wc -l)
EP_IN=$(($EP_IN+$TMP_NUM))
EP_OUT=$(($EP_OUT+$TMP_NUM))
INTF_NUM=$(($INTF_NUM+$TMP_NUM))
TMP_NUM=$(find $CVI_GADGET/functions/ -name "rndis*" | wc -l)
EP_OUT=$(($EP_OUT+$TMP_NUM))
TMP_NUM=$(($TMP_NUM * 2))
EP_IN=$(($EP_IN+$TMP_NUM))
INTF_NUM=$(($INTF_NUM+$TMP_NUM))
TMP_NUM=$(find $CVI_GADGET/functions/ -name "uvc*" | wc -l)
TMP_NUM=$(($TMP_NUM * 2))
EP_IN=$(($EP_IN+$TMP_NUM))
INTF_NUM=$(($INTF_NUM+$TMP_NUM))
TMP_NUM=$(find $CVI_GADGET/functions/ -name "uac1*" | wc -l)
TMP_NUM=$(($TMP_NUM * 2))
EP_IN=$(($EP_IN+$TMP_NUM))
EP_OUT=$(($EP_OUT+$TMP_NUM))
INTF_NUM=$(($INTF_NUM+$TMP_NUM))
TMP_NUM=$(find $CVI_GADGET/functions/ -name ffs.adb | wc -l)
EP_IN=$(($EP_IN+$TMP_NUM))
EP_OUT=$(($EP_OUT+$TMP_NUM))
INTF_NUM=$(($INTF_NUM+$TMP_NUM))
if [ "$CLASS" = "acm" ] ; then
EP_IN=$(($EP_IN+2))
EP_OUT=$(($EP_OUT+1))
fi
if [ "$CLASS" = "mass_storage" ] ; then
EP_IN=$(($EP_IN+1))
EP_OUT=$(($EP_OUT+1))
fi
if [ "$CLASS" = "cvg" ] ; then
EP_IN=$(($EP_IN+1))
EP_OUT=$(($EP_OUT+1))
fi
if [ "$CLASS" = "rndis" ] ; then
EP_IN=$(($EP_IN+2))
EP_OUT=$(($EP_OUT+1))
fi
if [ "$CLASS" = "uvc" ] ; then
EP_IN=$(($EP_IN+2))
fi
if [ "$CLASS" = "uac1" ] ; then
EP_IN=$(($EP_IN+1))
EP_OUT=$(($EP_OUT+1))
fi
if [ "$CLASS" = "ffs.adb" ] ; then
EP_IN=$(($EP_IN+1))
EP_OUT=$(($EP_OUT+1))
fi
echo "$EP_IN in ep"
echo "$EP_OUT out ep"
if [ $EP_IN -gt $MAX_EP_NUM ]; then
echo "reach maximum resource"
exit 1
fi
if [ $EP_OUT -gt $MAX_EP_NUM ]; then
echo "reach maximum resource"
exit 1
fi
}
probe() {
if [ ! -d $CVI_DIR ]; then
mkdir $CVI_DIR
fi
if [ ! -d $CVI_DIR/usb_gadget ]; then
# Enale USB ConfigFS
mount none $CVI_DIR -t configfs
# Create gadget dev
mkdir $CVI_GADGET
# Set the VID and PID
echo $VID >$CVI_GADGET/idVendor
echo $PID >$CVI_GADGET/idProduct
# Set the product information string
mkdir $CVI_GADGET/strings/0x409
echo $MANUFACTURER>$CVI_GADGET/strings/0x409/manufacturer
echo $PRODUCT>$CVI_GADGET/strings/0x409/product
echo $SERIAL>$CVI_GADGET/strings/0x409/serialnumber
# Set the USB configuration
mkdir $CVI_GADGET/configs/c.1
mkdir $CVI_GADGET/configs/c.1/strings/0x409
echo "config1">$CVI_GADGET/configs/c.1/strings/0x409/configuration
# Set the MaxPower of USB descriptor
echo 120 >$CVI_GADGET/configs/c.1/MaxPower
fi
# get current functions number
calc_func
# assign the class code for composite device
if [ ! $FUNC_NUM -eq 0 ]; then
echo 0xEF >$CVI_GADGET/bDeviceClass
echo 0x02 >$CVI_GADGET/bDeviceSubClass
echo 0x01 >$CVI_GADGET/bDeviceProtocol
fi
# resource check
res_check
# create the desired function
if [ "$CLASS" = "ffs.adb" ] ; then
# adb shall be the last function to probe. Override the pid/vid
echo $VID >$CVI_GADGET/idVendor
echo $PID >$CVI_GADGET/idProduct
# choose pid for different function number
if [ $INTF_NUM -eq 1 ]; then
echo $ADB_PID_M1 >$CVI_GADGET/idProduct
fi
if [ $INTF_NUM -eq 2 ]; then
echo $ADB_PID_M2 >$CVI_GADGET/idProduct
fi
mkdir $CVI_GADGET/functions/$CLASS
else
mkdir $CVI_GADGET/functions/$CLASS.usb$FUNC_NUM
fi
if [ "$CLASS" = "mass_storage" ] ; then
echo $MSC_FILE >$CVI_GADGET/functions/$CLASS.usb$FUNC_NUM/lun.0/file
fi
if [ "$CLASS" = "rndis" ] ; then
#OS STRING
echo 1 >$CVI_GADGET/os_desc/use
echo 0xcd >$CVI_GADGET/os_desc/b_vendor_code
echo MSFT100 >$CVI_GADGET/os_desc/qw_sign
#COMPATIBLE ID
echo RNDIS >$CVI_FUNC/rndis.usb$FUNC_NUM/os_desc/interface.rndis/compatible_id
#MAKE c.1 THE ONE ASSOCIATED WITH OS DESCRIPTORS
ln -s $CVI_GADGET/configs/c.1 $CVI_GADGET/os_desc
#MAKE "Icons" EXTENDED PROPERTY
mkdir $CVI_FUNC/rndis.usb$FUNC_NUM/os_desc/interface.rndis/Icons
echo 2 >$CVI_FUNC/rndis.usb$FUNC_NUM/os_desc/interface.rndis/Icons/type
echo "%SystemRoot%\\system32\\shell32.dll,-233" >$CVI_FUNC/rndis.usb$FUNC_NUM/os_desc/interface.rndis/Icons/data
#MAKE "Label" EXTENDED PROPERTY
mkdir $CVI_FUNC/rndis.usb$FUNC_NUM/os_desc/interface.rndis/Label
echo 1 >$CVI_FUNC/rndis.usb$FUNC_NUM/os_desc/interface.rndis/Label/type
echo "XYZ Device" >$CVI_FUNC/rndis.usb$FUNC_NUM/os_desc/interface.rndis/Label/data
fi
}
start() {
# link this function to the configuration
calc_func
if [ $FUNC_NUM -eq 0 ]; then
echo "Functions Empty!"
exit 1
fi
if [ -d $CVI_GADGET/functions/ffs.adb ]; then
FUNC_NUM=$(($FUNC_NUM-1))
fi
for i in `seq 0 $(($FUNC_NUM-1))`;
do
find $CVI_GADGET/functions/ -name "*.usb$i" | xargs -I % ln -s % $CVI_GADGET/configs/c.1
done
if [ -d $CVI_GADGET/functions/ffs.adb ]; then
ln -s $CVI_GADGET/functions/ffs.adb $CVI_GADGET/configs/c.1
mkdir /dev/usb-ffs/adb -p
mount -t functionfs adb /dev/usb-ffs/adb
if [ -f $ADBD_PATH/adbd ]; then
$ADBD_PATH/adbd &
fi
else
# Start the gadget driver
UDC=`ls /sys/class/udc/ | awk '{print $1}'`
echo ${UDC} >$CVI_GADGET/UDC
fi
}
stop() {
if [ -d $CVI_GADGET/configs/c.1/ffs.adb ]; then
pkill adbd
rm $CVI_GADGET/configs/c.1/ffs.adb
else
echo "" >$CVI_GADGET/UDC
fi
find $CVI_GADGET/configs/ -name "*.usb*" | xargs rm -f
rmdir $CVI_GADGET/configs/c.*/strings/0x409/
tmp_dirs=$(find $CVI_GADGET/os_desc/c.* -type d)
if [ -n tmp_dirs ]; then
echo "remove os_desc!"
rm -rf $CVI_GADGET/os_desc/c.*/
find $CVI_GADGET/functions/ -name Icons | xargs rmdir
find $CVI_GADGET/functions/ -name Label | xargs rmdir
fi
rmdir $CVI_GADGET/configs/c.*/
rmdir $CVI_GADGET/functions/*
rmdir $CVI_GADGET/strings/0x409/
rmdir $CVI_GADGET
umount $CVI_DIR
rmdir $CVI_DIR
}
case "$1" in
start)
start
;;
stop)
stop
;;
probe)
probe
;;
UDC)
UDC=`ls /sys/class/udc/ | awk '{print $1}'`
echo ${UDC} >$CVI_GADGET/UDC
;;
*)
echo "Usage: $0 probe {acm|msc|cvg|uvc|uac1} {file (msc)}"
echo "Usage: $0 start"
echo "Usage: $0 stop"
exit 1
esac
exit $?

View file

@ -0,0 +1,7 @@
start 10.100.100.100
end 10.100.100.200
interface usb0
pidfile /var/run/udhcpd.usb0.pid
lease_file /var/lib/misc/udhcpd.usb0.leases
option subnet 255.255.255.0
option lease 864000

View file

@ -49,9 +49,8 @@ CONFIG_CMD_CVI_VO=y
CONFIG_CMD_CVISOUND=y
# CONFIG_CMD_CVI_UPDATE is not set
# CONFIG_ISO_PARTITION is not set
CONFIG_ENV_IS_NOWHERE=y
CONFIG_ENV_IS_IN_FAT=y
CONFIG_ENV_FAT_DEVICE_AND_PART="1"
CONFIG_ENV_FAT_DEVICE_AND_PART="0"
CONFIG_BOOTP_SEND_HOSTNAME=y
CONFIG_NET_RANDOM_ETHADDR=y
CONFIG_BUTTON=y

View file

@ -21,7 +21,7 @@ BR2_CCACHE=y
BR2_GLOBAL_PATCH_DIR="$(BR2_EXTERNAL_LICHEERVNANO_BR_PATH)/board/sipeed/licheervnano/patches/"
BR2_TARGET_GENERIC_HOSTNAME="licheervnano"
BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV=y
BR2_SYSTEM_DHCP="eth0 wlan0"
BR2_TARGET_TZ_INFO=y
BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_LICHEERVNANO_BR_PATH)/board/sipeed/licheervnano/rootfs-overlay"
BR2_ROOTFS_POST_FAKEROOT_SCRIPT="$(BR2_EXTERNAL_LICHEERVNANO_BR_PATH)/board/sipeed/licheervnano/preimage.sh"
BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_LICHEERVNANO_BR_PATH)/board/sipeed/licheervnano/postinstall.sh"
@ -88,6 +88,37 @@ BR2_PACKAGE_UNZIP=y
BR2_PACKAGE_XZ=y
BR2_PACKAGE_ZIP=y
BR2_PACKAGE_ZSTD=y
BR2_PACKAGE_COREMARK=y
BR2_PACKAGE_COREMARK_PRO=y
BR2_PACKAGE_DHRYSTONE=y
BR2_PACKAGE_FIO=y
BR2_PACKAGE_IOZONE=y
BR2_PACKAGE_LMBENCH=y
BR2_PACKAGE_LSOF=y
BR2_PACKAGE_RAMSMP=y
BR2_PACKAGE_RAMSPEED=y
BR2_PACKAGE_STRACE=y
BR2_PACKAGE_STRESS=y
BR2_PACKAGE_STRESS_NG=y
BR2_PACKAGE_TINYMEMBENCH=y
BR2_PACKAGE_BINUTILS=y
BR2_PACKAGE_BINUTILS_TARGET=y
BR2_PACKAGE_DIFFUTILS=y
BR2_PACKAGE_DOS2UNIX=y
BR2_PACKAGE_FINDUTILS=y
BR2_PACKAGE_FLEX=y
BR2_PACKAGE_GAWK=y
BR2_PACKAGE_GETTEXT=y
BR2_PACKAGE_GIT=y
BR2_PACKAGE_GREP=y
BR2_PACKAGE_JQ=y
BR2_PACKAGE_LIBTOOL=y
BR2_PACKAGE_MAKE=y
BR2_PACKAGE_MAWK=y
BR2_PACKAGE_PATCH=y
BR2_PACKAGE_PKGCONF=y
BR2_PACKAGE_SED=y
BR2_PACKAGE_TREE=y
BR2_PACKAGE_DOSFSTOOLS=y
BR2_PACKAGE_DOSFSTOOLS_FATLABEL=y
BR2_PACKAGE_DOSFSTOOLS_FSCK_FAT=y
@ -96,6 +127,12 @@ BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y
BR2_PACKAGE_E2TOOLS=y
BR2_PACKAGE_EXFAT_UTILS=y
BR2_PACKAGE_EXFATPROGS=y
BR2_PACKAGE_F2FS_TOOLS=y
BR2_PACKAGE_MMC_UTILS=y
BR2_PACKAGE_MTD=y
BR2_PACKAGE_MTD_MTDPART=y
BR2_PACKAGE_NFS_UTILS=y
BR2_PACKAGE_NFS_UTILS_NFSV4=y
BR2_PACKAGE_FB_TEST_APP=y
BR2_PACKAGE_FBDUMP=y
BR2_PACKAGE_FBGRAB=y
@ -138,6 +175,7 @@ BR2_PACKAGE_EVTEST=y
BR2_PACKAGE_GPTFDISK=y
BR2_PACKAGE_GPTFDISK_SGDISK=y
BR2_PACKAGE_I2C_TOOLS=y
BR2_PACKAGE_INPUT_EVENT_DAEMON=y
BR2_PACKAGE_LM_SENSORS=y
BR2_PACKAGE_LSHW=y
BR2_PACKAGE_MEMTESTER=y
@ -160,8 +198,8 @@ BR2_PACKAGE_LUA_LINENOISE=y
BR2_PACKAGE_PYTHON3=y
BR2_PACKAGE_PYTHON3_PY_PYC=y
BR2_PACKAGE_PYTHON3_CURSES=y
BR2_PACKAGE_TINYALSA=y
BR2_PACKAGE_TINYALSA_TOOLS=y
BR2_PACKAGE_LIBOPENSSL_BIN=y
BR2_PACKAGE_MARIADB=y
BR2_PACKAGE_SQLITE_STAT4=y
BR2_PACKAGE_SQLITE_ENABLE_FTS3=y
@ -169,7 +207,10 @@ BR2_PACKAGE_SQLITE_ENABLE_JSON1=y
BR2_PACKAGE_SQLITE_ENABLE_UNLOCK_NOTIFY=y
BR2_PACKAGE_LIBGPIOD=y
BR2_PACKAGE_LIBGPIOD_TOOLS=y
BR2_PACKAGE_LIBHID=y
BR2_PACKAGE_GMP=y
BR2_PACKAGE_PCRE=y
BR2_PACKAGE_BC=y
BR2_PACKAGE_AVAHI=y
BR2_PACKAGE_AVAHI_DAEMON=y
BR2_PACKAGE_AVAHI_DEFAULT_SERVICES=y
@ -178,8 +219,15 @@ BR2_PACKAGE_DROPBEAR=y
BR2_PACKAGE_DROPBEAR_WTMP=y
BR2_PACKAGE_DROPBEAR_LASTLOG=y
BR2_PACKAGE_ETHTOOL=y
BR2_PACKAGE_HOSTAPD=y
BR2_PACKAGE_IFUPDOWN=y
BR2_PACKAGE_IPERF3=y
BR2_PACKAGE_IPROUTE2=y
BR2_PACKAGE_IPSET=y
BR2_PACKAGE_IPTABLES=y
BR2_PACKAGE_IPUTILS=y
BR2_PACKAGE_IW=y
BR2_PACKAGE_IWD=y
BR2_PACKAGE_NET_TOOLS=y
BR2_PACKAGE_NFTABLES=y
BR2_PACKAGE_NTP=y
@ -217,6 +265,7 @@ BR2_PACKAGE_TMUX=y
BR2_PACKAGE_TTYD=y
BR2_PACKAGE_ACL=y
BR2_PACKAGE_ATOP=y
BR2_PACKAGE_DEBIANUTILS=y
BR2_PACKAGE_HTOP=y
BR2_PACKAGE_PSMISC=y
BR2_PACKAGE_UTIL_LINUX_PARTX=y
@ -234,6 +283,7 @@ BR2_TARGET_OPENSBI_CUSTOM_GIT=y
BR2_TARGET_OPENSBI_CUSTOM_REPO_URL="https://github.com/sophgo/opensbi.git"
BR2_TARGET_OPENSBI_CUSTOM_REPO_VERSION="216793f112543151ae6b01595d4ba20ee58f4f7c"
BR2_TARGET_OPENSBI_PLAT="generic"
# BR2_TARGET_OPENSBI_INSTALL_JUMP_IMG is not set
BR2_TARGET_OPENSBI_UBOOT_PAYLOAD=y
BR2_TARGET_OPENSBI_FW_FDT_PATH=y
BR2_TARGET_UBOOT=y
@ -256,4 +306,6 @@ BR2_PACKAGE_CVITEKCONFIG_PANEL_ZCT2133V1=y
BR2_PACKAGE_AIC_FIRMWARE=y
BR2_PACKAGE_CLOUDUTILS=y
BR2_PACKAGE_CVITEK_MODULES=y
BR2_PACKAGE_CVITEK_MIDDLEWARE=y
TARGET_PACKAGE_CVITEK_FBTOOLS=y
BR2_TARGET_CVITEKFSBL=y

View file

@ -4,3 +4,4 @@ source "$BR2_EXTERNAL_LICHEERVNANO_BR_PATH/package/cvitek-modules/Config.in"
source "$BR2_EXTERNAL_LICHEERVNANO_BR_PATH/package/cvitek-middleware/Config.in"
source "$BR2_EXTERNAL_LICHEERVNANO_BR_PATH/package/miniz/Config.in"
source "$BR2_EXTERNAL_LICHEERVNANO_BR_PATH/package/cvitek-oss/Config.in"
source "$BR2_EXTERNAL_LICHEERVNANO_BR_PATH/package/cvitek-fbtools/Config.in"

View file

@ -0,0 +1,4 @@
config TARGET_PACKAGE_CVITEK_FBTOOLS
bool "FrameBuffer Tools for CVITEK"
help
Framebuffer Tools for CVITEK Boards

View file

@ -0,0 +1,24 @@
################################################################################
#
# cvitek-config
#
################################################################################
#CVITEKFSBL_VERSION = 415722ebd855abef2ba11e9cba3d80106d250eff
CVITEK_FBTOOLS_SITE = $(BR2_EXTERNAL_LICHEERVNANO_BR_PATH)/package/cvitek-fbtools/fbtools
CVITEK_FBTOOLS_SITE_METHOD = local
define CVITEK_FBTOOLS_BUILD_CMDS
CC=$(BR2_TOOLCHAIN_EXTERNAL_PREFIX)-gcc $(TARGET_MAKE_ENV) make -C $(@D)/src all
endef
define CVITEK_FBTOOLS_INSTALL_TARGET_CMDS
$(INSTALL) -D -m 0755 $(@D)/src/fbbar $(TARGET_DIR)/usr/bin/
$(INSTALL) -D -m 0755 $(@D)/src/fbpattern $(TARGET_DIR)/usr/bin/
$(INSTALL) -D -m 0755 $(@D)/src/fbdaemon $(TARGET_DIR)/usr/bin/
$(INSTALL) -D -m 0755 $(@D)/etc/init.d/S05lcd $(TARGET_DIR)/etc/init.d/
endef
$(eval $(generic-package))

View file

@ -0,0 +1,29 @@
#!/bin/sh
case "$1" in
start)
printf "start lcd: "
if [ -e /boot/bpp16 ]
then
modprobe soph_fb.ko
else
modprobe soph_fb.ko
fi
/usr/bin/fbdaemon
echo "OK"
;;
stop)
printf "stop lcd: "
killall fbdaemon
echo "OK"
;;
restart|reload)
"$0" stop
"$0" start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
exit $?

View file

@ -0,0 +1,8 @@
CFLAGS += -Wall -Wextra -O3
all:
$(CC) $(CFLAGS) fbbar.c -o fbbar
$(CC) $(CFLAGS) fbpattern.c -o fbpattern
$(CC) $(CFLAGS) fbdaemon.c -o fbdaemon
clean:
rm -rf fbbar fbpattern fbdaemon *.out

View file

@ -0,0 +1,5 @@
build for cvitek board:
export CFLAGS="-mcpu=c906fdv -march=rv64imafdcv0p7xthead -mcmodel=medany -mabi=lp64d"
export CC=riscv64-unknown-linux-musl-gcc
make

View file

@ -0,0 +1,115 @@
#include <fcntl.h>
#include <linux/fb.h>
#include <stdint.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#define ABGR1555_BLUE (0b11111 << 0)
#define ABGR1555_GREEN (0b11111 << 5)
#define ABGR1555_RED (0b11111 << 10)
#define ABGR1555_WHITE (ABGR1555_BLUE | ABGR1555_GREEN | ABGR1555_RED)
#define ABGR1555_BLACK (0x00)
#define ABGR1555_YELLO (ABGR1555_RED | ABGR1555_GREEN)
#define ABGR1555_ALPHA (0b1 << 15)
struct fbabgr1555 {
uint8_t *mem;
struct fb_fix_screeninfo fix_info;
struct fb_var_screeninfo var_info;
};
typedef struct fbabgr1555 fbabgr1555;
static inline void fbabgr1555_draw_pixel(fbabgr1555 *fb, int x, int y,
uint16_t data) {
if ((((uint16_t)x) >= fb->var_info.xres) ||
(((uint16_t)y) >= fb->var_info.yres)) {
return;
}
uint8_t *p;
p = fb->mem;
p += y * fb->fix_info.line_length + x * 2; // 16bit framebuffer
uint16_t *p16;
p16 = (uint16_t *)p;
*p16 = data;
}
static inline void fbabgr1555_draw_xline(fbabgr1555 *fb, int xmin, int xmax,
int y, uint16_t data) {
for (; xmin <= xmax; xmin++) {
fbabgr1555_draw_pixel(fb, xmin, y, data);
}
}
static inline void fbabgr1555_draw_yline(fbabgr1555 *fb, int ymin, int ymax,
int x, uint16_t data) {
for (; ymin <= ymax; ymin++) {
fbabgr1555_draw_pixel(fb, x, ymin, data);
}
}
static inline void fbabgr1555_draw_rect(fbabgr1555 *fb, int xmin, int ymin,
int xmax, int ymax, uint16_t data) {
fbabgr1555_draw_xline(fb, xmin, xmax, ymin, data);
fbabgr1555_draw_xline(fb, xmin, xmax, ymax, data);
fbabgr1555_draw_yline(fb, ymin, ymax, xmin, data);
fbabgr1555_draw_yline(fb, ymin, ymax, xmax, data);
}
static inline void fbabgr1555_draw_solid(fbabgr1555 *fb, int xmin, int ymin,
int xmax, int ymax, uint16_t data) {
for (; ymin <= ymax; ymin++) {
fbabgr1555_draw_xline(fb, xmin, xmax, ymin, data);
}
}
#include "uni_vga.h"
// fallbback, no font
#ifndef FONT_H
#define FONT_H 0
#endif
#ifndef FONT_W
#define FONT_W 0
#endif
#ifndef FONT_CODE_POINTS
#define FONT_CODE_POINTS 0
#endif
static inline void fbabgr1555_draw_char(fbabgr1555 *fb, int x, int y,
uint16_t fg, uint16_t bg, int c) {
int i;
int found = 0;
// todo, replace by binary search
for (i = 0; i < FONT_CODE_POINTS; i++) {
if (c == font_default_code_points[i]) {
found = 1;
break;
}
}
if (!found) {
return;
}
int xf, yf;
for (yf = 0; yf < FONT_H; yf++) {
for (xf = 0; xf < FONT_W; xf++) {
if (font_default_data[i][yf] & (1 << (FONT_W - xf))) {
fbabgr1555_draw_pixel(fb, x + xf, y + yf, fg);
} else {
fbabgr1555_draw_pixel(fb, x + xf, y + yf, bg);
}
}
}
}
static inline void fbabgr1555_draw_str(fbabgr1555 *fb, int x, int y,
uint16_t fg, uint16_t bg, char *s) {
int i = 0;
while (s[i] != '\0') {
fbabgr1555_draw_char(fb, x, y, fg, bg, s[i]);
x += FONT_W;
i++;
}
}

View file

@ -0,0 +1,115 @@
#include <fcntl.h>
#include <linux/fb.h>
#include <stdint.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#define ABGR8888_BLUE (0xFF << 0)
#define ABGR8888_GREEN (0xFF << 8)
#define ABGR8888_RED (0xFF << 16)
#define ABGR8888_WHITE (ABGR8888_BLUE | ABGR8888_GREEN | ABGR8888_RED)
#define ABGR8888_BLACK (0x00)
#define ABGR8888_YELLO (ABGR8888_RED | ABGR8888_GREEN)
#define ABGR8888_ALPHA (0xFF << 24)
struct fbabgr8888 {
uint8_t *mem;
struct fb_fix_screeninfo fix_info;
struct fb_var_screeninfo var_info;
};
typedef struct fbabgr8888 fbabgr8888;
static inline void fbabgr8888_draw_pixel(fbabgr8888 *fb, int x, int y,
uint32_t data) {
if ((((uint16_t)x) >= fb->var_info.xres) ||
(((uint16_t)y) >= fb->var_info.yres)) {
return;
}
uint8_t *p;
p = fb->mem;
p += y * fb->fix_info.line_length + x * 4; // 32bit framebuffer
uint32_t *p32;
p32 = (uint32_t *)p;
*p32 = data;
}
static inline void fbabgr8888_draw_xline(fbabgr8888 *fb, int xmin, int xmax,
int y, uint32_t data) {
for (; xmin <= xmax; xmin++) {
fbabgr8888_draw_pixel(fb, xmin, y, data);
}
}
static inline void fbabgr8888_draw_yline(fbabgr8888 *fb, int ymin, int ymax,
int x, uint32_t data) {
for (; ymin <= ymax; ymin++) {
fbabgr8888_draw_pixel(fb, x, ymin, data);
}
}
static inline void fbabgr8888_draw_rect(fbabgr8888 *fb, int xmin, int ymin,
int xmax, int ymax, uint32_t data) {
fbabgr8888_draw_xline(fb, xmin, xmax, ymin, data);
fbabgr8888_draw_xline(fb, xmin, xmax, ymax, data);
fbabgr8888_draw_yline(fb, ymin, ymax, xmin, data);
fbabgr8888_draw_yline(fb, ymin, ymax, xmax, data);
}
static inline void fbabgr8888_draw_solid(fbabgr8888 *fb, int xmin, int ymin,
int xmax, int ymax, uint32_t data) {
for (; ymin <= ymax; ymin++) {
fbabgr8888_draw_xline(fb, xmin, xmax, ymin, data);
}
}
#include "uni_vga.h"
// fallbback, no font
#ifndef FONT_H
#define FONT_H 0
#endif
#ifndef FONT_W
#define FONT_W 0
#endif
#ifndef FONT_CODE_POINTS
#define FONT_CODE_POINTS 0
#endif
static inline void fbabgr8888_draw_char(fbabgr8888 *fb, int x, int y,
uint32_t fg, uint32_t bg, int c) {
int i;
int found = 0;
// todo, replace by binary search
for (i = 0; i < FONT_CODE_POINTS; i++) {
if (c == font_default_code_points[i]) {
found = 1;
break;
}
}
if (!found) {
return;
}
int xf, yf;
for (yf = 0; yf < FONT_H; yf++) {
for (xf = 0; xf < FONT_W; xf++) {
if (font_default_data[i][yf] & (1 << (FONT_W - xf))) {
fbabgr8888_draw_pixel(fb, x + xf, y + yf, fg);
} else {
fbabgr8888_draw_pixel(fb, x + xf, y + yf, bg);
}
}
}
}
static inline void fbabgr8888_draw_str(fbabgr8888 *fb, int x, int y,
uint32_t fg, uint32_t bg, char *s) {
int i = 0;
while (s[i] != '\0') {
fbabgr8888_draw_char(fb, x, y, fg, bg, s[i]);
x += FONT_W;
i++;
}
}

Binary file not shown.

View file

@ -0,0 +1,87 @@
#include <stdio.h>
#include <stdlib.h>
#include <sys/select.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdint.h>
#include <sys/mman.h>
#include <linux/fb.h>
#include <sys/ioctl.h>
#include <string.h>
#include <time.h>
#include <signal.h>
#include "fbabgr8888.h"
int main(int argc, char *argv[]) {
int x;
int y;
if (argc < 4) {
printf("usage: %s y fg bg\n",argv[0]);
printf("bg/fg: format: \n");
printf("[ALPHA 8bit][BLUE 8bit][GREEN 8bit][RED 8bit]\n");
printf("black: 0xFF000000, white: 0xFFFFFFFF\n");
exit(EXIT_FAILURE);
}
x = 0;
y = atoi(argv[1]);
uint32_t fg;
uint32_t bg;
fg = strtol(argv[2], NULL, 16);
bg = strtol(argv[3], NULL, 16);
int fbfd = -1;
char *fbdev = "/dev/fb0";
char *s;
s = getenv("FRAMEBUFFER");
if (s != NULL) {
fbdev = s;
}
fbfd = open(fbdev, O_RDWR);
if (fbfd < 0) {
perror("can't open framebuffer device");
exit(EXIT_FAILURE);
}
fbabgr8888 fb;
if (ioctl(fbfd, FBIOGET_FSCREENINFO, &fb.fix_info) < 0) {
perror("can't get framebuffer fix info");
exit(EXIT_FAILURE);
}
if (ioctl(fbfd, FBIOGET_VSCREENINFO, &fb.var_info) < 0) {
perror("can't get framebuffer var info");
exit(EXIT_FAILURE);
}
fb.mem = mmap(NULL, fb.fix_info.smem_len, PROT_READ | PROT_WRITE,
MAP_SHARED, fbfd, 0);
if (fb.mem == MAP_FAILED) {
perror("mmap");
exit(EXIT_FAILURE);
}
char *buf;
int bufsize;
bufsize = fb.var_info.xres / FONT_W;
buf = malloc(bufsize);
while(1) {
memset(buf, ' ', bufsize);
if (fgets(buf, bufsize - 1, stdin) == NULL) {
if (feof(stdin) != 0) {
exit(EXIT_SUCCESS);
} else {
perror("fgets");
}
}
buf[bufsize - 1] = '\0';
fbabgr8888_draw_solid(&fb, x, y,
fb.var_info.xres, y + FONT_H, bg);
fbabgr8888_draw_str(&fb, x, y, fg, bg, buf);
}
}

Binary file not shown.

View file

@ -0,0 +1,39 @@
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdint.h>
int main(void) {
int fbfd = -1;
char *fbdev = "/dev/fb0";
char *s;
chdir("/");
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);
switch(fork()) {
case -1:
perror("fork");
exit(EXIT_FAILURE);
case 0:
s = getenv("FRAMEBUFFER");
if (s != NULL) {
fbdev = s;
}
fbfd = open(fbdev, O_RDWR);
if (fbfd < 0) {
perror("can't open framebuffer device");
exit(EXIT_FAILURE);
}
// nothing, just open framebuffer node
// for buggy cvi_fb.ko driver
while(1) {
sleep(100000);
}
break;
default:
_exit(EXIT_SUCCESS);
break;
}
}

Binary file not shown.

View file

@ -0,0 +1,192 @@
#include <stdio.h>
#include <stdlib.h>
#include <sys/select.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdint.h>
#include <sys/mman.h>
#include <linux/fb.h>
#include <sys/ioctl.h>
#include <string.h>
#include <time.h>
#include <signal.h>
#include "fbabgr8888.h"
int main(void) {
int fbfd = -1;
char *fbdev = "/dev/fb0";
char *s;
s = getenv("FRAMEBUFFER");
if (s != NULL) {
fbdev = s;
}
fbfd = open(fbdev, O_RDWR);
if (fbfd < 0) {
perror("can't open framebuffer device");
exit(EXIT_FAILURE);
}
fbabgr8888 fb;
if (ioctl(fbfd, FBIOGET_FSCREENINFO, &fb.fix_info) < 0) {
perror("can't get framebuffer fix info");
exit(EXIT_FAILURE);
}
if (ioctl(fbfd, FBIOGET_VSCREENINFO, &fb.var_info) < 0) {
perror("can't get framebuffer var info");
exit(EXIT_FAILURE);
}
fb.mem = mmap(NULL, fb.fix_info.smem_len, PROT_READ | PROT_WRITE,
MAP_SHARED, fbfd, 0);
if (fb.mem == MAP_FAILED) {
perror("mmap");
exit(EXIT_FAILURE);
}
int x, y;
int patsize;
patsize = fb.var_info.xres >> 3;
x = patsize;
y = fb.var_info.yres - patsize;
fbabgr8888_draw_solid(&fb,
x - patsize,
y - patsize,
x,
y,
ABGR8888_RED | ABGR8888_ALPHA);
fbabgr8888_draw_str(&fb,
x - patsize,
y - patsize,
ABGR8888_BLACK | ABGR8888_ALPHA,
ABGR8888_WHITE | ABGR8888_ALPHA,
" RED ");
fbabgr8888_draw_solid(&fb,
x,
y - patsize,
x + patsize,
y,
ABGR8888_GREEN | ABGR8888_ALPHA);
fbabgr8888_draw_str(&fb,
x,
y - patsize,
ABGR8888_BLACK | ABGR8888_ALPHA,
ABGR8888_WHITE | ABGR8888_ALPHA,
" GREEN ");
fbabgr8888_draw_solid(&fb,
x - patsize,
y,
x,
y + patsize,
ABGR8888_BLUE | ABGR8888_ALPHA);
fbabgr8888_draw_str(&fb,
x - patsize,
y,
ABGR8888_BLACK | ABGR8888_ALPHA,
ABGR8888_WHITE | ABGR8888_ALPHA,
" BLUE ");
fbabgr8888_draw_solid(&fb,
x,
y,
x + patsize,
y + patsize,
ABGR8888_WHITE | ABGR8888_ALPHA);
fbabgr8888_draw_str(&fb,
x,
y,
ABGR8888_BLACK | ABGR8888_ALPHA,
ABGR8888_WHITE | ABGR8888_ALPHA,
" WHITE ");
x = fb.var_info.xres - patsize;
y = fb.var_info.yres - patsize;
int xmin, ymin, xmax, ymax;
uint32_t color;
xmin = x - patsize;
ymin = y - patsize;
xmax = x;
ymax = y;
for (; xmin < xmax; xmin++) {
if (xmin & 1) {
color = ABGR8888_BLACK | ABGR8888_ALPHA;
} else {
color = ABGR8888_WHITE | ABGR8888_ALPHA;
}
fbabgr8888_draw_yline(&fb, ymin, ymax, xmin, color);
}
fbabgr8888_draw_str(&fb,
x - patsize,
y - patsize,
ABGR8888_BLACK | ABGR8888_ALPHA,
ABGR8888_WHITE | ABGR8888_ALPHA,
" VLINE ");
xmin = x;
ymin = y - patsize;
xmax = x + patsize;
ymax = y;
for (; ymin < ymax; ymin++) {
if (ymin & 1) {
color = ABGR8888_BLACK | ABGR8888_ALPHA;
} else {
color = ABGR8888_WHITE | ABGR8888_ALPHA;
}
fbabgr8888_draw_xline(&fb, xmin, xmax, ymin, color);
}
fbabgr8888_draw_str(&fb,
x,
y - patsize,
ABGR8888_BLACK | ABGR8888_ALPHA,
ABGR8888_WHITE | ABGR8888_ALPHA,
" HLINE ");
xmin = x - patsize;
ymin = y;
xmax = x;
ymax = y + patsize;
for (; ymin < ymax; ymin++) {
for (xmin = x - patsize; xmin < xmax; xmin++) {
if ((xmin + ymin) & 1) {
color = ABGR8888_BLACK | ABGR8888_ALPHA;
} else {
color = ABGR8888_WHITE | ABGR8888_ALPHA;
}
fbabgr8888_draw_pixel(&fb, xmin, ymin, color);
}
}
fbabgr8888_draw_str(&fb,
x - patsize,
y,
ABGR8888_BLACK | ABGR8888_ALPHA,
ABGR8888_WHITE | ABGR8888_ALPHA,
" CHESS ");
fbabgr8888_draw_solid(&fb,
x,
y,
x + patsize,
y + patsize,
ABGR8888_BLACK | ABGR8888_ALPHA);
fbabgr8888_draw_str(&fb,
x,
y,
ABGR8888_BLACK | ABGR8888_ALPHA,
ABGR8888_WHITE | ABGR8888_ALPHA,
" BLACK ");
exit(EXIT_SUCCESS);
}

File diff suppressed because it is too large Load diff

View file

@ -3,6 +3,8 @@ CVITEK_MIDDLEWARE_SITE = $(call github,sophgo,middleware,$(CVITEK_MIDDLEWARE_VE
CVITEK_MIDDLEWARE_LICENSE = GPL-3.0
CVITEK_MIDDLEWARE_DEPENDENCIES = cvitek-modules miniz json-c tinyalsa cvitek-oss cvitekconfig
CVITEK_MIDDLEWARE_INSTALL_STAGING = YES
UCCHIPARCH = $(shell echo '$(BR2_PACKAGE_CVITEKCONFIG_CHIP_ARCH)' | tr '[:lower:]' '[:upper:]')
CVITEK_MIDDLEWARE_MAKE_OPTS = \