diff -ruN genkernel-3.4.10.903/gen_cmdline.sh genkernel-3.4.10.903-r1/gen_cmdline.sh --- genkernel-3.4.10.903/gen_cmdline.sh 2009-01-06 01:22:10.000000000 +0300 +++ genkernel-3.4.10.903-r1/gen_cmdline.sh 2009-01-14 03:09:33.000000000 +0300 @@ -524,6 +524,10 @@ --config=*) print_info 2 "CMD_GK_CONFIG: `parse_opt "$*"`" ;; + --v86d) + CMD_V86D=1 + print_info 2 "CMD_V86D: ${CMD_V86D}" + ;; all) BUILD_KERNEL=1 BUILD_MODULES=1 diff -ruN genkernel-3.4.10.903/gen_compile.sh genkernel-3.4.10.903-r1/gen_compile.sh --- genkernel-3.4.10.903/gen_compile.sh 2009-01-06 01:22:10.000000000 +0300 +++ genkernel-3.4.10.903-r1/gen_compile.sh 2009-01-14 03:09:33.000000000 +0300 @@ -611,3 +611,97 @@ rm -rf "${UNIONFS_FUSE_DIR}" > /dev/null fi } + +compile_v86d() { + if [ ! -f "${V86D_BINCACHE}" ] + then + local myARCH="${ARCH}" myABI="${ABI}" + + if [ -z "$(grep V86D ${KERNEL_DIR}/include/linux/connector.h)" ]; then + gen_die "You a kernel tree patched with uvesafb for v86d. Kernel not patched with uvesafb." + fi + + case ${ARCH} in + amd64) a=x86_64 ;; + mips) gen_die 'TODO: Use the $ABI' ;; + x86) a=i386 ;; + *) a=${ARCH} ;; + esac + KLIBCARCH=${a} + + case ${ARCH} in + # Merged arches + x86|x86_64) a=x86 ;; + ppc*) a=powerpc ;; + # Non-merged + alpha|arm|ia64|m68k|mips|sh|sparc*) a=${ARCH} ;; + *) gen_die "TODO: Update the code for your asm-ARCH symlink" ;; + esac + KLIBCASMARCH=${a} + + unset ABI ARCH KBUILD_OUTPUT + + # klibc + print_info 1 'v86d: >> Unpacking klibc...' + [ ! -f "${KLIBC_SRCTAR}" ] && + gen_die "Could not find klibc source tarball: ${KLIBC_SRCTAR}. Please place it there, or place another version, changing /etc/genkernel.conf as necessary!" + cd "${TEMP}" + rm -rf "${KLIBC_DIR}" + tar -xpf "${KLIBC_SRCTAR}" + [ ! -d "${KLIBC_DIR}" ] && + gen_die "klibc directory ${KLIBC_DIR} invalid" + cd "${KLIBC_DIR}" + # point klibc to kernel sourse + ln -snf "${KERNEL_DIR}" linux + apply_patches klibc ${KLIBC_VER} + # compile klibc + print_info 1 'v86d: >> Compiling klibc...' + ${UTILS_MAKE} \ + EXTRA_KLIBCAFLAGS="-Wa,--noexecstack" \ + EXTRA_KLIBCLDFLAGS="-z,noexecstack" \ + HOSTCC="${UTILS_CC}" CC="${UTILS_CC}" \ + LD="${UTILS_LD}" AS="${UTILS_AS}" \ + INSTALLDIR="${TEMP}/klibc-install" \ + KLIBCARCH=${KLIBCARCH} \ + KLIBCASMARCH=${KLIBCASMARCH} \ + SHLIBDIR="${TEMP}/klibc-install/lib" \ + libdir="${TEMP}/klibc-install/lib" \ + bindir="${TEMP}/klibc-install/bin" \ + mandir="${TEMP}/klibc-install/usr/share/man" install >> ${LOGFILE} 2>&1 || gen_die "Failed to compile klibc" + linkname="${TEMP}/klibc-install/include/asm" + if [ -L "${linkname}" ] && [ ! -e "${linkname}" ]; then + ln -snf asm-${KLIBCASMARCH} "${linkname}" + fi + + # v86d + print_info 1 'v86d: >> Unpacking v86d...' + [ ! -f "${V86D_SRCTAR}" ] && + gen_die "Could not find v86d source tarball: ${V86D_SRCTAR}. Please place it there, or place another version, changing /etc/genkernel.conf as necessary!" + cd "${TEMP}" + rm -rf "${V86D_DIR}" + tar -xpf "${V86D_SRCTAR}" + [ ! -d "${V86D_DIR}" ] && + gen_die "v86d directory ${V86D_DIR} invalid" + cd "${V86D_DIR}" + apply_patches v86d ${V86D_VER} + print_info 1 'v86d: >> Configuring...' + ./configure --with-klibc --with-x86emu >> ${LOGFILE} 2>&1 || + gen_die 'Configuring v86d failed!' + print_info 1 'v86d: >> Compiling...' + ${UTILS_MAKE} KDIR="${KERNEL_DIR}" CC="${TEMP}/klibc-install/bin/klcc" >> ${LOGFILE} 2>&1 || + gen_die 'Compiling v86d failed!' + print_info 1 'v86d: >> Copying to cache...' + [ -f "v86d" ] || + gen_die 'v86d executable does not exist!' + strip "v86d" || + gen_die 'Could not strip v86d binary!' + bzip2 "v86d" || + gen_die 'bzip2 compression of v86d failed!' + mv "v86d.bz2" "${V86D_BINCACHE}" || + gen_die 'Could not copy the v86d binary to the package directory, does the directory exist?' + cd .. + rm -rf "${V86D_DIR}" + + ARCH="${myARCH}" ABI="${myABI}" + fi +} diff -ruN genkernel-3.4.10.903/gen_determineargs.sh genkernel-3.4.10.903-r1/gen_determineargs.sh --- genkernel-3.4.10.903/gen_determineargs.sh 2009-01-06 01:22:10.000000000 +0300 +++ genkernel-3.4.10.903-r1/gen_determineargs.sh 2009-01-14 03:09:33.000000000 +0300 @@ -117,6 +117,7 @@ set_config_with_override 1 KEYMAP CMD_KEYMAP "yes" set_config_with_override 1 DOKEYMAPAUTO CMD_DOKEYMAPAUTO set_config_with_override 2 BUSYBOX_CONFIG CMD_BUSYBOX_CONFIG + set_config_with_override 1 V86D CMD_V86D BOOTDIR=`arch_replace "${BOOTDIR}"` BOOTDIR=${BOOTDIR%/} # Remove any trailing slash @@ -129,6 +130,7 @@ BLKID_BINCACHE=`cache_replace "${BLKID_BINCACHE}"` FUSE_BINCACHE=`cache_replace "${FUSE_BINCACHE}"` UNIONFS_FUSE_BINCACHE=`cache_replace "${UNIONFS_FUSE_BINCACHE}"` + V86D_BINCACHE=`cache_replace "${V86D_BINCACHE}"` DEFAULT_KERNEL_CONFIG=`arch_replace "${DEFAULT_KERNEL_CONFIG}"` BUSYBOX_CONFIG=`arch_replace "${BUSYBOX_CONFIG}"` @@ -139,6 +141,7 @@ BLKID_BINCACHE=`arch_replace "${BLKID_BINCACHE}"` FUSE_BINCACHE=`arch_replace "${FUSE_BINCACHE}"` UNIONFS_FUSE_BINCACHE=`arch_replace "${UNIONFS_FUSE_BINCACHE}"` + V86D_BINCACHE=`arch_replace "${V86D_BINCACHE}"` if [ -n "${CMD_BOOTLOADER}" ] then diff -ruN genkernel-3.4.10.903/gen_initramfs.sh genkernel-3.4.10.903-r1/gen_initramfs.sh --- genkernel-3.4.10.903/gen_initramfs.sh 2009-01-06 01:22:10.000000000 +0300 +++ genkernel-3.4.10.903-r1/gen_initramfs.sh 2009-01-14 03:09:33.000000000 +0300 @@ -29,6 +29,8 @@ mknod -m 660 console c 5 1 mknod -m 660 null c 1 3 mknod -m 600 tty1 c 4 1 + mknod -m 666 zero c 1 5 + mknod -m 600 mem c 1 1 date '+%Y%m%d' > ${TEMP}/initramfs-base-temp/etc/build_date @@ -107,6 +109,21 @@ rm -rf "${TEMP}/initramfs-unionfs-fuse-temp" > /dev/null } +append_v86d(){ + if [ -d "${TEMP}/initramfs-v86d-temp" ] + then + rm -r "${TEMP}/initramfs-v86d-temp/" + fi + cd ${TEMP} + mkdir -p "${TEMP}/initramfs-v86d-temp/sbin/" + bzip2 -dc "${V86D_BINCACHE}" > "${TEMP}/initramfs-v86d-temp/sbin/v86d" || + gen_die "Could not extract v86d binary cache!"; + chmod a+x "${TEMP}/initramfs-v86d-temp/sbin/v86d" + cd "${TEMP}/initramfs-v86d-temp/" + find . -print | cpio ${CPIO_ARGS} --append -F "${CPIO}" + rm -rf "${TEMP}/initramfs-v86d-temp" > /dev/null +} + #append_suspend(){ # if [ -d "${TEMP}/initramfs-suspend-temp" ]; # then @@ -548,6 +565,7 @@ append_data 'unionfs_fuse' "${UNIONFS}" append_data 'splash' "${SPLASH}" + append_data 'v86d' "${V86D}" if isTrue "${FIRMWARE}" && [ -n "${FIRMWARE_DIR}" ] then diff -ruN genkernel-3.4.10.903/genkernel genkernel-3.4.10.903-r1/genkernel --- genkernel-3.4.10.903/genkernel 2009-01-06 01:22:10.000000000 +0300 +++ genkernel-3.4.10.903-r1/genkernel 2009-01-14 03:09:33.000000000 +0300 @@ -296,6 +296,7 @@ if [ "${BUILD_RAMDISK}" -eq '1' ] then [ "${DISKLABEL}" -eq '1' ] && compile_e2fsprogs + [ "${V86D}" -eq '1' ] && compile_v86d if [ "${BUSYBOX}" -eq '1' ] then diff -ruN genkernel-3.4.10.903/genkernel.conf genkernel-3.4.10.903-r1/genkernel.conf --- genkernel-3.4.10.903/genkernel.conf 2009-01-06 01:22:05.000000000 +0300 +++ genkernel-3.4.10.903-r1/genkernel.conf 2009-01-14 03:09:33.000000000 +0300 @@ -168,3 +168,13 @@ UNIONFS_FUSE_DIR="unionfs-fuse-${UNIONFS_FUSE_VER}" UNIONFS_FUSE_SRCTAR="${DISTDIR}/unionfs-fuse-${UNIONFS_FUSE_VER}.tar.bz2" UNIONFS_FUSE_BINCACHE="%%CACHE%%/unionfs-fuse-${UNIONFS_FUSE_VER}-%%ARCH%%.bz2" + +KLIBC_VER="VERSION_KLIBC" +KLIBC_SRCTAR="${DISTDIR}/klibc-${KLIBC_VER}.tar.bz2" +KLIBC_DIR="klibc-${KLIBC_VER}" + +V86D_VER="VERSION_V86D" +V86D_SRCTAR="${DISTDIR}/v86d-${V86D_VER}.tar.bz2" +V86D_DIR="v86d-${V86D_VER}" +V86D_BINCACHE="%%CACHE%%/v86d-${V86D_VER}-%%ARCH%%.bz2" +