BusyBox是一個遵循GPL協定, 以自由軟體形式發行的應用程式. Busybox在單一的可執行檔中提供了精簡的Unix工具集,可執行於多款POSIX環境的作業系統, 例如Linux (包括Android[6]) , Hurd[7], FreeBSD[8][9]等等. 由於BusyBox執行檔的檔案大小比較小, 並通常使用Linux內核, 這使得它非常適合使用於嵌入式系統。作者將BusyBox稱為 "嵌入式Linux的瑞士軍刀" .
筆者曾經製作過 Embedded Linux 之 rootfs ; 但真正需要製作或 Customize 時, 卻往往左支右絀, 這都是以往沒有將一些經驗文件化的結果. 網路上一時找不到適合的. 想一想還是參考網路上的資料自己慢慢製作吧. 筆者這過程 post 至 blog 上, 等下次碰到同樣的狀況時, 就很快完成.
安裝 Cross 編譯器
請使用下列 apt-get 指令 安裝 Armel Cross 編譯器. 注意: Armel 與 Armhf 不同.
sudo apt-get install -y g++-5-arm-linux-gnueabi gcc-5-arm-linux-gnueabi libstdc++-5-dev-armel-cross linux-libc-dev-armel-cross libc6-dev-armel-cross gcc-arm-linux-gnueabi g++-arm-linux-gnueabi libncurses5-dev
注意!! 如果您是使用 Ubuntu 14 (trusty) :
1. 執行 `sudo apt-get update` ; `sudo apt-get auto remove`
2. 先備份 /etc/apt/sources.list
cp /etc/apt/sources.list ~/sources.list
3. 編輯 /etc/apt/sources.list , 將所有 trusty 替換為 xenial
4. 執行 `sudo apt-get update`
5. 執行 `sudo apt-get install --reinstall -y g++-5-arm-linux-gnueabi gcc-5-arm-linux-gnueabi libstdc++-5-dev-armel-cross linux-libc-dev-armel-cross libc6-dev-armel-cross gcc-arm-linux-gnueabi g++-arm-linux-gnueabi libncurses5-dev`
6. 將備份還原
sudocp ~/sources.list /etc/apt/sources.list
7. 執行 `sudo apt-get update` ; `sudo apt-get auto remove`
產生我門所需要的 Busybox Defconfig
Busybox 之 defconfig (configs/arm9_defconfig) 我是使用 busybox 1.24.1 內 configs/cygwin_defconfig 修改而來的. 我已經盡可能地跟原始的 cygwin_defconfig 一致了, 然而 diff 出來仍有 300 餘行. 請準備這 patches/bb_arm9_defconfig.patch 檔案.
export PROJDIR=`pwd` export TARGET_SERIAL_CONSOL=ttyMK0
1. clone busybox
git clone https://git.busybox.net/busybox/ cd busybox/ git branch -a git checkout remotes/origin/1_24_stable
2. 以 patches/arm9_defconfig.patch 產生這 defconfig (configs/arm9_defconfig) :
Patch 指令是這樣的:
patch -d busybox --verbose configs/cygwin_defconfig --ignore-whitespace -i ../patches/arm9_defconfig.patch -o configs/arm9_defconfig
- patches/arm9_defconfig.patch
-
--- configs/cygwin_defconfig 2019-01-16 17:14:46.218653000 +0800 +++ configs/arm9_defconfig 2019-01-17 11:44:54.121906689 +0800 @@ -12,24 +12,24 @@ # # General Configuration # -CONFIG_DESKTOP=y +# CONFIG_DESKTOP is not set # CONFIG_EXTRA_COMPAT is not set -CONFIG_INCLUDE_SUSv2=y +# CONFIG_INCLUDE_SUSv2 is not set # CONFIG_USE_PORTABLE_CODE is not set CONFIG_PLATFORM_LINUX=y CONFIG_FEATURE_BUFFERS_USE_MALLOC=y # CONFIG_FEATURE_BUFFERS_GO_ON_STACK is not set # CONFIG_FEATURE_BUFFERS_GO_IN_BSS is not set CONFIG_SHOW_USAGE=y -CONFIG_FEATURE_VERBOSE_USAGE=y +# CONFIG_FEATURE_VERBOSE_USAGE is not set CONFIG_FEATURE_COMPRESS_USAGE=y -CONFIG_FEATURE_INSTALLER=y +# CONFIG_FEATURE_INSTALLER is not set # CONFIG_INSTALL_NO_USR is not set # CONFIG_LOCALE_SUPPORT is not set -CONFIG_UNICODE_SUPPORT=y +# CONFIG_UNICODE_SUPPORT is not set # CONFIG_UNICODE_USING_LOCALE is not set # CONFIG_FEATURE_CHECK_UNICODE_IN_ENV is not set -CONFIG_SUBST_WCHAR=65533 +CONFIG_SUBST_WCHAR=0 CONFIG_LAST_SUPPORTED_WCHAR=0 # CONFIG_UNICODE_COMBINING_WCHARS is not set # CONFIG_UNICODE_WIDE_WCHARS is not set @@ -39,17 +39,17 @@ CONFIG_LONG_OPTS=y CONFIG_FEATURE_DEVPTS=y # CONFIG_FEATURE_CLEAN_UP is not set -# CONFIG_FEATURE_UTMP is not set +CONFIG_FEATURE_UTMP=y # CONFIG_FEATURE_WTMP is not set CONFIG_FEATURE_PIDFILE=y CONFIG_FEATURE_SUID=y -# CONFIG_FEATURE_SUID_CONFIG is not set -# CONFIG_FEATURE_SUID_CONFIG_QUIET is not set +CONFIG_FEATURE_SUID_CONFIG=y +CONFIG_FEATURE_SUID_CONFIG_QUIET=y # CONFIG_SELINUX is not set # CONFIG_FEATURE_PREFER_APPLETS is not set CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe" CONFIG_FEATURE_SYSLOG=y -# CONFIG_FEATURE_HAVE_RPC is not set +CONFIG_FEATURE_HAVE_RPC=y # # Build Options @@ -62,7 +62,7 @@ # CONFIG_FEATURE_SHARED_BUSYBOX is not set CONFIG_LFS=y CONFIG_CROSS_COMPILER_PREFIX="" -CONFIG_EXTRA_CFLAGS="" +CONFIG_EXTRA_CFLAGS=" -O2 -g -feliminate-unused-debug-types -marm -pipe -march=armv5t" # # Debugging Options @@ -99,17 +99,17 @@ CONFIG_FEATURE_EDITING=y CONFIG_FEATURE_EDITING_MAX_LEN=1024 # CONFIG_FEATURE_EDITING_VI is not set -CONFIG_FEATURE_EDITING_HISTORY=255 +CONFIG_FEATURE_EDITING_HISTORY=15 CONFIG_FEATURE_EDITING_SAVEHISTORY=y CONFIG_FEATURE_TAB_COMPLETION=y -# CONFIG_FEATURE_USERNAME_COMPLETION is not set +CONFIG_FEATURE_USERNAME_COMPLETION=y CONFIG_FEATURE_EDITING_FANCY_PROMPT=y # CONFIG_FEATURE_EDITING_ASK_TERMINAL is not set CONFIG_FEATURE_NON_POSIX_CP=y # CONFIG_FEATURE_VERBOSE_CP_MESSAGE is not set CONFIG_FEATURE_COPYBUF_KB=4 CONFIG_FEATURE_SKIP_ROOTFS=y -# CONFIG_MONOTONIC_SYSCALL is not set +CONFIG_MONOTONIC_SYSCALL=y CONFIG_IOCTL_HEX2STR_ERROR=y CONFIG_FEATURE_HWIB=y @@ -141,18 +141,18 @@ CONFIG_FEATURE_GZIP_LONG_OPTIONS=y CONFIG_LZOP=y # CONFIG_LZOP_COMPR_HIGH is not set -CONFIG_RPM2CPIO=y -CONFIG_RPM=y +# CONFIG_RPM is not set +# CONFIG_RPM2CPIO is not set CONFIG_TAR=y CONFIG_FEATURE_TAR_CREATE=y CONFIG_FEATURE_TAR_AUTODETECT=y CONFIG_FEATURE_TAR_FROM=y CONFIG_FEATURE_TAR_OLDGNU_COMPATIBILITY=y -CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY=y +# CONFIG_FEATURE_TAR_OLDSUN_COMPATIBILITY is not set CONFIG_FEATURE_TAR_GNU_EXTENSIONS=y -CONFIG_FEATURE_TAR_LONG_OPTIONS=y -CONFIG_FEATURE_TAR_TO_COMMAND=y -CONFIG_FEATURE_TAR_UNAME_GNAME=y +# CONFIG_FEATURE_TAR_LONG_OPTIONS is not set +# CONFIG_FEATURE_TAR_TO_COMMAND is not set +# CONFIG_FEATURE_TAR_UNAME_GNAME is not set CONFIG_FEATURE_TAR_NOPRESERVE_TIME=y # CONFIG_FEATURE_TAR_SELINUX is not set # CONFIG_UNCOMPRESS is not set @@ -179,17 +179,17 @@ CONFIG_TOUCH=y CONFIG_TR=y CONFIG_FEATURE_TR_CLASSES=y -CONFIG_FEATURE_TR_EQUIV=y -CONFIG_BASE64=y -CONFIG_CAL=y -CONFIG_CATV=y +# CONFIG_FEATURE_TR_EQUIV is not set +# CONFIG_BASE64 is not set +# CONFIG_CAL is not set +# CONFIG_CATV is not set CONFIG_CHGRP=y CONFIG_CHMOD=y CONFIG_CHOWN=y -CONFIG_FEATURE_CHOWN_LONG_OPTIONS=y +# CONFIG_FEATURE_CHOWN_LONG_OPTIONS is not set CONFIG_CHROOT=y CONFIG_CKSUM=y -CONFIG_COMM=y +# CONFIG_COMM is not set CONFIG_CP=y CONFIG_FEATURE_CP_LONG_OPTIONS=y CONFIG_CUT=y @@ -200,26 +200,26 @@ CONFIG_DF=y CONFIG_FEATURE_DF_FANCY=y CONFIG_DIRNAME=y -CONFIG_DOS2UNIX=y -CONFIG_UNIX2DOS=y +# CONFIG_DOS2UNIX is not set +# CONFIG_UNIX2DOS is not set CONFIG_DU=y -# CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K is not set +CONFIG_FEATURE_DU_DEFAULT_BLOCKSIZE_1K=y CONFIG_ECHO=y CONFIG_FEATURE_FANCY_ECHO=y CONFIG_ENV=y CONFIG_FEATURE_ENV_LONG_OPTIONS=y -CONFIG_EXPAND=y -CONFIG_FEATURE_EXPAND_LONG_OPTIONS=y +# CONFIG_EXPAND is not set +# CONFIG_FEATURE_EXPAND_LONG_OPTIONS is not set CONFIG_EXPR=y CONFIG_EXPR_MATH_SUPPORT_64=y CONFIG_FALSE=y -CONFIG_FOLD=y +# CONFIG_FOLD is not set CONFIG_FSYNC=y CONFIG_HEAD=y -CONFIG_FEATURE_FANCY_HEAD=y -CONFIG_HOSTID=y -CONFIG_INSTALL=y -CONFIG_FEATURE_INSTALL_LONG_OPTIONS=y +# CONFIG_FEATURE_FANCY_HEAD is not set +# CONFIG_HOSTID is not set +# CONFIG_INSTALL is not set +# CONFIG_FEATURE_INSTALL_LONG_OPTIONS is not set CONFIG_LN=y CONFIG_LOGNAME=y CONFIG_LS=y @@ -229,15 +229,15 @@ CONFIG_FEATURE_LS_SORTFILES=y CONFIG_FEATURE_LS_TIMESTAMPS=y CONFIG_FEATURE_LS_USERNAME=y -CONFIG_FEATURE_LS_COLOR=y -CONFIG_FEATURE_LS_COLOR_IS_DEFAULT=y +# CONFIG_FEATURE_LS_COLOR is not set +# CONFIG_FEATURE_LS_COLOR_IS_DEFAULT is not set CONFIG_MD5SUM=y CONFIG_MKDIR=y CONFIG_FEATURE_MKDIR_LONG_OPTIONS=y CONFIG_MKFIFO=y CONFIG_MKNOD=y CONFIG_MV=y -CONFIG_FEATURE_MV_LONG_OPTIONS=y +# CONFIG_FEATURE_MV_LONG_OPTIONS is not set CONFIG_NICE=y CONFIG_NOHUP=y CONFIG_OD=y @@ -249,11 +249,11 @@ CONFIG_REALPATH=y CONFIG_RM=y CONFIG_RMDIR=y -CONFIG_FEATURE_RMDIR_LONG_OPTIONS=y +# CONFIG_FEATURE_RMDIR_LONG_OPTIONS is not set CONFIG_SEQ=y CONFIG_SHA1SUM=y CONFIG_SHA256SUM=y -CONFIG_SHA512SUM=y +# CONFIG_SHA512SUM is not set CONFIG_SLEEP=y CONFIG_FEATURE_FANCY_SLEEP=y CONFIG_FEATURE_FLOAT_SLEEP=y @@ -278,8 +278,8 @@ CONFIG_FEATURE_UNEXPAND_LONG_OPTIONS=y CONFIG_UNIQ=y CONFIG_USLEEP=y -CONFIG_UUDECODE=y -CONFIG_UUENCODE=y +# CONFIG_UUDECODE is not set +# CONFIG_UUENCODE is not set CONFIG_WC=y CONFIG_FEATURE_WC_LARGE=y # CONFIG_WHO is not set @@ -309,26 +309,26 @@ # # Console Utilities # -# CONFIG_CHVT is not set -# CONFIG_FGCONSOLE is not set +CONFIG_CHVT=y +CONFIG_FGCONSOLE=y CONFIG_CLEAR=y -# CONFIG_DEALLOCVT is not set -# CONFIG_DUMPKMAP is not set +CONFIG_DEALLOCVT=y +CONFIG_DUMPKMAP=y # CONFIG_KBD_MODE is not set -# CONFIG_LOADFONT is not set -# CONFIG_LOADKMAP is not set -# CONFIG_OPENVT is not set +CONFIG_LOADFONT=y +CONFIG_LOADKMAP=y +CONFIG_OPENVT=y CONFIG_RESET=y CONFIG_RESIZE=y CONFIG_FEATURE_RESIZE_PRINT=y -# CONFIG_SETCONSOLE is not set +CONFIG_SETCONSOLE=y # CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set # CONFIG_SETFONT is not set # CONFIG_FEATURE_SETFONT_TEXTUAL_MAP is not set CONFIG_DEFAULT_SETFONT_DIR="" -# CONFIG_SETKEYCODES is not set -# CONFIG_SETLOGCONS is not set -# CONFIG_SHOWKEY is not set +CONFIG_SETKEYCODES=y +CONFIG_SETLOGCONS=y +CONFIG_SHOWKEY=y # CONFIG_FEATURE_LOADFONT_PSF2 is not set # CONFIG_FEATURE_LOADFONT_RAW is not set @@ -350,17 +350,17 @@ # CONFIG_PATCH=y CONFIG_VI=y -CONFIG_FEATURE_VI_MAX_LEN=4096 -# CONFIG_FEATURE_VI_8BIT is not set +CONFIG_FEATURE_VI_MAX_LEN=1024 +CONFIG_FEATURE_VI_8BIT=y CONFIG_FEATURE_VI_COLON=y CONFIG_FEATURE_VI_YANKMARK=y CONFIG_FEATURE_VI_SEARCH=y # CONFIG_FEATURE_VI_REGEX_SEARCH is not set CONFIG_FEATURE_VI_USE_SIGNALS=y -CONFIG_FEATURE_VI_DOT_CMD=y -CONFIG_FEATURE_VI_READONLY=y -CONFIG_FEATURE_VI_SETOPTS=y -CONFIG_FEATURE_VI_SET=y +# CONFIG_FEATURE_VI_DOT_CMD is not set +# CONFIG_FEATURE_VI_READONLY is not set +# CONFIG_FEATURE_VI_SETOPTS is not set +# CONFIG_FEATURE_VI_SET is not set CONFIG_FEATURE_VI_WIN_RESIZE=y CONFIG_FEATURE_VI_ASK_TERMINAL=y CONFIG_AWK=y @@ -369,7 +369,7 @@ CONFIG_DIFF=y CONFIG_FEATURE_DIFF_LONG_OPTIONS=y CONFIG_FEATURE_DIFF_DIR=y -CONFIG_ED=y +# CONFIG_ED is not set CONFIG_SED=y CONFIG_FEATURE_ALLOW_EXEC=y @@ -387,6 +387,7 @@ CONFIG_FEATURE_FIND_NEWER=y CONFIG_FEATURE_FIND_INUM=y CONFIG_FEATURE_FIND_EXEC=y +CONFIG_FEATURE_FIND_EXEC_PLUS=y CONFIG_FEATURE_FIND_USER=y CONFIG_FEATURE_FIND_GROUP=y CONFIG_FEATURE_FIND_NOT=y @@ -394,7 +395,7 @@ CONFIG_FEATURE_FIND_PAREN=y CONFIG_FEATURE_FIND_SIZE=y CONFIG_FEATURE_FIND_PRUNE=y -CONFIG_FEATURE_FIND_DELETE=y +# CONFIG_FEATURE_FIND_DELETE is not set CONFIG_FEATURE_FIND_PATH=y CONFIG_FEATURE_FIND_REGEX=y # CONFIG_FEATURE_FIND_CONTEXT is not set @@ -404,10 +405,11 @@ CONFIG_FEATURE_GREP_FGREP_ALIAS=y CONFIG_FEATURE_GREP_CONTEXT=y CONFIG_XARGS=y -CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION=y -CONFIG_FEATURE_XARGS_SUPPORT_QUOTES=y -CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT=y -CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM=y +# CONFIG_FEATURE_XARGS_SUPPORT_CONFIRMATION is not set +# CONFIG_FEATURE_XARGS_SUPPORT_QUOTES is not set +# CONFIG_FEATURE_XARGS_SUPPORT_TERMOPT is not set +# CONFIG_FEATURE_XARGS_SUPPORT_ZERO_TERM is not set +CONFIG_FEATURE_XARGS_SUPPORT_REPL_STR=y # # Init Utilities @@ -415,44 +417,45 @@ # CONFIG_BOOTCHARTD is not set # CONFIG_FEATURE_BOOTCHARTD_BLOATED_HEADER is not set # CONFIG_FEATURE_BOOTCHARTD_CONFIG_FILE is not set -# CONFIG_HALT is not set +CONFIG_HALT=y # CONFIG_FEATURE_CALL_TELINIT is not set CONFIG_TELINIT_PATH="" -# CONFIG_INIT is not set -# CONFIG_FEATURE_USE_INITTAB is not set +CONFIG_INIT=y +CONFIG_FEATURE_USE_INITTAB=y # CONFIG_FEATURE_KILL_REMOVED is not set CONFIG_FEATURE_KILL_DELAY=0 -# CONFIG_FEATURE_INIT_SCTTY is not set -# CONFIG_FEATURE_INIT_SYSLOG is not set -# CONFIG_FEATURE_EXTRA_QUIET is not set -# CONFIG_FEATURE_INIT_COREDUMPS is not set -# CONFIG_FEATURE_INITRD is not set -CONFIG_INIT_TERMINAL_TYPE="" +CONFIG_FEATURE_INIT_SCTTY=y +CONFIG_FEATURE_INIT_SYSLOG=y +CONFIG_FEATURE_EXTRA_QUIET=y +CONFIG_FEATURE_INIT_COREDUMPS=y +CONFIG_FEATURE_INITRD=y +CONFIG_INIT_TERMINAL_TYPE="linux" CONFIG_MESG=y -CONFIG_FEATURE_MESG_ENABLE_ONLY_GROUP=y +# CONFIG_FEATURE_MESG_ENABLE_ONLY_GROUP is not set # # Login/Password Management Utilities # -CONFIG_ADD_SHELL=y -CONFIG_REMOVE_SHELL=y -CONFIG_FEATURE_SHADOWPASSWDS=y -CONFIG_USE_BB_PWD_GRP=y -CONFIG_USE_BB_SHADOW=y +# CONFIG_ADD_SHELL is not set +# CONFIG_REMOVE_SHELL is not set +# CONFIG_FEATURE_SHADOWPASSWDS is not set +# CONFIG_USE_BB_PWD_GRP is not set +# CONFIG_USE_BB_SHADOW is not set CONFIG_USE_BB_CRYPT=y -CONFIG_USE_BB_CRYPT_SHA=y +# CONFIG_USE_BB_CRYPT_SHA is not set CONFIG_ADDUSER=y CONFIG_FEATURE_ADDUSER_LONG_OPTIONS=y # CONFIG_FEATURE_CHECK_NAMES is not set +CONFIG_LAST_ID=60000 CONFIG_FIRST_SYSTEM_ID=100 CONFIG_LAST_SYSTEM_ID=999 CONFIG_ADDGROUP=y CONFIG_FEATURE_ADDGROUP_LONG_OPTIONS=y -CONFIG_FEATURE_ADDUSER_TO_GROUP=y +# CONFIG_FEATURE_ADDUSER_TO_GROUP is not set CONFIG_DELUSER=y CONFIG_DELGROUP=y -CONFIG_FEATURE_DEL_USER_FROM_GROUP=y -# CONFIG_GETTY is not set +# CONFIG_FEATURE_DEL_USER_FROM_GROUP is not set +CONFIG_GETTY=y CONFIG_LOGIN=y # CONFIG_PAM is not set CONFIG_LOGIN_SCRIPTS=y @@ -463,8 +466,8 @@ CONFIG_CRYPTPW=y CONFIG_CHPASSWD=y CONFIG_SU=y -CONFIG_FEATURE_SU_SYSLOG=y -CONFIG_FEATURE_SU_CHECKS_SHELLS=y +# CONFIG_FEATURE_SU_SYSLOG is not set +# CONFIG_FEATURE_SU_CHECKS_SHELLS is not set CONFIG_SULOGIN=y CONFIG_VLOCK=y @@ -479,17 +482,17 @@ # # Linux Module Utilities # -# CONFIG_MODINFO is not set -# CONFIG_MODPROBE_SMALL is not set -# CONFIG_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE is not set -# CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED is not set -# CONFIG_INSMOD is not set -# CONFIG_RMMOD is not set -# CONFIG_LSMOD is not set +CONFIG_MODINFO=y +CONFIG_MODPROBE_SMALL=y +CONFIG_FEATURE_MODPROBE_SMALL_OPTIONS_ON_CMDLINE=y +CONFIG_FEATURE_MODPROBE_SMALL_CHECK_ALREADY_LOADED=y +CONFIG_INSMOD=y +CONFIG_RMMOD=y +CONFIG_LSMOD=y # CONFIG_FEATURE_LSMOD_PRETTY_2_6_OUTPUT is not set -# CONFIG_MODPROBE is not set +CONFIG_MODPROBE=y # CONFIG_FEATURE_MODPROBE_BLACKLIST is not set -# CONFIG_DEPMOD is not set +CONFIG_DEPMOD=y # # Options common to multiple modutils @@ -502,97 +505,98 @@ # CONFIG_FEATURE_INSMOD_LOAD_MAP is not set # CONFIG_FEATURE_INSMOD_LOAD_MAP_FULL is not set # CONFIG_FEATURE_CHECK_TAINTED_MODULE is not set -# CONFIG_FEATURE_MODUTILS_ALIAS is not set -# CONFIG_FEATURE_MODUTILS_SYMBOLS is not set -CONFIG_DEFAULT_MODULES_DIR="" -CONFIG_DEFAULT_DEPMOD_FILE="" +CONFIG_FEATURE_MODUTILS_ALIAS=y +CONFIG_FEATURE_MODUTILS_SYMBOLS=y +CONFIG_DEFAULT_MODULES_DIR="/lib/modules" +CONFIG_DEFAULT_DEPMOD_FILE="modules.dep" # # Linux System Utilities # -# CONFIG_BLOCKDEV is not set +CONFIG_BLOCKDEV=y CONFIG_REV=y # CONFIG_ACPID is not set # CONFIG_FEATURE_ACPID_COMPAT is not set -# CONFIG_BLKID is not set -# CONFIG_FEATURE_BLKID_TYPE is not set -# CONFIG_DMESG is not set -# CONFIG_FEATURE_DMESG_PRETTY is not set -# CONFIG_FBSET is not set -# CONFIG_FEATURE_FBSET_FANCY is not set -# CONFIG_FEATURE_FBSET_READMODE is not set -# CONFIG_FDFLUSH is not set -# CONFIG_FDFORMAT is not set -# CONFIG_FDISK is not set -# CONFIG_FDISK_SUPPORT_LARGE_DISKS is not set -# CONFIG_FEATURE_FDISK_WRITABLE is not set +CONFIG_BLKID=y +CONFIG_FEATURE_BLKID_TYPE=y +CONFIG_DMESG=y +CONFIG_FEATURE_DMESG_PRETTY=y +CONFIG_FBSET=y +CONFIG_FEATURE_FBSET_FANCY=y +CONFIG_FEATURE_FBSET_READMODE=y +CONFIG_FDFLUSH=y +CONFIG_FDFORMAT=y +CONFIG_FDISK=y +CONFIG_FDISK_SUPPORT_LARGE_DISKS=y +CONFIG_FEATURE_FDISK_WRITABLE=y # CONFIG_FEATURE_AIX_LABEL is not set # CONFIG_FEATURE_SGI_LABEL is not set # CONFIG_FEATURE_SUN_LABEL is not set # CONFIG_FEATURE_OSF_LABEL is not set # CONFIG_FEATURE_GPT_LABEL is not set -# CONFIG_FEATURE_FDISK_ADVANCED is not set -# CONFIG_FINDFS is not set +CONFIG_FEATURE_FDISK_ADVANCED=y +CONFIG_FINDFS=y CONFIG_FLOCK=y -# CONFIG_FREERAMDISK is not set +CONFIG_FREERAMDISK=y CONFIG_FSCK_MINIX=y -# CONFIG_MKFS_EXT2 is not set +CONFIG_MKFS_EXT2=y # CONFIG_MKFS_MINIX is not set CONFIG_FEATURE_MINIX2=y # CONFIG_MKFS_REISER is not set -# CONFIG_MKFS_VFAT is not set +CONFIG_MKFS_VFAT=y CONFIG_GETOPT=y CONFIG_FEATURE_GETOPT_LONG=y CONFIG_HEXDUMP=y -CONFIG_FEATURE_HEXDUMP_REVERSE=y -CONFIG_HD=y +# CONFIG_FEATURE_HEXDUMP_REVERSE is not set +# CONFIG_HD is not set # CONFIG_HWCLOCK is not set # CONFIG_FEATURE_HWCLOCK_LONG_OPTIONS is not set # CONFIG_FEATURE_HWCLOCK_ADJTIME_FHS is not set -CONFIG_IPCRM=y +# CONFIG_IPCRM is not set # CONFIG_IPCS is not set # CONFIG_LOSETUP is not set # CONFIG_LSPCI is not set -# CONFIG_LSUSB is not set -# CONFIG_MDEV is not set -# CONFIG_FEATURE_MDEV_CONF is not set -# CONFIG_FEATURE_MDEV_RENAME is not set -# CONFIG_FEATURE_MDEV_RENAME_REGEXP is not set -# CONFIG_FEATURE_MDEV_EXEC is not set -# CONFIG_FEATURE_MDEV_LOAD_FIRMWARE is not set +CONFIG_LSUSB=y +CONFIG_MDEV=y +CONFIG_FEATURE_MDEV_CONF=y +CONFIG_FEATURE_MDEV_RENAME=y +CONFIG_FEATURE_MDEV_RENAME_REGEXP=y +CONFIG_FEATURE_MDEV_EXEC=y +CONFIG_FEATURE_MDEV_LOAD_FIRMWARE=y CONFIG_MKSWAP=y CONFIG_FEATURE_MKSWAP_UUID=y CONFIG_MORE=y -# CONFIG_MOUNT is not set -# CONFIG_FEATURE_MOUNT_FAKE is not set -# CONFIG_FEATURE_MOUNT_VERBOSE is not set -# CONFIG_FEATURE_MOUNT_HELPERS is not set -# CONFIG_FEATURE_MOUNT_LABEL is not set -# CONFIG_FEATURE_MOUNT_NFS is not set -# CONFIG_FEATURE_MOUNT_CIFS is not set -# CONFIG_FEATURE_MOUNT_FLAGS is not set -# CONFIG_FEATURE_MOUNT_FSTAB is not set -# CONFIG_PIVOT_ROOT is not set +CONFIG_MOUNT=y +CONFIG_FEATURE_MOUNT_FAKE=y +CONFIG_FEATURE_MOUNT_VERBOSE=y +CONFIG_FEATURE_MOUNT_HELPERS=y +CONFIG_FEATURE_MOUNT_LABEL=y +CONFIG_FEATURE_MOUNT_NFS=y +CONFIG_FEATURE_MOUNT_CIFS=y +CONFIG_FEATURE_MOUNT_FLAGS=y +CONFIG_FEATURE_MOUNT_FSTAB=y +# CONFIG_FEATURE_MOUNT_OTHERTAB is not set +CONFIG_PIVOT_ROOT=y # CONFIG_RDATE is not set -CONFIG_RDEV=y -CONFIG_READPROFILE=y +# CONFIG_RDEV is not set +# CONFIG_READPROFILE is not set # CONFIG_RTCWAKE is not set -CONFIG_SCRIPT=y -CONFIG_SCRIPTREPLAY=y +# CONFIG_SCRIPT is not set +# CONFIG_SCRIPTREPLAY is not set # CONFIG_SETARCH is not set # CONFIG_SWAPONOFF is not set # CONFIG_FEATURE_SWAPON_PRI is not set -# CONFIG_SWITCH_ROOT is not set -# CONFIG_UMOUNT is not set -# CONFIG_FEATURE_UMOUNT_ALL is not set -# CONFIG_FEATURE_MOUNT_LOOP is not set -# CONFIG_FEATURE_MOUNT_LOOP_CREATE is not set +CONFIG_SWITCH_ROOT=y +CONFIG_UMOUNT=y +CONFIG_FEATURE_UMOUNT_ALL=y +CONFIG_FEATURE_MOUNT_LOOP=y +CONFIG_FEATURE_MOUNT_LOOP_CREATE=y # CONFIG_FEATURE_MTAB_SUPPORT is not set -# CONFIG_VOLUMEID is not set -# CONFIG_FEATURE_VOLUMEID_EXT is not set -# CONFIG_FEATURE_VOLUMEID_BTRFS is not set +CONFIG_VOLUMEID=y +CONFIG_FEATURE_VOLUMEID_EXT=y +CONFIG_FEATURE_VOLUMEID_BTRFS=y # CONFIG_FEATURE_VOLUMEID_REISERFS is not set -# CONFIG_FEATURE_VOLUMEID_FAT is not set +CONFIG_FEATURE_VOLUMEID_FAT=y # CONFIG_FEATURE_VOLUMEID_HFS is not set # CONFIG_FEATURE_VOLUMEID_JFS is not set # CONFIG_FEATURE_VOLUMEID_XFS is not set @@ -612,8 +616,8 @@ # # CONFIG_CONSPY is not set # CONFIG_NANDWRITE is not set -# CONFIG_NANDDUMP is not set -# CONFIG_SETSERIAL is not set +CONFIG_NANDDUMP=y +CONFIG_SETSERIAL=y # CONFIG_UBIATTACH is not set # CONFIG_UBIDETACH is not set # CONFIG_UBIMKVOL is not set @@ -626,22 +630,22 @@ # CONFIG_BEEP is not set CONFIG_FEATURE_BEEP_FREQ=0 CONFIG_FEATURE_BEEP_LENGTH_MS=0 -CONFIG_CHAT=y -CONFIG_FEATURE_CHAT_NOFAIL=y +# CONFIG_CHAT is not set +# CONFIG_FEATURE_CHAT_NOFAIL is not set # CONFIG_FEATURE_CHAT_TTY_HIFI is not set -CONFIG_FEATURE_CHAT_IMPLICIT_CR=y -CONFIG_FEATURE_CHAT_SWALLOW_OPTS=y -CONFIG_FEATURE_CHAT_SEND_ESCAPES=y -CONFIG_FEATURE_CHAT_VAR_ABORT_LEN=y -CONFIG_FEATURE_CHAT_CLR_ABORT=y -CONFIG_CHRT=y +# CONFIG_FEATURE_CHAT_IMPLICIT_CR is not set +# CONFIG_FEATURE_CHAT_SWALLOW_OPTS is not set +# CONFIG_FEATURE_CHAT_SEND_ESCAPES is not set +# CONFIG_FEATURE_CHAT_VAR_ABORT_LEN is not set +# CONFIG_FEATURE_CHAT_CLR_ABORT is not set +# CONFIG_CHRT is not set CONFIG_CROND=y CONFIG_FEATURE_CROND_D=y -CONFIG_FEATURE_CROND_CALL_SENDMAIL=y +# CONFIG_FEATURE_CROND_CALL_SENDMAIL is not set CONFIG_FEATURE_CROND_DIR="/var/spool/cron" CONFIG_CRONTAB=y CONFIG_DC=y -CONFIG_FEATURE_DC_LIBM=y +# CONFIG_FEATURE_DC_LIBM is not set # CONFIG_DEVFSD is not set # CONFIG_DEVFSD_MODLOAD is not set # CONFIG_DEVFSD_FG_NP is not set @@ -650,25 +654,17 @@ CONFIG_DEVMEM=y # CONFIG_EJECT is not set # CONFIG_FEATURE_EJECT_SCSI is not set -# CONFIG_FBSPLASH is not set -# CONFIG_FLASHCP is not set -# CONFIG_FLASH_LOCK is not set -# CONFIG_FLASH_UNLOCK is not set +CONFIG_FBSPLASH=y +CONFIG_FLASHCP=y +CONFIG_FLASH_LOCK=y +CONFIG_FLASH_UNLOCK=y # CONFIG_FLASH_ERASEALL is not set # CONFIG_IONICE is not set # CONFIG_INOTIFYD is not set # CONFIG_LAST is not set # CONFIG_FEATURE_LAST_SMALL is not set # CONFIG_FEATURE_LAST_FANCY is not set -CONFIG_LESS=y -CONFIG_FEATURE_LESS_MAXLINES=9999999 -CONFIG_FEATURE_LESS_BRACKETS=y -CONFIG_FEATURE_LESS_FLAGS=y -CONFIG_FEATURE_LESS_MARKS=y -CONFIG_FEATURE_LESS_REGEXP=y -CONFIG_FEATURE_LESS_WINCH=y -CONFIG_FEATURE_LESS_DASHCMD=y -CONFIG_FEATURE_LESS_LINENUMS=y +# CONFIG_LESS is not set # CONFIG_HDPARM is not set # CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set # CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set @@ -679,23 +675,23 @@ # CONFIG_MAKEDEVS is not set # CONFIG_FEATURE_MAKEDEVS_LEAF is not set # CONFIG_FEATURE_MAKEDEVS_TABLE is not set -CONFIG_MAN=y -# CONFIG_MICROCOM is not set +# CONFIG_MAN is not set +CONFIG_MICROCOM=y # CONFIG_MOUNTPOINT is not set -CONFIG_MT=y +# CONFIG_MT is not set # CONFIG_RAIDAUTORUN is not set # CONFIG_READAHEAD is not set # CONFIG_RFKILL is not set # CONFIG_RUNLEVEL is not set # CONFIG_RX is not set -CONFIG_SETSID=y +# CONFIG_SETSID is not set CONFIG_STRINGS=y # CONFIG_TASKSET is not set # CONFIG_FEATURE_TASKSET_FANCY is not set CONFIG_TIME=y -CONFIG_TIMEOUT=y -CONFIG_TTYSIZE=y -CONFIG_VOLNAME=y +# CONFIG_TIMEOUT is not set +# CONFIG_TTYSIZE is not set +# CONFIG_VOLNAME is not set # CONFIG_WALL is not set # CONFIG_WATCHDOG is not set @@ -706,23 +702,23 @@ # CONFIG_FEATURE_NAMEIF_EXTENDED is not set # CONFIG_NBDCLIENT is not set CONFIG_NC=y -CONFIG_NC_SERVER=y -CONFIG_NC_EXTRA=y +# CONFIG_NC_SERVER is not set +# CONFIG_NC_EXTRA is not set # CONFIG_NC_110_COMPAT is not set -# CONFIG_PING is not set -# CONFIG_PING6 is not set -# CONFIG_FEATURE_FANCY_PING is not set +CONFIG_PING=y +CONFIG_PING6=y +CONFIG_FEATURE_FANCY_PING=y CONFIG_WHOIS=y -CONFIG_FEATURE_IPV6=y +# CONFIG_FEATURE_IPV6 is not set # CONFIG_FEATURE_UNIX_LOCAL is not set -CONFIG_FEATURE_PREFER_IPV4_ADDRESS=y +# CONFIG_FEATURE_PREFER_IPV4_ADDRESS is not set # CONFIG_VERBOSE_RESOLUTION_ERRORS is not set -# CONFIG_ARP is not set +CONFIG_ARP=y # CONFIG_ARPING is not set # CONFIG_BRCTL is not set # CONFIG_FEATURE_BRCTL_FANCY is not set # CONFIG_FEATURE_BRCTL_SHOW is not set -CONFIG_DNSD=y +# CONFIG_DNSD is not set # CONFIG_ETHER_WAKE is not set CONFIG_FAKEIDENTD=y CONFIG_FTPD=y @@ -732,46 +728,45 @@ CONFIG_FTPPUT=y CONFIG_FEATURE_FTPGETPUT_LONG_OPTIONS=y CONFIG_HOSTNAME=y -CONFIG_HTTPD=y -CONFIG_FEATURE_HTTPD_RANGES=y -# CONFIG_FEATURE_HTTPD_USE_SENDFILE is not set -CONFIG_FEATURE_HTTPD_SETUID=y -CONFIG_FEATURE_HTTPD_BASIC_AUTH=y -CONFIG_FEATURE_HTTPD_AUTH_MD5=y -CONFIG_FEATURE_HTTPD_CGI=y -CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR=y -CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV=y -CONFIG_FEATURE_HTTPD_ENCODE_URL_STR=y -CONFIG_FEATURE_HTTPD_ERROR_PAGES=y -CONFIG_FEATURE_HTTPD_PROXY=y -CONFIG_FEATURE_HTTPD_GZIP=y -# CONFIG_IFCONFIG is not set -# CONFIG_FEATURE_IFCONFIG_STATUS is not set +# CONFIG_HTTPD is not set +# CONFIG_FEATURE_HTTPD_RANGES is not set +# CONFIG_FEATURE_HTTPD_SETUID is not set +# CONFIG_FEATURE_HTTPD_BASIC_AUTH is not set +# CONFIG_FEATURE_HTTPD_AUTH_MD5 is not set +# CONFIG_FEATURE_HTTPD_CGI is not set +# CONFIG_FEATURE_HTTPD_CONFIG_WITH_SCRIPT_INTERPR is not set +# CONFIG_FEATURE_HTTPD_SET_REMOTE_PORT_TO_ENV is not set +# CONFIG_FEATURE_HTTPD_ENCODE_URL_STR is not set +# CONFIG_FEATURE_HTTPD_ERROR_PAGES is not set +# CONFIG_FEATURE_HTTPD_PROXY is not set +# CONFIG_FEATURE_HTTPD_GZIP is not set +CONFIG_IFCONFIG=y +CONFIG_FEATURE_IFCONFIG_STATUS=y # CONFIG_FEATURE_IFCONFIG_SLIP is not set -# CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ is not set -# CONFIG_FEATURE_IFCONFIG_HW is not set -# CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS is not set +CONFIG_FEATURE_IFCONFIG_MEMSTART_IOADDR_IRQ=y +CONFIG_FEATURE_IFCONFIG_HW=y +CONFIG_FEATURE_IFCONFIG_BROADCAST_PLUS=y # CONFIG_IFENSLAVE is not set # CONFIG_IFPLUGD is not set -# CONFIG_IFUPDOWN is not set -CONFIG_IFUPDOWN_IFSTATE_PATH="" +CONFIG_IFUPDOWN=y +CONFIG_IFUPDOWN_IFSTATE_PATH="/var/run/ifstate" # CONFIG_FEATURE_IFUPDOWN_IP is not set # CONFIG_FEATURE_IFUPDOWN_IP_BUILTIN is not set -# CONFIG_FEATURE_IFUPDOWN_IFCONFIG_BUILTIN is not set -# CONFIG_FEATURE_IFUPDOWN_IPV4 is not set -# CONFIG_FEATURE_IFUPDOWN_IPV6 is not set -# CONFIG_FEATURE_IFUPDOWN_MAPPING is not set -# CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP is not set +CONFIG_FEATURE_IFUPDOWN_IFCONFIG_BUILTIN=y +CONFIG_FEATURE_IFUPDOWN_IPV4=y +CONFIG_FEATURE_IFUPDOWN_IPV6=y +CONFIG_FEATURE_IFUPDOWN_MAPPING=y +CONFIG_FEATURE_IFUPDOWN_EXTERNAL_DHCP=y CONFIG_INETD=y CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_ECHO=y -CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD=y -CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME=y -CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME=y -CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN=y +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DISCARD is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_TIME is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_DAYTIME is not set +# CONFIG_FEATURE_INETD_SUPPORT_BUILTIN_CHARGEN is not set # CONFIG_FEATURE_INETD_RPC is not set -# CONFIG_IP is not set -# CONFIG_FEATURE_IP_ADDRESS is not set -# CONFIG_FEATURE_IP_LINK is not set +CONFIG_IP=y +CONFIG_FEATURE_IP_ADDRESS=y +CONFIG_FEATURE_IP_LINK=y # CONFIG_FEATURE_IP_ROUTE is not set # CONFIG_FEATURE_IP_TUNNEL is not set # CONFIG_FEATURE_IP_RULE is not set @@ -782,17 +777,17 @@ # CONFIG_IPROUTE is not set # CONFIG_IPTUNNEL is not set # CONFIG_IPRULE is not set -CONFIG_IPCALC=y -CONFIG_FEATURE_IPCALC_FANCY=y -CONFIG_FEATURE_IPCALC_LONG_OPTIONS=y -# CONFIG_NETSTAT is not set +# CONFIG_IPCALC is not set +# CONFIG_FEATURE_IPCALC_FANCY is not set +# CONFIG_FEATURE_IPCALC_LONG_OPTIONS is not set +CONFIG_NETSTAT=y # CONFIG_FEATURE_NETSTAT_WIDE is not set # CONFIG_FEATURE_NETSTAT_PRG is not set -# CONFIG_NSLOOKUP is not set +CONFIG_NSLOOKUP=y # CONFIG_NTPD is not set # CONFIG_FEATURE_NTPD_SERVER is not set -CONFIG_PSCAN=y -# CONFIG_ROUTE is not set +# CONFIG_PSCAN is not set +CONFIG_ROUTE=y # CONFIG_SLATTACH is not set CONFIG_TCPSVD=y CONFIG_TELNET=y @@ -812,9 +807,9 @@ CONFIG_FEATURE_TFTP_BLOCKSIZE=y CONFIG_FEATURE_TFTP_PROGRESS_BAR=y # CONFIG_TFTP_DEBUG is not set -# CONFIG_TRACEROUTE is not set +CONFIG_TRACEROUTE=y # CONFIG_TRACEROUTE6 is not set -# CONFIG_FEATURE_TRACEROUTE_VERBOSE is not set +CONFIG_FEATURE_TRACEROUTE_VERBOSE=y # CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE is not set # CONFIG_FEATURE_TRACEROUTE_USE_ICMP is not set # CONFIG_TUNCTL is not set @@ -825,16 +820,16 @@ # CONFIG_FEATURE_UDHCPD_WRITE_LEASES_EARLY is not set # CONFIG_FEATURE_UDHCPD_BASE_IP_ON_MAC is not set CONFIG_DHCPD_LEASES_FILE="" -# CONFIG_UDHCPC is not set -# CONFIG_FEATURE_UDHCPC_ARPING is not set -# CONFIG_FEATURE_UDHCP_PORT is not set -CONFIG_UDHCP_DEBUG=0 -# CONFIG_FEATURE_UDHCP_RFC3397 is not set -# CONFIG_FEATURE_UDHCP_8021Q is not set -CONFIG_UDHCPC_DEFAULT_SCRIPT="" -CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=0 -CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS="" -CONFIG_UDPSVD=y +CONFIG_UDHCPC=y +CONFIG_FEATURE_UDHCPC_ARPING=y +CONFIG_FEATURE_UDHCP_PORT=y +CONFIG_UDHCP_DEBUG=9 +CONFIG_FEATURE_UDHCP_RFC3397=y +CONFIG_FEATURE_UDHCP_8021Q=y +CONFIG_UDHCPC_DEFAULT_SCRIPT="/usr/share/udhcpc/default.script" +CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=80 +CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS="-R -n" +# CONFIG_UDPSVD is not set # CONFIG_VCONFIG is not set CONFIG_WGET=y CONFIG_FEATURE_WGET_STATUSBAR=y @@ -846,44 +841,46 @@ # # Print Utilities # -CONFIG_LPD=y -CONFIG_LPR=y -CONFIG_LPQ=y +# CONFIG_LPD is not set +# CONFIG_LPR is not set +# CONFIG_LPQ is not set # # Mail Utilities # -CONFIG_MAKEMIME=y -CONFIG_FEATURE_MIME_CHARSET="us-ascii" -CONFIG_POPMAILDIR=y -CONFIG_FEATURE_POPMAILDIR_DELIVERY=y -CONFIG_REFORMIME=y -CONFIG_FEATURE_REFORMIME_COMPAT=y -CONFIG_SENDMAIL=y +# CONFIG_MAKEMIME is not set +CONFIG_FEATURE_MIME_CHARSET="" +# CONFIG_POPMAILDIR is not set +# CONFIG_FEATURE_POPMAILDIR_DELIVERY is not set +# CONFIG_REFORMIME is not set +# CONFIG_FEATURE_REFORMIME_COMPAT is not set +# CONFIG_SENDMAIL is not set # # Process Utilities # -CONFIG_IOSTAT=y -CONFIG_MPSTAT=y -CONFIG_NMETER=y +# CONFIG_IOSTAT is not set +# CONFIG_LSOF is not set +# CONFIG_MPSTAT is not set +# CONFIG_NMETER is not set # CONFIG_PMAP is not set # CONFIG_POWERTOP is not set -CONFIG_PSTREE=y -CONFIG_PWDX=y -CONFIG_SMEMCAP=y +# CONFIG_PSTREE is not set +# CONFIG_PWDX is not set +# CONFIG_SMEMCAP is not set # CONFIG_FREE is not set CONFIG_FUSER=y CONFIG_KILL=y CONFIG_KILLALL=y -CONFIG_KILLALL5=y -CONFIG_PGREP=y +# CONFIG_KILLALL5 is not set +# CONFIG_PGREP is not set CONFIG_PIDOF=y -CONFIG_FEATURE_PIDOF_SINGLE=y -CONFIG_FEATURE_PIDOF_OMIT=y -CONFIG_PKILL=y +# CONFIG_FEATURE_PIDOF_SINGLE is not set +# CONFIG_FEATURE_PIDOF_OMIT is not set +# CONFIG_PKILL is not set CONFIG_PS=y CONFIG_FEATURE_PS_WIDE=y +CONFIG_FEATURE_PS_LONG=y # CONFIG_FEATURE_PS_TIME is not set CONFIG_FEATURE_PS_ADDITIONAL_COLUMNS=y # CONFIG_FEATURE_PS_UNUSUAL_SYSTEMS is not set @@ -897,23 +894,23 @@ CONFIG_FEATURE_TOP_SMP_PROCESS=y CONFIG_FEATURE_TOPMEM=y # CONFIG_FEATURE_SHOW_THREADS is not set -# CONFIG_UPTIME is not set -CONFIG_WATCH=y +CONFIG_UPTIME=y +# CONFIG_WATCH is not set # # Runit Utilities # -CONFIG_RUNSV=y -CONFIG_RUNSVDIR=y +# CONFIG_RUNSV is not set +# CONFIG_RUNSVDIR is not set # CONFIG_FEATURE_RUNSVDIR_LOG is not set -CONFIG_SV=y -CONFIG_SV_DEFAULT_SERVICE_DIR="/var/service" -CONFIG_SVLOGD=y -CONFIG_CHPST=y -CONFIG_SETUIDGID=y -CONFIG_ENVUIDGID=y -CONFIG_ENVDIR=y -CONFIG_SOFTLIMIT=y +# CONFIG_SV is not set +CONFIG_SV_DEFAULT_SERVICE_DIR="" +# CONFIG_SVLOGD is not set +# CONFIG_CHPST is not set +# CONFIG_SETUIDGID is not set +# CONFIG_ENVUIDGID is not set +# CONFIG_ENVDIR is not set +# CONFIG_SOFTLIMIT is not set # CONFIG_CHCON is not set # CONFIG_FEATURE_CHCON_LONG_OPTIONS is not set # CONFIG_GETENFORCE is not set @@ -945,7 +942,7 @@ CONFIG_ASH_CMDCMD=y # CONFIG_ASH_MAIL is not set CONFIG_ASH_OPTIMIZE_FOR_SIZE=y -CONFIG_ASH_RANDOM_SUPPORT=y +# CONFIG_ASH_RANDOM_SUPPORT is not set CONFIG_ASH_EXPAND_PRMT=y # CONFIG_CTTYHACK is not set CONFIG_HUSH=y @@ -969,10 +966,10 @@ # CONFIG_FEATURE_SH_IS_HUSH is not set # CONFIG_FEATURE_SH_IS_NONE is not set # CONFIG_FEATURE_BASH_IS_ASH is not set -# CONFIG_FEATURE_BASH_IS_HUSH is not set -CONFIG_FEATURE_BASH_IS_NONE=y +CONFIG_FEATURE_BASH_IS_HUSH=y +# CONFIG_FEATURE_BASH_IS_NONE is not set CONFIG_SH_MATH_SUPPORT=y -CONFIG_SH_MATH_SUPPORT_64=y +# CONFIG_SH_MATH_SUPPORT_64 is not set CONFIG_FEATURE_SH_EXTRA_QUIET=y # CONFIG_FEATURE_SH_STANDALONE is not set # CONFIG_FEATURE_SH_NOFORK is not set
- 編譯以及安裝 Busybox
我們的 Target rootfs 我把它放在 unpacked-rootfs 資料夾.
1. 產生 Target rootfs 相關資目錄, 如 usr/share/udhcpc .
rm -rf ${PROJDIR}/unpacked-rootfs/* mkdir -p ${PROJDIR}/unpacked-rootfs cd ${PROJDIR}/unpacked-rootfs mkdir -p bin boot dev etc home lib lost+found mnt opt private proc root sbin sys tmp usr var cd ${PROJDIR}/unpacked-rootfs/etc/ mkdir -p init.d rc.d sysconfig cd ${PROJDIR}/unpacked-rootfs/usr/ mkdir -p bin lib sbin share cd ${PROJDIR}/unpacked-rootfs/usr/share/ mkdir -p alsa udhcpc zoneinfo cd ${PROJDIR}/unpacked-rootfs/var/ mkdir -p run lib log spool/cron mkdir -p ${PROJDIR}/unpacked-rootfs/proc/self/exe ${PROJDIR}/unpacked-rootfs/lib/modules
2. 以 arm9_defconfig 編譯以及安裝 busybox 至 unpacked-rootfs 目錄
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -C busybox arm9_defconfig all make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -C busybox install [ ! -f busybox/_install/bin/busybox ] && exit 3 sudo rm -rvf ${PROJDIR}/unpacked-rootfs/bin/* sudo rm -rvf ${PROJDIR}/unpacked-rootfs/sbin/* /bin/cp -av ${PROJDIR}/busybox/_install/* unpacked-rootfs/
安裝 Alsa-lib (Libasound.so)
1. Fetch Alsa-lib 原始碼
git clone git://git.alsa-project.org/alsa-lib.git
2. 編譯以及安裝, STRIP並拷貝 libasound*.so* 至 unpacked-rootfs/lib/
cd ${PROJDIR}/alsa-lib ; ./gitcompile || true CFLAGS="-mcpu=arm926ej-s -march=armv5te -mtune=arm926ej-s -marm -mfpu=vfp -O3 -pipe" \ ./configure --host=arm-linux-gnueabi --prefix=/ \ --disable-python --disable-python2 \ --disable-aload --disable-mixer-pymods \ --disable-ucm --disable-topology --disable-rawmidi --disable-seq sudo make clean make V=1 cd ${PROJDIR}/alsa-lib/src/.libs/ ; arm-linux-gnueabi-strip libasound.so.2.0.0 cd ${PROJDIR}/alsa-lib sudo make V=1 DESTDIR=/usr/arm-linux-gnueabi install sudo rm -rf ${PROJDIR}/unpacked-rootfs/usr/share/alsa/* sudo /bin/cp -Rpf /usr/arm-linux-gnueabi/share/alsa/* ${PROJDIR}/unpacked-rootfs/usr/share/alsa/ sudo chown -R `whoami`.`whoami` ${PROJDIR}/unpacked-rootfs/usr/share/alsa/ /bin/cp -Rpf ${PROJDIR}/alsa-lib/src/.libs/libasound.so* ${PROJDIR}/unpacked-rootfs/usr/lib/
安裝 SDL
1. Fetch SDL 原始碼
git clone https://github.com/vanfanel/SDL-1.2.15-raspberrypi
2. 安裝
cd ${PROJDIR} cat > ${PROJDIR}/patches/SDL_blit_N.c.patch << "EOF" diff --git a/src/video/SDL_blit_N.c b/src/video/SDL_blit_N.c index f10733e..9deb6b8 100644 --- a/src/video/SDL_blit_N.c 2012-01-19 14:30:06.000000000 +0800 +++ b/src/video/SDL_blit_N.c 2017-11-20 16:50:05.997531150 +0800 @@ -2031,6 +2031,32 @@ } } + +//Brian add +#define YUVPIXEL(Y,Cb,Cr) (((Y)<<24)|((Y)<<8)|((Cr)<<16)|(Cb)) +u_int32_t RGB2YUV(unsigned char R,unsigned char G,unsigned char B) +{ + unsigned char Y,Cb,Cr; + + Y = ((67316*R)>>18) + ((132154*G)>>18) + ((25666*B)>>18) + 16; + Cr = ((115138*R)>>18) - ((96414*G)>>18) - ((18724*B)>>18) + 128; + Cb = -((38856*R)>>18) - ((76282*G)>>18) + ((115138*B)>>18) + 128; + + // Done + return(YUVPIXEL(Y,Cb,Cr)); +} +u_int32_t YUVTable[65536]; +int isYUVinit = 0; +static void initYUVTable(void) +{ + int i; + for (i=0; i<65536; i++) { + YUVTable[i] = RGB2YUV((i>>11)<<3, ((i>>5)&0x3f)<<2, (i&0x1f)<<3); + } + isYUVinit = 1; +} + + static void BlitNtoN(SDL_BlitInfo *info) { int width = info->d_width; @@ -2045,6 +2071,9 @@ int dstbpp = dstfmt->BytesPerPixel; unsigned alpha = dstfmt->Amask ? srcfmt->alpha : 0; + if (!isYUVinit) { + initYUVTable(); + } while ( height-- ) { DUFFS_LOOP( { @@ -2052,8 +2081,11 @@ unsigned sR; unsigned sG; unsigned sB; - DISEMBLE_RGB(src, srcbpp, srcfmt, Pixel, sR, sG, sB); - ASSEMBLE_RGBA(dst, dstbpp, dstfmt, sR, sG, sB, alpha); + //DISEMBLE_RGB(src, srcbpp, srcfmt, Pixel, sR, sG, sB); + //ASSEMBLE_RGBA(dst, dstbpp, dstfmt, sR, sG, sB, alpha); + //*((Uint32 *)(dst)) = RGB2YUV(sR, sG, sB); + *((Uint32 *)(dst)) = YUVTable[*((Uint16 *)(src))]; + dst += dstbpp; src += srcbpp; }, EOF cat > ${PROJDIR}/patches/SDL_alsa_audio.c.patch << "EOF" diff --git a/src/audio/alsa/SDL_alsa_audio.c b/src/audio/alsa/SDL_alsa_audio.c index f10733e..9deb6b8 100644 --- a/src/audio/alsa/SDL_alsa_audio.c +++ b/src/audio/alsa/SDL_alsa_audio.c @@ -520,10 +520,10 @@ static int ALSA_OpenAudio(_THIS, SDL_AudioSpec *spec) format = SND_PCM_FORMAT_U16_BE; break; default: - format = 0; + format = SND_PCM_FORMAT_UNKNOWN; break; } - if ( format != 0 ) { + if ( format != SND_PCM_FORMAT_UNKNOWN ) { status = SDL_NAME(snd_pcm_hw_params_set_format)(pcm_handle, hwparams, format); } if ( status < 0 ) { if ( status < 0 ) { EOF cat > ${PROJDIR}/patches/SDL_systhread.c.patch << "EOF" diff --git a/src/thread/pthread/SDL_systhread.c b/src/thread/pthread/SDL_systhread.c index f10733e..9deb6b8 100644 --- a/src/thread/pthread/SDL_systhread.c 2012-01-19 14:30:06.000000000 +0800 +++ b/src/thread/pthread/SDL_systhread.c 2017-11-20 18:37:11.427399387 +0800 @@ -58,6 +58,8 @@ SDL_SetError("Couldn't initialize pthread attributes"); return(-1); } + + pthread_attr_setstacksize(&type, 20480); pthread_attr_setdetachstate(&type, PTHREAD_CREATE_JOINABLE); /* Create the thread and go! */ EOF ############################################################ # SDL-1.2.15-raspberrypi cd ${PROJDIR} [ ! -d SDL-1.2.15-raspberrypi ] && git clone https://github.com/vanfanel/SDL-1.2.15-raspberrypi cd ${PROJDIR}/SDL-1.2.15-raspberrypi git checkout ./src/audio/alsa/SDL_alsa_audio.c git apply --reject --whitespace=fix ${PROJDIR}/patches/SDL_alsa_audio.c.patch git checkout src/thread/pthread/SDL_systhread.c git apply --reject --whitespace=fix ${PROJDIR}/patches/SDL_systhread.c.patch git checkout src/video/SDL_blit_N.c git apply --reject --whitespace=fix ${PROJDIR}/patches/SDL_blit_N.c.patch cd ${PROJDIR}/SDL-1.2.15-raspberrypi/ CFLAGS="-mcpu=arm926ej-s -march=armv5te -mtune=arm926ej-s -marm -mfpu=vfp -O2 -pipe" \ ./configure --host=arm-linux-gnueabi --prefix=/usr/arm-linux-gnueabi --enable-alsa=yes --enable-input-tslib=yes \ --disable-esd --disable-pulseaudio --disable-arts --disable-nas --disable-diskaudio --disable-nasm \ --disable-altivec --disable-video-directfb --disable-video-opengl --disable-video-opengles2 \ --disable-video-x11-dgamouse --disable-video-x11 --disable-video-dga \ --enable-input-tslib=yes \ --with-alsa-prefix=/usr/arm-linux-gnueabi/lib --with-alsa-inc-prefix=/usr/arm-linux-gnueabi/include sudo make clean && make cd ${PROJDIR}/SDL-1.2.15-raspberrypi/build/.libs/ arm-linux-gnueabi-strip libSDL-1.2.so.0.11.4 cd ${PROJDIR}/SDL-1.2.15-raspberrypi sudo make install /bin/cp -Rpf ${PROJDIR}/SDL-1.2.15-raspberrypi/build/.libs/libSDL-1.2.so* ${PROJDIR}/unpacked-rootfs/usr/lib/
產生 share/udhcpc/default.script
$ wget https://raw.githubusercontent.com/mschlenker/TinyCrossLinux/master/patches/usr-share-udhcpc-default.script $ sudo /bin/mv usr-share-udhcpc-default.script unpacked-rootfs/usr/share/udhcpc/default.script
產生 etc/hostname , etc/host.conf , etc/resolv.conf , etc/hosts , etc/passwd , etc/group
cd ${PROJDIR} touch unpacked-rootfs/bin/start_getty chmod 777 unpacked-rootfs/bin/start_getty echo '#!/bin/sh' > unpacked-rootfs/bin/start_getty ; sudo echo '' >> ${PROJDIR}/unpacked-rootfs/bin/start_getty ; echo '[ -c /dev/$2 ] && /sbin/getty -L $1 $2 $3' >> ${PROJDIR}/unpacked-rootfs/bin/start_getty echo mk3 > unpacked-rootfs/etc/hostname echo 'order hosts,bind' > unpacked-rootfs/etc/host.conf ; echo 'multi on' >> unpacked-rootfs/etc/host.conf ; echo 'nameserver 168.95.1.1' > unpacked-rootfs/etc/resolv.conf echo '127.0.0.1 localhost' > unpacked-rootfs/etc/hosts ; echo '127.0.0.1 mk3' >> unpacked-rootfs/etc/hosts sudo rm -rf unpacked-rootfs/etc/passwd unpacked-rootfs/etc/group sudo echo root::0:0:root:/root:/bin/bash > unpacked-rootfs/etc/passwd ; sudo chmod 644 unpacked-rootfs/etc/passwd && sudo chown root.root unpacked-rootfs/etc/passwd sudo echo root::0: > unpacked-rootfs/etc/group ; sudo chmod 644 unpacked-rootfs/etc/group && sudo chown root.root unpacked-rootfs/etc/group echo '/bin/sh' > unpacked-rootfs/etc/shells ; echo '/bin/ash' >> unpacked-rootfs/etc/shells ; echo '/bin/hush' >> unpacked-rootfs/etc/shells /bin/cp -f /etc/services unpacked-rootfs/etc/services
產生 etc/fstab /etc/rc.local
cd ${PROJDIR} cat > ${PROJDIR}/unpacked-rootfs/etc/fstab << "EOF" none /proc proc defaults 0 0 none /sys sysfs defaults 0 0 tmpfs /tmp tmpfs defaults 0 0 tmpfs /dev tmpfs defaults 0 0 EOF cat > ${PROJDIR}/unpacked-rootfs/etc/rc.local << "EOF" #!/bin/bash source /etc/rc.d/rc.conf EOF
產生 etc/profile
Target 系統的 SHELL 顯示是: root@mk3:~#
這與PS1 環境變數有關係. 並且它的正常作用與否, 與 libnss*.so* 以及 libnsl*.so* 存在有關. 因此我們之前把它們拷貝至 unpacked-rootfs/lib/ 目錄.
# busybox whoami
# error: unknown uid 0
當 Target 系統的 `whoami` 出現錯誤訊息 unknown uid 0 時, 這也與 libnss*.so* 以及 libnsl*.so* 存在有關. 把它們拷貝至 target 系統, 問題就解決了.
cat > ${PROJDIR}/unpacked-rootfs/etc/profile << "EOF" source /etc/rc.d/rc.conf hostname -F /etc/hostname export PS1='\u@\h:\w$ ' [ `id -u` -eq 0 ] && export PS1='\u@\h:\w# ' [ `id -u` -eq 0 ] && export HOME=/root [ `id -u` -eq 0 ] && cd /root export TZ=Asia/Taipei export LC_ALL=C echo -ne "\33[9;0]" > /dev/tty0 echo -ne "\033[?25l" > /dev/tty0 EOF
產生 etc/init.d/rcS
cd ${PROJDIR} echo '#!/bin/sh' > unpacked-rootfs/etc/init.d/rcS ; echo '' >> unpacked-rootfs/etc/init.d/rcS echo 'mount -a' >> unpacked-rootfs/etc/init.d/rcS ; echo 'mount -n -o remount ro /' >> unpacked-rootfs/etc/init.d/rcS echo 'echo /sbin/mdev > /proc/sys/kernel/hotplug' >> unpacked-rootfs/etc/init.d/rcS ; echo 'mdev -s' >> unpacked-rootfs/etc/init.d/rcS ; echo '' >> unpacked-rootfs/etc/init.d/rcS echo 'hostname -F /etc/hostname' >> unpacked-rootfs/etc/init.d/rcS echo 'ip addr add 127.0.0.1/8 dev lo' >> unpacked-rootfs/etc/init.d/rcS ; echo 'ip link set lo up' >> unpacked-rootfs/etc/init.d/rcS echo '' >> unpacked-rootfs/etc/init.d/rcS echo '[ -x /etc/rc.d/rc.conf ] && . /etc/rc.d/rc.conf' >> unpacked-rootfs/etc/init.d/rcS ; echo '' >> unpacked-rootfs/etc/init.d/rcS echo 'mode=${1:-start}' >> unpacked-rootfs/etc/init.d/rcS echo 'if [ $mode = "start" ]; then services=$cfg_services ; else services=$cfg_services_r ; fi' >> unpacked-rootfs/etc/init.d/rcS echo 'cfg_services=${2:-$services}' >> unpacked-rootfs/etc/init.d/rcS echo '' >> unpacked-rootfs/etc/init.d/rcS echo 'for i in $cfg_services ; do [ -x /etc/rc.d/init.d/$i ] && /etc/rc.d/init.d/$i $mode ; done' >> unpacked-rootfs/etc/init.d/rcS echo '[ $# -ge 2 ] && exit 0' >> unpacked-rootfs/etc/init.d/rcS ; echo '' >> unpacked-rootfs/etc/init.d/rcS echo 'echo 8 > /proc/sys/kernel/printk' >> unpacked-rootfs/etc/init.d/rcS echo '[ -x /etc/rc.local ] && /etc/rc.local $mode' >> unpacked-rootfs/etc/init.d/rcS ; echo '' >> unpacked-rootfs/etc/init.d/rcS chmod 777 unpacked-rootfs/etc/init.d/rcS
產生 etc/inittab
如果你的 TARGET_SERIAL_CONSOL 與筆者不一致 , 請自行 export 出來 (eg: ttyAMA0, ttyS0) .
cd ${PROJDIR} echo '::sysinit:/etc/init.d/rcS' > unpacked-rootfs/etc/inittab ; echo '' >> unpacked-rootfs/etc/inittab echo '::restart:/sbin/init' >> unpacked-rootfs/etc/inittab ; echo '' >> unpacked-rootfs/etc/inittab echo '::ctrlaltdel:/sbin/reboot' >> unpacked-rootfs/etc/inittab echo '::shutdown:/etc/shutdown' >> unpacked-rootfs/etc/inittab ; echo '' >> unpacked-rootfs/etc/inittab echo "${TARGET_SERIAL_CONSOL}::respawn:-/bin/sh" >> unpacked-rootfs/etc/inittab ; echo '' >> unpacked-rootfs/etc/inittab echo "#${TARGET_SERIAL_CONSOL}::respawn:/bin/start_getty 115200 ${TARGET_SERIAL_CONSOL} vt102" >> unpacked-rootfs/etc/inittab ; echo '' >> unpacked-rootfs/etc/inittab echo 'tty1::respawn:/sbin/getty 38400 tty1' >> ${PROJDIR}/unpacked-rootfs/etc/inittab ; echo '' >> ${PROJDIR}/unpacked-rootfs/etc/inittab
產生 etc/rc.d/rc.conf
cd ${PROJDIR} mkdir -p ${PROJDIR}/unpacked-rootfs/etc/rc.d cat > ${PROJDIR}/unpacked-rootfs/etc/rc.d/rc.conf << "EOF" cfg_services="mount-proc-sys udev hostname depmod modules filesystems inetd " cfg_services_r=" inetd filesystems modules depmod hostname udev mount-proc-sys" export HOSTNAME=`cat /etc/hostname` export TMPFS=tmpfs export LD_LIBRARY_PATH=/usr/lib:/lib ; export SDL_NOMOUSE=1 ; export ALSA_CONFIG_PATH=/usr/share/alsa/alsa.conf EOF cat > ${PROJDIR}/unpacked-rootfs/etc/profile << "EOF" source /etc/rc.d/rc.conf hostname -F /etc/hostname export PS1='\u@\h:\w$ ' [ `id -u` -eq 0 ] && export PS1='\u@\h:\w# ' [ `id -u` -eq 0 ] && export HOME=/root [ `id -u` -eq 0 ] && cd /root export TZ=Asia/Taipei export LC_ALL=C echo -ne "\33[9;0]" > /dev/tty0 echo -ne "\033[?25l" > /dev/tty0 EOF cat > ${PROJDIR}/unpacked-rootfs/etc/shutdown << "EOF" #!/bin/sh true EOF cat > ${PROJDIR}/unpacked-rootfs/init << "EOF" #!/bin/sh /bin/mount proc /proc -t proc /bin/mount sysfs /sys -t sysfs echo /sbin/mdev > /proc/sys/kernel/hotplug mdev -s exec switch_root /mnt /sbin/init EOF chmod 777 unpacked-rootfs/etc/rc.d/rc.conf unpacked-rootfs/etc/profile unpacked-rootfs/etc/shutdown unpacked-rootfs/init ${PROJDIR}/unpacked-rootfs/etc/rc.local
產生 /etc/asound.conf
cd ${PROJDIR} mkdir -p ${PROJDIR}/unpacked-rootfs/usr/share/alsa sudo /bin/cp -Rpf /usr/arm-linux-gnueabi/share/alsa/* ${PROJDIR}/unpacked-rootfs/usr/share/alsa/ ; sudo chown `whoami`.`whoami` -R ${PROJDIR}/unpacked-rootfs/usr/share/alsa/ cat > ${PROJDIR}/unpacked-rootfs/etc/asound.conf << "EOF" pcm.!default { type hw card 0 } ctl.!default { type hw card 0 } EOF
產生 Squashfs 之 rootfs 二進位檔案 (Binary)
cd ${PROJDIR} sudo mksquashfs unpacked-rootfs rootfs.img /bin/mv -f rootfs.img ${PROJDIR}/out/ sudo chown `whoami`.`whoami` -R ${PROJDIR}/out # system.bin [ ! -f out/u-boot.bin ] && exit 0 [ ! -f out/mk3-evb.dtb ] && exit 0 [ ! -f out/uImage ] && exit 0 [ ! -f out/rootfs.img ] && exit 0 sudo /bin/rm -rf out/system.bin dd if=/dev/zero of=out/system.bin bs=1 count=4M dd if=out/u-boot.bin of=out/system.bin conv=notrunc bs=1 dd if=out/mk3-evb.dtb of=out/system.bin conv=notrunc bs=1 seek=256K dd if=out/uImage of=out/system.bin conv=notrunc bs=1 seek=320K dd if=out/rootfs.img of=out/system.bin conv=notrunc bs=1 seek=2176K
這樣就大功告成了; 檔案 out/rootfs.img 就是我們所要的.
把所有的東西放在一起
現在把所有的東西放在一起:
- bin/mk-rootfs.sh
-
#!/bin/bash -e [ ! -f bin/mk-rootfs.sh ] && exit 1 ############################################################ # CROSS_COMPILE if [ ! -f /usr/bin/arm-linux-gnueabi-gcc ]; then echo 'CROSS_COMPILE arm-linux-gnueabi-gcc unavailable' echo 'TRY: sudo apt-get install -y g++-5-arm-linux-gnueabi gcc-5-arm-linux-gnueabi libstdc++-5-dev-armel-cross linux-libc-dev-armel-cross libc6-dev-armel-cross gcc-arm-linux-gnueabi g++-arm-linux-gnueabi libncurses5-dev' exit 1 fi if [ ! -f /usr/arm-linux-gnueabi.tgz ]; then echo 'backup the "/usr/arm-linux-gnueabi" first' echo 'TRY: sudo tar zcvf /usr/arm-linux-gnueabi.tgz -C /usr arm-linux-gnueabi' exit 1 fi ############################################################ # PROJDIR PROJDIR=`pwd` TARGET_SERIAL_CONSOL=ttyMK0 [ -f /etc/ld.so.conf ] && sudo touch /etc/ld.so.conf && sudo ldconfig -v ############################################################ # Test arm-linux-gnueabi-as arm-linux-gnueabi-ld cd ${PROJDIR} cat > ${PROJDIR}/prebuild/hello.s << "EOF" .data msg: .ascii "Hello, ARM World!\n" len = . - msg .text .globl _start _start: /* write syscall */ mov %r0, $1 ldr %r1, =msg ldr %r2, =len mov %r7, $4 swi $0 /* exit syscall */ mov %r0, $0 mov %r7, $1 swi $0 EOF cd ${PROJDIR}/prebuild arm-linux-gnueabi-as -o hello.o hello.s arm-linux-gnueabi-ld -o hello hello.o # ${PROJDIR}/prebuild/hello ############################################################ # u-boot cd ${PROJDIR} if [ -d mk_uboot ]; then make CROSS_COMPILE=arm-linux-gnueabi- -C mk_uboot mk3_evb_defconfig u-boot.bin /bin/cp -Rpf mk_uboot/u-boot.bin out/ fi ############################################################ # kernel, dtb cd ${PROJDIR} if [ -d mk_linux ]; then make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- LOADADDR=18000000 -C mk_linux mk3_defconfig uImage mk3-evb.dtb nm mk_linux/vmlinux | grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | sort > mk_linux/System.map /bin/cp -Rpf mk_linux/arch/arm/boot/uImage out/ && /bin/cp -Rpf mk_linux/arch/arm/boot/dts/mk3-evb.dtb out/ fi ############################################################ # Basic directory rm -rf ${PROJDIR}/unpacked-rootfs/* mkdir -p ${PROJDIR}/unpacked-rootfs cd ${PROJDIR}/unpacked-rootfs mkdir -p bin boot dev etc home lib lost+found mnt opt private proc root sbin sys tmp usr var cd ${PROJDIR}/unpacked-rootfs/etc/ mkdir -p init.d rc.d sysconfig cd ${PROJDIR}/unpacked-rootfs/usr/ mkdir -p bin lib sbin share cd ${PROJDIR}/unpacked-rootfs/usr/share/ mkdir -p alsa udhcpc zoneinfo cd ${PROJDIR}/unpacked-rootfs/var/ mkdir -p run lib log spool/cron mkdir -p ${PROJDIR}/unpacked-rootfs/proc/self/exe ${PROJDIR}/unpacked-rootfs/lib/modules ############################################################ # busybox with arm9_defconfig cd ${PROJDIR} [ ! -d busybox ] && git clone https://git.busybox.net/busybox/ cd ${PROJDIR}/busybox/ git branch -a git checkout remotes/origin/1_24_stable sudo rm -rf ${PROJDIR}/busybox/_install/ cd ${PROJDIR} # diff -uN configs/cygwin_defconfig configs/arm9_defconfig > ../patches/arm9_defconfig.patch patch -d busybox --verbose configs/cygwin_defconfig --ignore-whitespace -i ../patches/arm9_defconfig.patch --dry-run || exit 2 patch -d busybox --verbose configs/cygwin_defconfig --ignore-whitespace-i ../patches/arm9_defconfig.patch -o configs/arm9_defconfig make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -C busybox arm9_defconfig all make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -C busybox install [ ! -f busybox/_install/bin/busybox ] && exit 3 sudo rm -rvf ${PROJDIR}/unpacked-rootfs/bin/* sudo rm -rvf ${PROJDIR}/unpacked-rootfs/sbin/* /bin/cp -av ${PROJDIR}/busybox/_install/* unpacked-rootfs/ ############################################################ # zlib cd ${PROJDIR} rm -rf ${PROJDIR}/unpacked-rootfs/lib/libz.so.1.2.11 ${PROJDIR}/unpacked-rootfs/lib/libz.so.1.2.8 rm -rf ${PROJDIR}/unpacked-rootfs/lib/usr/libz.so.1.2.11 ${PROJDIR}/unpacked-rootfs/usr/lib/libz.so.1.2.8 [ ! -d zlib ] && git clone https://github.com/madler/zlib cd ${PROJDIR}/zlib/ CFLAGS="-mcpu=arm926ej-s -march=armv5te -mtune=arm926ej-s -marm -mfpu=vfp -O3 -pipe" \ CC=arm-linux-gnueabi-gcc ./configure --prefix=/ make arm-linux-gnueabi-strip libz.so.1.2.11 sudo make DESTDIR=/usr/arm-linux-gnueabi install /bin/cp -Rpf libz.so* ${PROJDIR}/unpacked-rootfs/usr/lib/ ############################################################ # ... cd ${PROJDIR} rm -rf ${PROJDIR}/unpacked-rootfs/lib/libpng12.so.0.50.0 ${PROJDIR}/unpacked-rootfs/lib/libpng.so.3.50.0 rm -rf ${PROJDIR}/unpacked-rootfs/lib/libpng12.so.0.59.0 ${PROJDIR}/unpacked-rootfs/lib/libpng.so.3.59.0 rm -rf ${PROJDIR}/unpacked-rootfs/usr/lib/libpng12.so.0.50.0 ${PROJDIR}/unpacked-rootfs/usr/lib/libpng.so.3.50.0 rm -rf ${PROJDIR}/unpacked-rootfs/usr/lib/libpng12.so.0.59.0 ${PROJDIR}/unpacked-rootfs/usr/lib/libpng.so.3.59.0 ############################################################ # libpng cd ${PROJDIR} [ ! -f libpng-1.2.50.tar.gz ] && wget http://78.108.103.11/MIRROR/ftp/png/src/history/libpng12/libpng-1.2.50.tar.gz tar zxvf libpng-1.2.50.tar.gz cd ${PROJDIR}/libpng-1.2.50 CFLAGS="-mcpu=arm926ej-s -march=armv5te -mtune=arm926ej-s -marm -mfpu=vfp -O3 -pipe" \ ./configure --host=arm-linux-gnueabi --prefix=/usr/arm-linux-gnueabi sudo make clean && make cd ${PROJDIR}/libpng-1.2.50/.libs && arm-linux-gnueabi-strip libpng12.so.0.50.0 libpng.so.3.50.0 /bin/cp -Rpf libpng*.so* ${PROJDIR}/unpacked-rootfs/usr/lib/ cd ${PROJDIR}/libpng-1.2.50 ### Avoid multiple versions of linpng sudo rm -rvf /usr/arm-linux-gnueabi/lib/libpng* sudo make install ############################################################ # ncurses cd ${PROJDIR} [ ! -d ncurses ] && git clone https://github.com/mirror/ncurses cd ${PROJDIR}/ncurses/ CFLAGS="-mcpu=arm926ej-s -march=armv5te -mtune=arm926ej-s -marm -mfpu=vfp -O3 -pipe" \ ./configure --prefix=/usr/arm-linux-gnueabi --host=arm-linux-gnueabi --without-ada --without-progs \ --with-cxx-shared --with-shared --without-normal --disable-widec --enable-symlinks \ --disable-db-install --with-termlib=no sudo make V=1 uninstall sudo make V=1 clean ; make V=1 cd ${PROJDIR}/ncurses/lib/ for SO in `find . -mindepth 1 ! -type l -name "*.so"`; do if [ "$SO" != "./libc.so" -a "$SO" != "./libpthread.so" ]; then arm-linux-gnueabi-strip $SO; fi ; done cd ${PROJDIR}/ncurses/ sudo make V=1 install /bin/cp -Rpf ${PROJDIR}/ncurses/lib/libform.so* ${PROJDIR}/unpacked-rootfs/usr/lib/ /bin/cp -Rpf ${PROJDIR}/ncurses/lib/libmenu.so* ${PROJDIR}/unpacked-rootfs/usr/lib/ /bin/cp -Rpf ${PROJDIR}/ncurses/lib/libpanel.so* ${PROJDIR}/unpacked-rootfs/usr/lib/ /bin/cp -Rpf ${PROJDIR}/ncurses/lib/libtinfo.so* ${PROJDIR}/unpacked-rootfs/usr/lib/ || true /bin/cp -Rpf ${PROJDIR}/ncurses/lib/libncurses.so* ${PROJDIR}/unpacked-rootfs/usr/lib/ /bin/cp -Rpf ${PROJDIR}/ncurses/lib/libncurses++.so* ${PROJDIR}/unpacked-rootfs/usr/lib/ ############################################################ # alsa-lib cd ${PROJDIR} [ ! -d alsa-lib ] && git clone git://git.alsa-project.org/alsa-lib.git cd ${PROJDIR}/alsa-lib ; ./gitcompile || true CFLAGS="-mcpu=arm926ej-s -march=armv5te -mtune=arm926ej-s -marm -mfpu=vfp -O3 -pipe" \ ./configure --host=arm-linux-gnueabi --prefix=/ \ --disable-python --disable-python2 \ --disable-aload --disable-mixer-pymods \ --disable-ucm --disable-topology --disable-rawmidi --disable-seq sudo make clean make V=1 cd ${PROJDIR}/alsa-lib/src/.libs/ ; arm-linux-gnueabi-strip libasound.so.2.0.0 cd ${PROJDIR}/alsa-lib sudo make V=1 DESTDIR=/usr/arm-linux-gnueabi install sudo rm -rf ${PROJDIR}/unpacked-rootfs/usr/share/alsa/* sudo /bin/cp -Rpf /usr/arm-linux-gnueabi/share/alsa/* ${PROJDIR}/unpacked-rootfs/usr/share/alsa/ sudo chown -R `whoami`.`whoami` ${PROJDIR}/unpacked-rootfs/usr/share/alsa/ /bin/cp -Rpf ${PROJDIR}/alsa-lib/src/.libs/libasound.so* ${PROJDIR}/unpacked-rootfs/usr/lib/ ############################################################ # alsa-utils, for the first time, Press Return to acknowledge the previous three paragraphs. cd ${PROJDIR} [ ! -d alsa-utils ] && git clone git://git.alsa-project.org/alsa-utils.git cd ${PROJDIR}/alsa-utils [ ! -f ./configure ] && GITCOMPILE_NO_MAKE=1 ./gitcompile CFLAGS="-mcpu=arm926ej-s -march=armv5te -mtune=arm926ej-s -marm -mfpu=vfp -O3 -pipe" \ ./configure --host=arm-linux-gnueabi --prefix=${PROJDIR}/unpacked-rootfs/usr \ --enable-alsaconf --disable-rst2man --disable-xmlto --with-curses=ncurses \ --disable-alsamixer \ --with-alsa-prefix=/usr/arm-linux-gnueabi/lib --with-alsa-inc-prefix=/usr/arm-linux-gnueabi/include cd ${PROJDIR} #make -C ${PROJDIR}/alsa-utils/ || true make -C ${PROJDIR}/alsa-utils/include make -C ${PROJDIR}/alsa-utils/aplay clean all install make -C ${PROJDIR}/alsa-utils/amixer clean all all make -C ${PROJDIR}/alsa-utils/speaker-test clean all rm -rf ${PROJDIR}/unpacked-rootfs/usr/share/man/ ############################################################ # glibc sudo rm -rf ${PROJDIR}/foo cd ${PROJDIR} [ ! -d glibc ] && git clone git://sourceware.org/git/glibc.git cd ${PROJDIR}/glibc/ git branch -a git checkout remotes/origin/release/2.23/master mkdir -p ${PROJDIR}/glibc-build cd ${PROJDIR}/glibc-build CFLAGS="-mcpu=arm926ej-s -march=armv5te -mtune=arm926ej-s -marm -mfpu=vfp -O2 -pipe" \ ../glibc/configure --prefix=/ --host=arm-linux-gnueabi --enable-profile \ --disable-nscd --disable-build-nscd --enable-multi-arch sudo chown -R `whoami`.`whoami` ${PROJDIR}/glibc-build make DESTDIR=${PROJDIR}/foo ; make DESTDIR=${PROJDIR}/foo install cd ${PROJDIR}/foo/sbin/ arm-linux-gnueabi-strip iconvconfig ldconfig sln zdump zic /bin/cp -av ${PROJDIR}/foo/sbin/ldconfig ${PROJDIR}/unpacked-rootfs/sbin/ cd ${PROJDIR}/foo/lib/ for SO in `find . -mindepth 1 ! -type l -name "*.so"`; do if [ "$SO" != "./libc.so" -a "$SO" != "./libpthread.so" ]; then arm-linux-gnueabi-strip $SO; fi ; done LIBC_PATH=${PROJDIR}/foo/lib /bin/cp -av ${LIBC_PATH}/libdl*.so* ${PROJDIR}/unpacked-rootfs/lib/ /bin/cp -av ${LIBC_PATH}/ld-*.so* ${PROJDIR}/unpacked-rootfs/lib/ /bin/cp -av ${LIBC_PATH}/libc*.so* ${PROJDIR}/unpacked-rootfs/lib/ /bin/cp -av ${LIBC_PATH}/libm*.so* ${PROJDIR}/unpacked-rootfs/lib/ /bin/cp -av ${LIBC_PATH}/lib*thread*.so* ${PROJDIR}/unpacked-rootfs/lib/ /bin/cp -av ${LIBC_PATH}/librt*.so* ${PROJDIR}/unpacked-rootfs/lib/ /bin/cp -av ${LIBC_PATH}/libpcprofile*.so* ${PROJDIR}/unpacked-rootfs/lib/ /bin/cp -av ${LIBC_PATH}/libnss*.so* ${PROJDIR}/unpacked-rootfs/lib/ /bin/cp -av ${LIBC_PATH}/libnsl*.so* ${PROJDIR}/unpacked-rootfs/lib/ /bin/cp -av ${LIBC_PATH}/libutil*.so* ${PROJDIR}/unpacked-rootfs/lib/ /bin/cp -av ${LIBC_PATH}/libSegFault*.so* ${PROJDIR}/unpacked-rootfs/lib/ /bin/cp -av ${LIBC_PATH}/libresolv*.so* ${PROJDIR}/unpacked-rootfs/lib/ /bin/cp -av ${LIBC_PATH}/libthread_db*.so* ${PROJDIR}/unpacked-rootfs/lib/ /bin/cp -av ${LIBC_PATH}/libBrokenLocale*.so* ${PROJDIR}/unpacked-rootfs/lib/ /bin/cp -av ${LIBC_PATH}/libanl*.so* ${PROJDIR}/unpacked-rootfs/lib/ /bin/cp -av ${LIBC_PATH}/libcidn*.so* ${PROJDIR}/unpacked-rootfs/lib/ ############################################################ # /usr/arm-linux-gnueabi/lib/libgcc_s.so* /bin/cp -av /usr/arm-linux-gnueabi/lib/libgcc_s.so* ${PROJDIR}/unpacked-rootfs/lib/ ############################################################ # lrzsz cd ${PROJDIR} [ ! -d lrzsz ] && git clone https://github.com/jnavila/lrzsz cd ${PROJDIR}/lrzsz/ CFLAGS="-mcpu=arm926ej-s -march=armv5te -mtune=arm926ej-s -marm -mfpu=vfp -O2 -pipe" \ CC="arm-linux-gnueabi-gcc" ./configure --disable-nls --disable-werror sudo make clean && make cd src && arm-linux-gnueabi-strip lrz && arm-linux-gnueabi-strip lsz && cd .. cd ${PROJDIR} /bin/cp -Rpf ${PROJDIR}/lrzsz/src/lrz ${PROJDIR}/unpacked-rootfs/usr/bin/ /bin/cp -Rpf ${PROJDIR}/lrzsz/src/lsz ${PROJDIR}/unpacked-rootfs/usr/bin/ ############################################################ # tslib cd ${PROJDIR} [ ! -d tslib ] && git clone https://github.com/kergoth/tslib cd ${PROJDIR}/tslib ./autogen.sh CFLAGS="-mcpu=arm926ej-s -march=armv5te -mtune=arm926ej-s -marm -mfpu=vfp -O2 -pipe" ./configure --host=arm-linux-gnueabi --prefix=/ sudo make V=1 clean make V=1 cd ${PROJDIR}/tslib/src/.libs/ arm-linux-gnueabi-strip libts.so.0.10.0 /bin/cp -Rpf ${PROJDIR}/tslib/src/.libs/libts.so* ${PROJDIR}/unpacked-rootfs/lib/ cd ${PROJDIR}/tslib/plugins/.libs/ arm-linux-gnueabi-strip debounce.so dejitter.so iir.so input.so invert.so linear.so lowpass.so median.so pthres.so skip.so touchkit.so variance.so waveshare.so cd ${PROJDIR}/tslib sudo make V=1 DESTDIR=/usr/arm-linux-gnueabi install /bin/cp -fv /usr/arm-linux-gnueabi/etc/ts.conf ${PROJDIR}/unpacked-rootfs/etc/ /bin/cp -fv /usr/arm-linux-gnueabi/lib/libts.so* ${PROJDIR}/unpacked-rootfs/lib/ /bin/cp -Rfv /usr/arm-linux-gnueabi/lib/ts ${PROJDIR}/unpacked-rootfs/lib/ ############################################################ # SDL-1.2.15-raspberrypi patches cd ${PROJDIR} cat > ${PROJDIR}/patches/SDL_blit_N.c.patch << "EOF" diff --git a/src/video/SDL_blit_N.c b/src/video/SDL_blit_N.c index f10733e..9deb6b8 100644 --- a/src/video/SDL_blit_N.c 2012-01-19 14:30:06.000000000 +0800 +++ b/src/video/SDL_blit_N.c 2017-11-20 16:50:05.997531150 +0800 @@ -2031,6 +2031,32 @@ } } + +//Brian add +#define YUVPIXEL(Y,Cb,Cr) (((Y)<<24)|((Y)<<8)|((Cr)<<16)|(Cb)) +u_int32_t RGB2YUV(unsigned char R,unsigned char G,unsigned char B) +{ + unsigned char Y,Cb,Cr; + + Y = ((67316*R)>>18) + ((132154*G)>>18) + ((25666*B)>>18) + 16; + Cr = ((115138*R)>>18) - ((96414*G)>>18) - ((18724*B)>>18) + 128; + Cb = -((38856*R)>>18) - ((76282*G)>>18) + ((115138*B)>>18) + 128; + + // Done + return(YUVPIXEL(Y,Cb,Cr)); +} +u_int32_t YUVTable[65536]; +int isYUVinit = 0; +static void initYUVTable(void) +{ + int i; + for (i=0; i<65536; i++) { + YUVTable[i] = RGB2YUV((i>>11)<<3, ((i>>5)&0x3f)<<2, (i&0x1f)<<3); + } + isYUVinit = 1; +} + + static void BlitNtoN(SDL_BlitInfo *info) { int width = info->d_width; @@ -2045,6 +2071,9 @@ int dstbpp = dstfmt->BytesPerPixel; unsigned alpha = dstfmt->Amask ? srcfmt->alpha : 0; + if (!isYUVinit) { + initYUVTable(); + } while ( height-- ) { DUFFS_LOOP( { @@ -2052,8 +2081,11 @@ unsigned sR; unsigned sG; unsigned sB; - DISEMBLE_RGB(src, srcbpp, srcfmt, Pixel, sR, sG, sB); - ASSEMBLE_RGBA(dst, dstbpp, dstfmt, sR, sG, sB, alpha); + //DISEMBLE_RGB(src, srcbpp, srcfmt, Pixel, sR, sG, sB); + //ASSEMBLE_RGBA(dst, dstbpp, dstfmt, sR, sG, sB, alpha); + //*((Uint32 *)(dst)) = RGB2YUV(sR, sG, sB); + *((Uint32 *)(dst)) = YUVTable[*((Uint16 *)(src))]; + dst += dstbpp; src += srcbpp; }, EOF cat > ${PROJDIR}/patches/SDL_alsa_audio.c.patch << "EOF" diff --git a/src/audio/alsa/SDL_alsa_audio.c b/src/audio/alsa/SDL_alsa_audio.c index f10733e..9deb6b8 100644 --- a/src/audio/alsa/SDL_alsa_audio.c +++ b/src/audio/alsa/SDL_alsa_audio.c @@ -520,10 +520,10 @@ static int ALSA_OpenAudio(_THIS, SDL_AudioSpec *spec) format = SND_PCM_FORMAT_U16_BE; break; default: - format = 0; + format = SND_PCM_FORMAT_UNKNOWN; break; } - if ( format != 0 ) { + if ( format != SND_PCM_FORMAT_UNKNOWN ) { status = SDL_NAME(snd_pcm_hw_params_set_format)(pcm_handle, hwparams, format); } if ( status < 0 ) { if ( status < 0 ) { EOF cat > ${PROJDIR}/patches/SDL_systhread.c.patch << "EOF" diff --git a/src/thread/pthread/SDL_systhread.c b/src/thread/pthread/SDL_systhread.c index f10733e..9deb6b8 100644 --- a/src/thread/pthread/SDL_systhread.c 2012-01-19 14:30:06.000000000 +0800 +++ b/src/thread/pthread/SDL_systhread.c 2017-11-20 18:37:11.427399387 +0800 @@ -58,6 +58,8 @@ SDL_SetError("Couldn't initialize pthread attributes"); return(-1); } + + pthread_attr_setstacksize(&type, 20480); pthread_attr_setdetachstate(&type, PTHREAD_CREATE_JOINABLE); /* Create the thread and go! */ EOF ############################################################ # SDL-1.2.15-raspberrypi cd ${PROJDIR} [ ! -d SDL-1.2.15-raspberrypi ] && git clone https://github.com/vanfanel/SDL-1.2.15-raspberrypi cd ${PROJDIR}/SDL-1.2.15-raspberrypi git checkout ./src/audio/alsa/SDL_alsa_audio.c git apply --reject --whitespace=fix ${PROJDIR}/patches/SDL_alsa_audio.c.patch git checkout src/thread/pthread/SDL_systhread.c git apply --reject --whitespace=fix ${PROJDIR}/patches/SDL_systhread.c.patch git checkout src/video/SDL_blit_N.c git apply --reject --whitespace=fix ${PROJDIR}/patches/SDL_blit_N.c.patch cd ${PROJDIR}/SDL-1.2.15-raspberrypi/ CFLAGS="-mcpu=arm926ej-s -march=armv5te -mtune=arm926ej-s -marm -mfpu=vfp -O2 -pipe" \ ./configure --host=arm-linux-gnueabi --prefix=/usr/arm-linux-gnueabi --enable-alsa=yes --enable-input-tslib=yes \ --disable-esd --disable-pulseaudio --disable-arts --disable-nas --disable-diskaudio --disable-nasm \ --disable-altivec --disable-video-directfb --disable-video-opengl --disable-video-opengles2 \ --disable-video-x11-dgamouse --disable-video-x11 --disable-video-dga \ --enable-input-tslib=yes \ --with-alsa-prefix=/usr/arm-linux-gnueabi/lib --with-alsa-inc-prefix=/usr/arm-linux-gnueabi/include sudo make clean && make cd ${PROJDIR}/SDL-1.2.15-raspberrypi/build/.libs/ arm-linux-gnueabi-strip libSDL-1.2.so.0.11.4 cd ${PROJDIR}/SDL-1.2.15-raspberrypi sudo make install /bin/cp -Rpf ${PROJDIR}/SDL-1.2.15-raspberrypi/build/.libs/libSDL-1.2.so* ${PROJDIR}/unpacked-rootfs/usr/lib/ ############################################################ # SDL test cd ${PROJDIR} cd ${PROJDIR}/SDL-1.2.15-raspberrypi/test CFLAGS="-mcpu=arm926ej-s -march=armv5te -mtune=arm926ej-s -marm -mfpu=vfp -O2 -pipe" \ ./configure --host=arm-linux-gnueabi --without-x --with-sdl-exec-prefix=/usr/arm-linux-gnueabi sudo make clean make testwin loopwave testhread testvidinfo testbitmap arm-linux-gnueabi-strip testwin loopwave testhread testvidinfo #/bin/cp -av ${PROJDIR}/SDL-1.2.15-raspberrypi/test/testwin ${PROJDIR}/unpacked-rootfs/usr/bin/ #/bin/cp -av ${PROJDIR}/SDL-1.2.15-raspberrypi/test/loopwave ${PROJDIR}/unpacked-rootfs/usr/bin/ #/bin/cp -av ${PROJDIR}/SDL-1.2.15-raspberrypi/test/sample.wav ${PROJDIR}/unpacked-rootfs/root/ ############################################################ # clone picodrive cd ${PROJDIR} [ ! -d picodrive ] && git clone https://github.com/notaz/picodrive cd ${PROJDIR}/picodrive/platform/libpicofe git submodule update --init ############################################################ # picodrive configure cd ${PROJDIR}/picodrive sed 's/optimize_arm926ej="no"/optimize_arm926ej="yes"/' ./configure > ./configure.tmp /bin/mv -f ./configure.tmp ./configure chmod 777 ./configure ############################################################ # picodrive patches cd ${PROJDIR}/picodrive cat > ${PROJDIR}/patches/draw_arm.S.patch << "EOF" diff --git a/pico/draw_arm.S b/pico/draw_arm.S index 29af1c1..f2b036b 100644 --- a/pico/draw_arm.S +++ b/pico/draw_arm.S @@ -1450,10 +1450,14 @@ DrawWindow: and r2, lr, \reg,lsr #7 @ b and r3, lr, \reg,lsr #3 @ g and \reg, lr, \reg,lsl #1 @ r - orr r2, r2, r3, lsl #6 - orr \reg, r2, \reg,lsl #11 + @orr r2, r2, r3, lsl #6 + @orr \reg, r2, \reg,lsl #11 - and r2, r8, \reg,lsr #4 + @and r2, r8, \reg,lsr #4 + orr \reg, \reg, r3, lsl #6 + orr r2, \reg, r2,lsl #11 + + and \reg, r8, r2,lsr #4 orr \reg, \reg, r2 .endm EOF git checkout pico/draw_arm.S && git apply --reject --whitespace=fix ${PROJDIR}/patches/draw_arm.S.patch cat > ${PROJDIR}/patches/emu.c.patch << "EOF" diff --git a/platform/common/emu.c b/platform/common/emu.c index 0a9f089..ff71b74 100644 --- a/platform/common/emu.c +++ b/platform/common/emu.c @@ -578,7 +578,8 @@ void emu_prep_defconfig(void) { memset(&defaultConfig, 0, sizeof(defaultConfig)); defaultConfig.EmuOpt = 0x9d | EOPT_EN_CD_LEDS; - defaultConfig.s_PicoOpt = POPT_EN_STEREO|POPT_EN_FM|POPT_EN_PSG|POPT_EN_Z80 | + //defaultConfig.s_PicoOpt = POPT_EN_STEREO|POPT_EN_FM|POPT_EN_PSG|POPT_EN_Z80 | + defaultConfig.s_PicoOpt = POPT_EN_FM|POPT_EN_PSG|POPT_EN_Z80 | POPT_EN_MCD_PCM|POPT_EN_MCD_CDDA|POPT_EN_MCD_GFX | POPT_EN_DRC|POPT_ACC_SPRITES | POPT_EN_32X|POPT_EN_PWM; EOF git checkout platform/common/emu.c && git apply --reject --whitespace=fix ${PROJDIR}/patches/emu.c.patch cat > ${PROJDIR}/patches/platform_common_plat_sdl.c.patch << "EOF" diff --git a/platform/common/plat_sdl.c b/platform/common/plat_sdl.c index 4446f72..504230d 100644 --- a/platform/common/plat_sdl.c +++ b/platform/common/plat_sdl.c @@ -27,12 +27,16 @@ const struct in_default_bind in_sdl_defbinds[] __attribute__((weak)) = { { SDLK_LEFT, IN_BINDTYPE_PLAYER12, GBTN_LEFT }, { SDLK_RIGHT, IN_BINDTYPE_PLAYER12, GBTN_RIGHT }, { SDLK_z, IN_BINDTYPE_PLAYER12, GBTN_A }, + { SDLK_WORLD_0, IN_BINDTYPE_PLAYER12, GBTN_A }, { SDLK_x, IN_BINDTYPE_PLAYER12, GBTN_B }, + { SDLK_WORLD_1, IN_BINDTYPE_PLAYER12, GBTN_B }, { SDLK_c, IN_BINDTYPE_PLAYER12, GBTN_C }, + { SDLK_WORLD_2, IN_BINDTYPE_PLAYER12, GBTN_C }, { SDLK_a, IN_BINDTYPE_PLAYER12, GBTN_X }, { SDLK_s, IN_BINDTYPE_PLAYER12, GBTN_Y }, { SDLK_d, IN_BINDTYPE_PLAYER12, GBTN_Z }, { SDLK_RETURN, IN_BINDTYPE_PLAYER12, GBTN_START }, + { SDLK_WORLD_3, IN_BINDTYPE_PLAYER12, GBTN_START }, { SDLK_f, IN_BINDTYPE_PLAYER12, GBTN_MODE }, { SDLK_ESCAPE, IN_BINDTYPE_EMU, PEVB_MENU }, { SDLK_TAB, IN_BINDTYPE_EMU, PEVB_RESET }, EOF git checkout platform/common/plat_sdl.c && git apply --reject --whitespace=fix ${PROJDIR}/patches/platform_common_plat_sdl.c.patch cd ${PROJDIR}/picodrive/platform/libpicofe cat > ${PROJDIR}/patches/platform_libpicofe_plat_sdl.c.patch << "EOF" diff --git a/plat_sdl.c b/plat_sdl.c index bbb466e..86e6feb 100644 --- a/plat_sdl.c +++ b/plat_sdl.c @@ -284,6 +284,7 @@ int plat_sdl_init(void) } plat_target.vout_methods = vout_list; + SDL_ShowCursor(SDL_DISABLE); return 0; fail: EOF git checkout plat_sdl.c && git apply --reject --whitespace=fix ${PROJDIR}/patches/platform_libpicofe_plat_sdl.c.patch ############################################################ # picodrive build cd ${PROJDIR}/picodrive SDL_CONFIG=/usr/arm-linux-gnueabi/bin/sdl-config CROSS_COMPILE=arm-linux-gnueabi- ./configure sudo make clean sudo make -C ${PROJDIR}/picodrive/cpu/cyclone/ clean sudo rm -rf ${PROJDIR}/picodrive/cpu/cyclone/Cyclone.o sed 's/#define HAVE_ARMv6 1/#define HAVE_ARMv6 0/' ${PROJDIR}/picodrive/cpu/cyclone_config.h > ${PROJDIR}/picodrive/cpu/cyclone_config_armv5.h #CONFIG_FILE=`pwd`/cpu/cyclone_config_armv4.h make -C cpu/cyclone/ all CONFIG_FILE=${PROJDIR}/picodrive/cpu/cyclone_config_armv5.h make -C cpu/cyclone/ all make arm-linux-gnueabi-strip PicoDrive /bin/cp -Rpf ${PROJDIR}/picodrive/PicoDrive ${PROJDIR}/unpacked-rootfs/usr/bin/ /bin/cp -Rpf ${PROJDIR}/prebuild/picodrive/Sonic.md ${PROJDIR}/unpacked-rootfs/usr/bin/ /bin/cp -Rpf ${PROJDIR}/prebuild/picodrive/.picodrive ${PROJDIR}/unpacked-rootfs/usr/bin/ ############################################################ # tz (time zone) data, Asia/Taipei cd ${PROJDIR} [ ! -d tz ] && git clone https://github.com/eggert/tz make TOPDIR=${PROJDIR}/unpacked-rootfs -C tz clean install_data cd ${PROJDIR}/unpacked-rootfs/usr/share/zoneinfo/ ls | grep -v Asia | xargs rm -rf cd ${PROJDIR}/unpacked-rootfs/usr/share/zoneinfo/Asia/ ls | grep -v Taipei | xargs rm -rf /bin/cp -Rpf ${PROJDIR}/unpacked-rootfs/usr/share/zoneinfo/Asia/Taipei ${PROJDIR}/unpacked-rootfs/etc/localtime sed 's/TZDIR=\/\/share\/zoneinfo/TZDIR=\/usr\/share\/zoneinfo/g' ${PROJDIR}/foo/bin/tzselect > ${PROJDIR}/tzselect /bin/mv -f ${PROJDIR}/tzselect ${PROJDIR}/foo/bin/tzselect sed 's/#!\/bin\/bash/#!\/bin\/sh/' ${PROJDIR}/foo/bin/tzselect > ${PROJDIR}/unpacked-rootfs/usr/bin/tzselect chmod 777 ${PROJDIR}/foo/bin/tzselect ${PROJDIR}/unpacked-rootfs/usr/bin/tzselect rm -rf ${PROJDIR}/unpacked-rootfs/usr/include ${PROJDIR}/unpacked-rootfs/include ############################################################ # /usr/share/udhcpc/default.script cd ${PROJDIR} sudo rm -rf usr-share-udhcpc-default.script wget https://raw.githubusercontent.com/mschlenker/TinyCrossLinux/master/patches/usr-share-udhcpc-default.script mkdir -p ${PROJDIR}/unpacked-rootfs/usr/share/udhcpc /bin/mv -f usr-share-udhcpc-default.script ${PROJDIR}/unpacked-rootfs/usr/share/udhcpc/default.script ############################################################ # /bin/start_getty /etc/hostname /etc/host.conf /etc/hosts /etc/passwd /etc/group /etc/shells /etc/services cd ${PROJDIR} touch unpacked-rootfs/bin/start_getty chmod 777 unpacked-rootfs/bin/start_getty echo '#!/bin/sh' > unpacked-rootfs/bin/start_getty ; sudo echo '' >> ${PROJDIR}/unpacked-rootfs/bin/start_getty ; echo '[ -c /dev/$2 ] && /sbin/getty -L $1 $2 $3' >> ${PROJDIR}/unpacked-rootfs/bin/start_getty echo mk3 > unpacked-rootfs/etc/hostname echo 'order hosts,bind' > unpacked-rootfs/etc/host.conf ; echo 'multi on' >> unpacked-rootfs/etc/host.conf ; echo 'nameserver 168.95.1.1' > unpacked-rootfs/etc/resolv.conf echo '127.0.0.1 localhost' > unpacked-rootfs/etc/hosts ; echo '127.0.0.1 mk3' >> unpacked-rootfs/etc/hosts sudo rm -rf unpacked-rootfs/etc/passwd unpacked-rootfs/etc/group sudo echo root::0:0:root:/root:/bin/bash > unpacked-rootfs/etc/passwd ; sudo chmod 644 unpacked-rootfs/etc/passwd && sudo chown root.root unpacked-rootfs/etc/passwd sudo echo root::0: > unpacked-rootfs/etc/group ; sudo chmod 644 unpacked-rootfs/etc/group && sudo chown root.root unpacked-rootfs/etc/group echo '/bin/sh' > unpacked-rootfs/etc/shells ; echo '/bin/ash' >> unpacked-rootfs/etc/shells ; echo '/bin/hush' >> unpacked-rootfs/etc/shells /bin/cp -f /etc/services unpacked-rootfs/etc/services ############################################################ # /etc/init.d/rcS cd ${PROJDIR} echo '#!/bin/sh' > unpacked-rootfs/etc/init.d/rcS ; echo '' >> unpacked-rootfs/etc/init.d/rcS echo 'mount -a' >> unpacked-rootfs/etc/init.d/rcS ; echo 'mount -n -o remount ro /' >> unpacked-rootfs/etc/init.d/rcS echo 'echo /sbin/mdev > /proc/sys/kernel/hotplug' >> unpacked-rootfs/etc/init.d/rcS ; echo 'mdev -s' >> unpacked-rootfs/etc/init.d/rcS ; echo '' >> unpacked-rootfs/etc/init.d/rcS echo 'hostname -F /etc/hostname' >> unpacked-rootfs/etc/init.d/rcS echo 'ip addr add 127.0.0.1/8 dev lo' >> unpacked-rootfs/etc/init.d/rcS ; echo 'ip link set lo up' >> unpacked-rootfs/etc/init.d/rcS echo '' >> unpacked-rootfs/etc/init.d/rcS echo '[ -x /etc/rc.d/rc.conf ] && . /etc/rc.d/rc.conf' >> unpacked-rootfs/etc/init.d/rcS ; echo '' >> unpacked-rootfs/etc/init.d/rcS echo 'mode=${1:-start}' >> unpacked-rootfs/etc/init.d/rcS echo 'if [ $mode = "start" ]; then services=$cfg_services ; else services=$cfg_services_r ; fi' >> unpacked-rootfs/etc/init.d/rcS echo 'cfg_services=${2:-$services}' >> unpacked-rootfs/etc/init.d/rcS echo '' >> unpacked-rootfs/etc/init.d/rcS echo 'for i in $cfg_services ; do [ -x /etc/rc.d/init.d/$i ] && /etc/rc.d/init.d/$i $mode ; done' >> unpacked-rootfs/etc/init.d/rcS echo '[ $# -ge 2 ] && exit 0' >> unpacked-rootfs/etc/init.d/rcS ; echo '' >> unpacked-rootfs/etc/init.d/rcS echo 'echo 8 > /proc/sys/kernel/printk' >> unpacked-rootfs/etc/init.d/rcS echo '[ -x /etc/rc.local ] && /etc/rc.local $mode' >> unpacked-rootfs/etc/init.d/rcS ; echo '' >> unpacked-rootfs/etc/init.d/rcS chmod 777 unpacked-rootfs/etc/init.d/rcS ############################################################ # /etc/inittab cd ${PROJDIR} echo '::sysinit:/etc/init.d/rcS' > unpacked-rootfs/etc/inittab ; echo '' >> unpacked-rootfs/etc/inittab echo '::restart:/sbin/init' >> unpacked-rootfs/etc/inittab ; echo '' >> unpacked-rootfs/etc/inittab echo '::ctrlaltdel:/sbin/reboot' >> unpacked-rootfs/etc/inittab echo '::shutdown:/etc/shutdown' >> unpacked-rootfs/etc/inittab ; echo '' >> unpacked-rootfs/etc/inittab echo "${TARGET_SERIAL_CONSOL}::respawn:-/bin/sh" >> unpacked-rootfs/etc/inittab ; echo '' >> unpacked-rootfs/etc/inittab echo "#${TARGET_SERIAL_CONSOL}::respawn:/bin/start_getty 115200 ${TARGET_SERIAL_CONSOL} vt102" >> unpacked-rootfs/etc/inittab ; echo '' >> unpacked-rootfs/etc/inittab echo 'tty1::respawn:/sbin/getty 38400 tty1' >> ${PROJDIR}/unpacked-rootfs/etc/inittab ; echo '' >> ${PROJDIR}/unpacked-rootfs/etc/inittab sudo rm -rf ${PROJDIR}/unpacked-rootfs/etc/init.d/rc.S ; sudo rm -rf ${PROJDIR}/unpacked-rootfs/etc/init.d/announce sudo rm -rf ${PROJDIR}/unpacked-rootfs/etc/init.d/halt ; sudo rm -rf ${PROJDIR}/unpacked-rootfs/etc/init.d/reboot ############################################################ # /etc/fstab /etc/rc.local cd ${PROJDIR} cat > ${PROJDIR}/unpacked-rootfs/etc/fstab << "EOF" none /proc proc defaults 0 0 none /sys sysfs defaults 0 0 tmpfs /tmp tmpfs defaults 0 0 tmpfs /dev tmpfs defaults 0 0 EOF cat > ${PROJDIR}/unpacked-rootfs/etc/rc.local << "EOF" #!/bin/bash source /etc/rc.d/rc.conf #/bin/cp /usr/bin/.picodrive /tmp -rf #export HOME=/tmp #cd /usr/bin #./PicoDrive Sonic.md & # cat /dev/urandom | aplay -f S8 -r 44100 -c 2 & EOF ############################################################ # /etc/rc.d/rc.conf /etc/profile /etc/shutdown /init cd ${PROJDIR} mkdir -p ${PROJDIR}/unpacked-rootfs/etc/rc.d cat > ${PROJDIR}/unpacked-rootfs/etc/rc.d/rc.conf << "EOF" cfg_services="mount-proc-sys udev hostname depmod modules filesystems inetd " cfg_services_r=" inetd filesystems modules depmod hostname udev mount-proc-sys" export HOSTNAME=`cat /etc/hostname` export TMPFS=tmpfs export LD_LIBRARY_PATH=/usr/lib:/lib ; export SDL_NOMOUSE=1 ; export ALSA_CONFIG_PATH=/usr/share/alsa/alsa.conf EOF cat > ${PROJDIR}/unpacked-rootfs/etc/profile << "EOF" source /etc/rc.d/rc.conf hostname -F /etc/hostname export PS1='\u@\h:\w$ ' [ `id -u` -eq 0 ] && export PS1='\u@\h:\w# ' [ `id -u` -eq 0 ] && export HOME=/root [ `id -u` -eq 0 ] && cd /root export TZ=Asia/Taipei export LC_ALL=C echo -ne "\33[9;0]" > /dev/tty0 echo -ne "\033[?25l" > /dev/tty0 EOF cat > ${PROJDIR}/unpacked-rootfs/etc/shutdown << "EOF" #!/bin/sh true EOF cat > ${PROJDIR}/unpacked-rootfs/init << "EOF" #!/bin/sh /bin/mount proc /proc -t proc /bin/mount sysfs /sys -t sysfs echo /sbin/mdev > /proc/sys/kernel/hotplug mdev -s exec switch_root /mnt /sbin/init EOF chmod 777 unpacked-rootfs/etc/rc.d/rc.conf unpacked-rootfs/etc/profile unpacked-rootfs/etc/shutdown unpacked-rootfs/init ${PROJDIR}/unpacked-rootfs/etc/rc.local ############################################################ # /etc/asound.conf /usr/share/alsa /etc/ld.so.conf cd ${PROJDIR} mkdir -p ${PROJDIR}/unpacked-rootfs/usr/share/alsa sudo /bin/cp -Rpf /usr/arm-linux-gnueabi/share/alsa/* ${PROJDIR}/unpacked-rootfs/usr/share/alsa/ ; sudo chown `whoami`.`whoami` -R ${PROJDIR}/unpacked-rootfs/usr/share/alsa/ cat > ${PROJDIR}/unpacked-rootfs/etc/asound.conf << "EOF" pcm.!default { type hw card 0 } ctl.!default { type hw card 0 } EOF cat > ${PROJDIR}/unpacked-rootfs/etc/ld.so.conf << "EOF" # Begin /etc/ld.so.conf /usr/lib /lib EOF ############################################################ # rootfs.img cd ${PROJDIR} sudo mksquashfs unpacked-rootfs rootfs.img /bin/mv -f rootfs.img ${PROJDIR}/out/ sudo chown `whoami`.`whoami` -R ${PROJDIR}/out ############################################################ # system.bin [ ! -f out/u-boot.bin ] && exit 0 [ ! -f out/mk3-evb.dtb ] && exit 0 [ ! -f out/uImage ] && exit 0 [ ! -f out/rootfs.img ] && exit 0 sudo /bin/rm -rf out/system.bin dd if=/dev/zero of=out/system.bin bs=1 count=4M dd if=out/u-boot.bin of=out/system.bin conv=notrunc bs=1 dd if=out/mk3-evb.dtb of=out/system.bin conv=notrunc bs=1 seek=256K dd if=out/uImage of=out/system.bin conv=notrunc bs=1 seek=320K dd if=out/rootfs.img of=out/system.bin conv=notrunc bs=1 seek=2176K
- Runtime 執行的結果如下:
-
U-Boot 2017.03-g29d8d9e (Dec 24 2018 - 13:48:30 +0800) DRAM: 16 MiB WARNING: Caches not enabled MMC: Using default environment In: serial Out: serial Err: serial type=30 1 Hit any key to stop autoboot: 0 ## Booting kernel from Legacy Image at 08040000 ... Image Name: Linux-4.10.0+ Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 1825232 Bytes = 1.7 MiB Load Address: 18000000 Entry Point: 18000000 Verifying Checksum ... OK ## Flattened Device Tree blob at 08030000 Booting using the fdt blob at 0x8030000 Loading Kernel Image ... OK Loading Device Tree to 18dc3000, end 18dc6a3e ... OK Starting kernel ... Uncompressing Linux... done, booting the kernel. Booting Linux on physical CPU 0x0 Linux version 4.10.0+ (jasonc@bebop) (gcc version 5.4.0 20160609 (Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.9) ) #45 Mon Dec 24 12:01:33 CST 2018 CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=0005317f CPU: VIVT data cache, VIVT instruction cache OF: fdt:Machine model: DMC MK3 Development Kit bootconsole [earlycon0] enabled Memory policy: Data cache writeback Built 1 zonelists in Zone order, mobility grouping off. Total pages: 4064 Kernel command line: earlyprintk console=ttyMK0,115200n8 mem=16M init=/sbin/init root=/dev/mtdblock0 PID hash table entries: 64 (order: -4, 256 bytes) Dentry cache hash table entries: 2048 (order: 1, 8192 bytes) Inode-cache hash table entries: 1024 (order: 0, 4096 bytes) Memory: 9052K/16384K available (3072K kernel code, 88K rwdata, 520K rodata, 1024K init, 86K bss, 7332K reserved, 0K cma-reserved, 0K highmem) Virtual kernel memory layout: vector : 0xffff0000 - 0xffff1000 ( 4 kB) fixmap : 0xffc00000 - 0xfff00000 (3072 kB) vmalloc : 0xc1800000 - 0xff800000 ( 992 MB) lowmem : 0xc0000000 - 0xc1000000 ( 16 MB) pkmap : 0xbfe00000 - 0xc0000000 ( 2 MB) modules : 0xbf000000 - 0xbfe00000 ( 14 MB) .text : 0xc0008000 - 0xc0400000 (4064 kB) .init : 0xc0500000 - 0xc0600000 (1024 kB) .data : 0xc0600000 - 0xc0616080 ( 89 kB) .bss : 0xc0616080 - 0xc062b8ec ( 87 kB) NR_IRQS:16 nr_irqs:16 16 clocksource: mk_clocksource: mask: 0xffff max_cycles: 0xffff, max_idle_ns: 28443011 ns sched_clock: 32 bits at 1kHz, resolution 1000000ns, wraps every 2147483647500000ns Console: colour dummy device 80x30 Calibrating delay loop... 118.78 BogoMIPS (lpj=59392) pid_max: default: 32768 minimum: 301 Mount-cache hash table entries: 1024 (order: 0, 4096 bytes) Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes) CPU: Testing write buffer coherency: ok Setting up static identity map for 0x18100000 - 0x18100058 VFP support v0.3: not present clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 1911260446275000 ns futex hash table entries: 256 (order: -1, 3072 bytes) pinctrl core: initialized pinctrl subsystem DMA: preallocated 256 KiB pool for atomic coherent allocations Advanced Linux Sound Architecture Driver Initialized. clocksource: Switched to clocksource mk_clocksource mk-fb 18c00000.framebuffer: framebuffer at 0x18c00000, 0x25800 bytes, mapped to 0xc0c00000 mk-fb 18c00000.framebuffer: format=b5g6r5, mode=320x240x16, linelength=640 Console: switching to colour frame buffer device 40x30 mk-fb 18c00000.framebuffer: fb0: mkfb registered! workingset: timestamp_bits=30 max_order=12 bucket_order=0 squashfs: version 4.0 (2009/01/31) Phillip Lougher Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253) io scheduler noop registered io scheduler deadline registered io scheduler cfq registered (default) pinctrl-mk 10000100.pinctrl: Pin controller initialized 10000500.uart: ttyMK0 at MMIO 0x10000500 (irq = 19, base_baud = 0) is a MK UART-1 console [ttyMK0] enabled console [ttyMK0] enabled bootconsole [earlycon0] disabled bootconsole [earlycon0] disabled brd: module loaded (drivers/misc/atgames/dmc_keypad.c 673) dmc_keypad_init() input: dmc-keys as /devices/virtual/input/input0 random: fast init done 1 ofpart partitions found on MTD device 8000000.nor Creating 1 MTD partitions on "8000000.nor": 0x000000200000-0x000000800000 : "fs" mk-pcm 4000080.audio0: can't request region for resource [mem 0x04000080-0x04000083] mk-pcm 4000080.audio0: snd-soc-dummy-dai <-> 4000080.audio0 mapping ok ALSA device list: #0: Card 4000080.audio0 VFS: Mounted root (squashfs filesystem) readonly on device 31:0. Freeing unused kernel memory: 1024K root@mk3:~# random: crng init done root@mk3:~#
- ALSA player `aplay` 測試結果如下:
-
root@mk3:~# aplay -Dprimary startup.wav Playing WAVE 'startup.wav' : Signed 16 bit Little Endian, Rate 22050 Hz, Stereo aplay: set_params:1339: Sample format non available Available formats: - S8 root@mk3:~#
- SDL 測試結果如下:
-
root@mk3:~# SDL_NOMOUSE=1 time testwin -width 320 -height 240 -bpp 16 Set 320x240x16 mode (video surface located in system memory) Loading picture: sample.bmp testwin: setting colors (image surface located in system memory) testwin: moving image testwin: fading out... testwin: fading in... testwin: fading over Time: 151 milliseconds real 0m 1.93s user 0m 0.06s sys 0m 0.67s root@mk3:~#
- https://www.cnblogs.com/helloworldtoyou/p/6169678.html
- https://www.cnblogs.com/aaronLinux/
- https://docs.ubuntu.com/core/en/stacks/audio/alsa-utils/docs/reference/available-utilities
- https://github.com/maximeh/buildroot
- http://silverfoxkkk.pixnet.net/blog/post/45000257-lddp%3A%E5%8D%81%E4%B8%80%E3%80%81%E4%B8%AD%E6%96%B7
- https://www.alsa-project.org/main/index.php/Asoundrc
- http://www.linuxfromscratch.org/lfs/view/development/chapter06/glibc.html
- http://www.mauvecloud.net/sounds/index.html
- http://www.treewalker.org/opendingux/
- buildroot
- 1. base config
source <PATH_TO_ROCKCHIP_SDK>/buildroot/build/envsetup.sh rockchip_rk3328 - 2. sdk env
SDK_BASE=<PATH_TO_ROCKCHIP_SDK>/buildroot/output/rockchip_rk3328/host
export PATH=$PATH:$SDK_BASE/bin/
export CC="aarch64-linux-gcc --sysroot=$SDK_BASE/aarch64-buildroot-linux-gnu/sysroot"
export PKG_CONFIG_PATH=$SDK_BASE/aarch64-buildroot-linux-gnu/sysroot/usr/lib/pkgconfig
export SDKTARGETSYSROOT=$SDK_BASE/aarch64-buildroot-linux-gnu/sysroot - 3. binary files
put data to board/rockchip/rk3328/fs-overlay-64, buildroot will copy to image -
Secondary Boot Loader for Nand-Controller to load U-boot
- loader.c
-
#include "loader.h" #define CONFIG_PLL 264000000 #define PINS_SHARING_BETWEEN_EXTERNAL_MEMORIES 0 #define PAGES_PER_BLOCK 64 #define SUCCESS (0) #define FAIL (1) typedef unsigned int uint32_t; typedef unsigned char uint8_t; typedef unsigned short uint16_t; #define u32 unsigned int #define u16 unsigned short #define u8 unsigned char #if (0 == PINS_SHARING_BETWEEN_EXTERNAL_MEMORIES) static u8 data[2048] = {0}; #else #endif static int tick = 100; #define delay(x) \ for (tick = 0; tick < x ; t++) static inline void writel(u32 val, void *addr) { *(volatile u32 *)addr = val; } static inline u32 readl(void *addr) { u32 val = *(volatile u32 *)addr; return val; } static inline void writew(u16 val, void *addr) { *(volatile u16 *)addr = val; } static inline u16 readw(void *addr) { u16 val = *(volatile u16 *)addr; return val; } static void nandWaitRdy(void) { while((pNandCfg3 & NAND_RDY_MASK) != NAND_RDY_MASK); } static void nandReset(void) { pNandCmd = CMMD(NAND_CMD_RESET);//send command 0x00 nandWaitRdy(); } static void nandStatusRead(uint8_t *pu8Status) { pNandCmd = CMMD(NAND_CMD_STATUS_READ);//send command 0x70 *pu8Status = pNandStatus; } static void nandInit(uint8_t u8Ratio) { pGPIOModeC &= 0xC03F; pGPIOModeC |= 0x0280; //config pc3,4,5,6 to nand mode pGlobalCtrl2 |= NAND_FORCE_MASK; CLK_CTR |= NAND_CLK_EN_MASK; pNandCfg |= NAND_ECC_EN_MASK; pNandCfg |= NAND_AUTO_READ_MASK; pNandCfg |= u8Ratio; nandReset(); } static void waitECCDone(void) { while((pNandCfg4 & NAND_ECC_DONE_MASK) != NAND_ECC_DONE_MASK); } static uint8_t checkECC(void) { if((pNandCfg & NAND_ECC_ERR_MASK) == NAND_ECC_ERR_MASK) return FAIL; return SUCCESS; } static uint8_t nandPageRead(uint32_t u32pageIndex, uint8_t *pu8Dst, uint32_t u32Size) { uint16_t u16PageSize = VALID_DATA_PER_PAGE; uint16_t u16SizePerRead = VALID_SIZE_PER_OPERATE; uint16_t i, j, k=0; volatile uint8_t *pvu8Data; uint8_t u8DummyByte; pNandCmd = CMMD(NAND_CMD_READ1);//send command 0x00 pNandCmd = ADDR(0x00); pNandCmd = ADDR(0x00); pNandCmd = ADDR(u32pageIndex&0xFF); pNandCmd = ADDR(u32pageIndex>>8&0xFF); pNandCmd = CMMD(NAND_CMD_READ2);//send command 0x30 nandWaitRdy(); for(i=0; i<u16PageSize; i+=u16SizePerRead) { pvu8Data = (volatile uint8_t*)0x11000D00; waitECCDone(); if(FAIL == checkECC()) return FAIL; for(j=0; j<256; j++) { if(j<u16SizePerRead && k<u32Size) { *pu8Dst++=*pvu8Data++; k++; continue; } u8DummyByte=*pvu8Data++; } pNandCmd = 0x300; } while(!(pNandStatus & NAND_STATUS_RDY_MASK)); return SUCCESS; } static void pll_set_rate(void) { unsigned short t = (CONFIG_PLL/1024/1000); writel((2), (void *)0x04000880); //set N=2, OD=0 writel((CONFIG_PLL/2/1000000), (void *)0x04000884); writel(0x3, (void *)0x04000888); //reset PLL writel(0x0, (void *)0x04000888); delay(100); writew(0x9, (void *)0x10000006);//TV encoder writew(0x3, (void *)0x10000002);//VDP writew(0x2, (void *)0x1000000a);//SDRAM writew(0x2, (void *)0x1000000c);//HCLK writew(33, (void *)0x1000000E); writew(0xb, (void *)0x10000010); //for hdmi divider 264/11=24(target 24) writew(t, (void *)0x10000012);//TIMER writew(0x8, (void *)0x10000008);//APB writew(0x1b, (void *)0x04000805); writew(0x27ba, (void *)0x10000000); delay(0x4000); // Enable DTCM asm volatile("mcr p15, 0, %0, c9, c1, 0" : : "r"(0x700001)); delay(0x4000); } // 0x18000000-0x1FFFFFFF // 18010000 int main(int argc, char *argv[]) { volatile u8 *start = (u8 *)0x18010000; int page = 0; int i; pll_set_rate(); nandInit(4); for (page = 0; page < 2 * PAGES_PER_BLOCK; page++) { #if (0 == PINS_SHARING_BETWEEN_EXTERNAL_MEMORIES) pGlobalCtrl2 |= NAND_FORCE_MASK; nandPageRead(page, (void *)data, sizeof(data)); for (i = 0; i < sizeof(data); i++) *(start + (page * sizeof(data)) + i) = data[i]; pGlobalCtrl2 &= ~NAND_FORCE_MASK; #else nandPageRead(page, (start + page * 2048), 2048); #endif } asm volatile("ldr r0, =0x18010000"); asm volatile("orr ip, ip, r0"); asm volatile("mov pc, lr"); return 0; }
- loader.h
-
#ifndef _LOADER_H_ #define _LOADER_H_ #define CMMD(c) (c|NAND_CMD_CLE) #define ADDR(a) (a|NAND_CMD_ALE) #define NAND_CMD_CLE 0x0100 #define NAND_CMD_ALE 0x0200 #define NAND_CMD_RST_WR 0x0400 #define NAND_CMD_RESET 0xFF #define NAND_CMD_STATUS_READ 0x70 #define NAND_CMD_READ1 0x00 #define NAND_CMD_READ2 0x30 #define NAND_CMD_WRITE1 0x80 #define NAND_CMD_WRITE2 0x10 #define NAND_CMD_BLOCK_ERASE1 0x60 #define NAND_CMD_BLOCK_ERASE2 0xD0 #define NAND_RDY_MASK 0x02 #define NAND_ECC_DONE_MASK 0x02 #define NAND_ECC_ERR_MASK 0x3000 #define NAND_FORCE_MASK (0x01<<2) #define NAND_CLK_EN_MASK (0x01<<12) #define NAND_ECC_EN_MASK (0x01<<5) #define NAND_AUTO_READ_MASK (0x01<<6) #define NAND_STATUS_ERR_MASK (0x01<<0) #define NAND_STATUS_RDY_MASK (0x01<<6) #define VALID_DATA_PER_PAGE (247*8) #define VALID_SIZE_PER_OPERATE 247 /************************************************************************** * D A T A T Y P E S * **************************************************************************/ /* NAND registers */ #define pGPIOModeC (*(volatile unsigned short *)0x10000114) #define pGlobalCtrl2 (*(volatile unsigned short *)0x04000820) #define CLK_BASE_ADDR 0x10000000 #define CLK_CTR *((volatile unsigned short*)CLK_BASE_ADDR) #define NAND_READ_BUFF_ADDR 0x11000D00 #define NAND_WRITE_ADDR 0x11000C08 #define NAND_CTR_STATE_REG 0x11000c28 #define NAND_CTR_ADDR_REG 0x11000c00 #define SYS_SCTR_ADDR 0x04000808 #define CLK_GEN_CTR 0x10000000 #define pNandCmd (*(volatile unsigned short*)0x11000c00) #define pNandCfg (*(volatile unsigned short*)0x11000c04) #define pNandCfg1 (*(volatile unsigned short*)0x11000c10) #define pNandWr (*(volatile unsigned short*)0x11000c08) #define pNandCfg2 (*(volatile unsigned short*)0x11000c0c) #define pNandCfg3 (*(volatile unsigned char*)0x11000C28) #define pNandCfg4 (*(volatile unsigned char*)0x11000C2C) #define pNandRdBuffBase (*(volatile unsigned char*)0x11000D00) #define pNandStatus (*(volatile unsigned char*)0x11000C0C) #define NAND_BASE_ADDRESS NAND_CTR_ADDR_REG #endif
- loader.lds
-
MEMORY { ROM (rx) : ORIGIN = 0x03000000 LENGTH = 16K } ENTRY(_start) SECTIONS { .vectors : { *(.isr_vector) } > ROM . = ALIGN(4); .text : { *(.text*) *(.rodata*) } > ROM .data : { *(.data*) *(COMMON) } > ROM .bss : { . = ALIGN(4); *(.bss*) } > ROM }
- Makefile
-
CROSS = arm-linux-gnueabi- LD = $(CROSS)ld AS = $(CROSS)as -EL CC = $(CROSS)gcc -g CXX = $(CROSS)g++ -g OBJCOPY = $(CROSS)objcopy OBJDUMP = $(CROSS)objdump S_FLAGS = -Wall -O0 -g C_FLAGS = -c -O0 -g -Wno-int-conversion H_FILE = $(wildcard *.h) S_SRCS = $(wildcard *.s) #S_OBJS = $(patsubst %s, %o, $(S_SRCS)) S_SRCS += $(wildcard *.c) S_OBJS = stackSet.o loader.o TARGET = loader .PHONY: all clean all: $(S_OBJS) $(LD) -T loader.lds $^ -o $(TARGET).elf $(OBJCOPY) -O binary -S $(TARGET).elf $(TARGET).bin $(OBJDUMP) -DS $(TARGET).elf > $(TARGET).dasm %o: %.s $(H_FILE) $(AS) $(S_FLAGS) -o $@ $< %o: %.c $(H_FILE) $(CC) $(C_FLAGS) -o $@ $< clean: rm -f *.bin *.o *.elf *.dasm
-
- Makefile
-
.global _start _start: mov r0, #0xd3 msr cpsr_fc, r0 ldr sp, =0x03003fe0 mov lr, #0x0 msr spsr_fc, lr mov r0, #0xd2 msr cpsr_fc, r0 ldr sp, =0x03003fa0 mov lr, #0x0 msr spsr_fc, lr mov r0, #0x1f msr cpsr_fc, r0 ldr sp, =0x03003f00 b main
-
-
-
留言列表