#@TYPE: Machine #@NAME: Linksys NSLU2 #@DESCRIPTION: Machine configuration for the Linksys NSLU2 product #------------------------------------------------------------------------------- # INPUTS #------------------------------------------------------------------------------- # conf/${DISTRO}.conf is included after this file and should be used to modify # variables identified as 'INPUTS' to the required values for the DISTRO, this # will cause the board specific settings (which depend for the most part on the # exact CPU used) to be set correctly within this file. The results are the # variables identifies here as 'OUTPUTS' # #variable = "default" # # description ARCH_BYTE_SEX = "be" # "be" "le" # The memory byte sex and (on correctly implemented hardware - the NSLU2 is # correct) the byte sex of the buses within the system. 'be' (big-endian) # means that the first byte is the most significant byte on a bus, 'le' # (little-endian) means that the first byte is the least significant byte. ARM_INSTRUCTION_SET = "arm" # "arm" "thumb" # The instruction set the compiler should use when generating application # code. The kernel is always compiled with arm code at present. arm code # is the original 32 bit ARM instruction set, thumb code is the 16 bit # encoded RISC sub-set. Thumb code is smaller (maybe 70% of the ARM size) # but requires more instructions (140% for 70% smaller code) so may be # slower. THUMB_INTERWORK = "yes" # "yes" "no" # Whether to compile with code to allow interworking between the two # instruction sets. This allows thumb code to be executed on a primarily # arm system and vice versa. It is strongly recommended that DISTROs not # turn this off - the actual cost is very small. DISTRO_BASE = "" # "" ":" # If given this must be the name of a 'distro' to add to the bitbake OVERRIDES # after ${DISTRO}, this allows different distros to share a common base of # overrides. The value given must include a leading ':' or chaos will result. N2K_SUFFIX = "nslu2${ARCH_BYTE_SEX}" # # Kernel suffix - 'nslu2be' or 'nslu2le' for a truely generic image, controls # the suffix on the name of the generated zImage, override in the DISTRO # configuration if patches or defconfig are changed for the DISTRO. #------------------------------------------------------------------------------- # OUTPUTS #------------------------------------------------------------------------------- #OVERRIDES # The standard ':' separated list of overrides used by bitbake - see the # basic setting in bitbake.conf. This list is based on that used for the # standard setting however :, :thumb and :thumb-interwork will be # inserted at appropriate points if a base distro, default use of thumb or # arm/thumb interworking are enabled in the inputs. OVERRIDE_THUMB = "${@['', ':thumb'][bb.data.getVar('ARM_INSTRUCTION_SET', d, 1) == 'thumb']}" OVERRIDE_INTERWORK = "${@['', ':thumb-interwork'][bb.data.getVar('THUMB_INTERWORK', d, 1) == 'yes']}" OVERRIDES = "local:${MACHINE}:${DISTRO}${DISTRO_BASE}:${TARGET_OS}:${TARGET_ARCH}${OVERRIDE_THUMB}${OVERRIDE_INTERWORK}:build-${BUILD_OS}" # TARGET_CC_ARCH # TARGET_CC_KERNEL_ARCH # TARGET_LD_ARCH # TARGET_LD_KERNEL_ARCH # Compiler and linker options for application code and kernel code. These # options ensure that the compiler has the correct settings for the selected # instruction set and interworking. ARM_INTERWORK_M_OPT = "${@['-mno-thumb-interwork', '-mthumb-interwork'][bb.data.getVar('THUMB_INTERWORK', d, 1) == 'yes']}" ARM_THUMB_M_OPT = "${@['-mno-thumb', '-mthumb'][bb.data.getVar('ARM_INSTRUCTION_SET', d, 1) == 'thumb']}" # TARGET_CC_ARCH = "-march=armv5te -mtune=xscale ${ARM_INTERWORK_M_OPT} ${ARM_THUMB_M_OPT}" TARGET_CC_KERNEL_ARCH = "-march=armv5te -mtune=xscale -mno-thumb-interwork -mno-thumb" TARGET_LD_ARCH = "" TARGET_LD_KERNEL_ARCH = "" # FULL_OPTIMIZATION # Optimization settings. Os works fine and is significantly better than O2. # The other settings are somewhat arbitrary. The optimisations chosen here # include the ones which 'break' symbolic debugging (because the compiler does # not include enough information to allow the debugger to know where given # values are.) The -fno options are an attempt to cancel explicit use of space # consuming options found in some packages (this isn't a complete list, this is # just the ones which package writers seem to know about and abuse). FULL_OPTIMIZATION = "-Os -fomit-frame-pointer -frename-registers \ -fno-unroll-loops -fno-inline-functions \ -fweb -funit-at-a-time" # TARGET_ARCH # The correct setting for the system endianness (ARCH_BYTE_SEX). This will # be arm (le) or armeb (be) - it is difficult to be more precise in the # setting because of the large number of ways it is used within OpenEmbedded. TARGET_ARCH = "${@['armeb', 'arm'][bb.data.getVar('ARCH_BYTE_SEX', d, 1) == 'le']}" # PACKAGE_ARCH # The correct setting for the generated packages. This corresponds to the # -march flag passed to the compiler because that limits the architectures # on which the generated code will run. BYTE_SEX_CHAR = "${@['b', 'l'][bb.data.getVar('ARCH_BYTE_SEX', d, 1) == 'le']}" PACKAGE_ARCH_BASE = "${@['armv5te', 'thumbv5t'][bb.data.getVar('ARM_INSTRUCTION_SET', d, 1) == 'thumb']}" PACKAGE_ARCH = "${PACKAGE_ARCH_BASE}${BYTE_SEX_CHAR}" # IPKG_ARCHS # The full list of package architectures which should run on the system. # This takes into account both the board level issues and the INPUTS set # by the distro. The arm list is derived from the architecture settings # known to gcc, the thumb list is then derived from that (only the 't' # architectures of course). ARM_ARCHITECTURES = "${TARGET_ARCH} armv2${BYTE_SEX_CHAR} armv2a${BYTE_SEX_CHAR} armv3${BYTE_SEX_CHAR} armv3m${BYTE_SEX_CHAR} armv4${BYTE_SEX_CHAR} armv4t${BYTE_SEX_CHAR} armv5${BYTE_SEX_CHAR} armv5t${BYTE_SEX_CHAR} armv5e${BYTE_SEX_CHAR} armv5te${BYTE_SEX_CHAR} xscale${BYTE_SEX_CHAR}" THUMB_ARCHITECTURES = "thumbe${BYTE_SEX_CHAR} thumbv4t${BYTE_SEX_CHAR} thumbv5t${BYTE_SEX_CHAR}" # NOTE: this list contains just the things which rootfs_ipk.bbclass does # not add, rootfs_ipk.bbclass evaluates: # # ipkgarchs="all any noarch ${TARGET_ARCH} ${IPKG_ARCHS} ${MACHINE}" # # This is a priority ordered list - most desireable architecture at the end, # so put _ARCHITECTURES at the end and, if # THUMB_INTERWORK precede this with the other architectures. IPKG_ARCHS = "${@(lambda arch_thumb, arch_arm, is_arm, interwork: \ (interwork and (is_arm and arch_thumb or arch_arm) + ' ' or '') \ + (is_arm and arch_arm or arch_thumb)) \ (bb.data.getVar('THUMB_ARCHITECTURES', d, 1), \ bb.data.getVar('ARM_ARCHITECTURES', d, 1), \ bb.data.getVar('ARM_INSTRUCTION_SET', d, 1) != 'thumb', \ bb.data.getVar('THUMB_INTERWORK', d, 1) == 'yes')}" #------------------------------------------------------------------------------- # Miscellany #------------------------------------------------------------------------------- # The correct settings for the NSLU2 board: SERIAL_CONSOLE = "115200 ttyS0" KERNEL_CONSOLE = "ttyS0,115200n8" USE_VT = "0" # These depends define native utilities - they do not get put in the flash and # are not required to build the image. # upslug2 (in tmp/work/upslug2-native-*) is the program to write the NSLU2 flash # Override this as desired - it makes no difference to the final image. EXTRA_IMAGEDEPENDS += "upslug2-native" #------------------------------------------------------------------------------- # Package versions #------------------------------------------------------------------------------- SRCDATE_ipkg-utils ?= "20060106" SRCDATE_ipkg-utils-native ?= "20060106" SRCDATE_ipkg-link ?= "20060106" SRCDATE_irssi ?= "20050930" CVS_TARBALL_STASH = "http://sources.nslu2-linux.org/sources/" INHERIT += "nslu2-mirrors" PREFERRED_VERSION_ipkg ?= "0.99.155" PREFERRED_VERSION_ipkg-native ?= "0.99.154"