Skip to content

Instantly share code, notes, and snippets.

@bygreencn
Created February 20, 2018 06:34
Show Gist options
  • Save bygreencn/b0ee5463e4ace527ba7442ee9c307e41 to your computer and use it in GitHub Desktop.
Save bygreencn/b0ee5463e4ace527ba7442ee9c307e41 to your computer and use it in GitHub Desktop.
Croscompillation of RT linux with xenomai for RPI3
XenomaiVersion=3.0.5
KernelVersion=4.9.y
PLATFORM=arm
git clone https://github.com/raspberrypi/linux.git -b rpi-${KernelVersion} --depth 1
wget http://xenomai.org/downloads/xenomai/stable/xenomai-${XenomaiVersion}.tar.bz2
wget http://xenomai.org/downloads/ipipe/v4.x/arm/ipipe-core-4.4.43-arm-8.patch
wget http://busybox.net/downloads/busybox-1.26.2.tar.bz2
wget https://zlib.net/zlib-1.2.11.tar.gz
wget https://matt.ucc.asn.au/dropbear/dropbear-2017.75.tar.bz2
wget https://matt.ucc.asn.au/dropbear/releases/dropbear-2017.75.tar.bz2
WORKING_DIR=$(readlink -f `pwd`)
XENOMAI_DIR="${WORKING_DIR}/xenomai"
LINUX_DIR="${WORKING_DIR}/linux-rpi-4.9.34"
OUTPUT_BUILD_DIR="${WORKING_DIR}/packages-builds"
XENOMAI_BUILD_DIR="${OUTPUT_BUILD_DIR}/xenomai"
XENOMAI_LINUX_DIR="${OUTPUT_BUILD_DIR}/linux"
export TRIPLET=armv8l-linux-gnueabihf
export BIN_INSTALLDIR=$HOME/osRelease
export PATH=/opt/armv8l-toolchain-linux/bin:$PATH
export TARGETMACH=arm-linux-gnueabihf
export BUILDMACH=x86_64-pc-linux-gnu
#export boot_partition=/media/${USER}/BOOT
#export root_partition=/media/${USER}/rootfs
export boot_partition=${OUTPUT_BUILD_DIR}/BOOT
export root_partition=${OUTPUT_BUILD_DIR}/rootfs
export CPU_NUMBERS=`nproc`
INSTALL_MOD_PATH=$root_partition/ modules_install
INSTALL_HDR_PATH=$root_partition/ headers_install
INSTALL_FW_PATH=$root_partition/ firmware_install
CC=${TRIPLET}-gcc
CXX=${TRIPLET}-g++
NM=${TRIPLET}-nm
AR=${TRIPLET}-ar
AS=${TRIPLET}-as
LD=${TRIPLET}-ld
CPP=${TRIPLET}-cpp
OBJDUMP=${TRIPLET}-objdump
OBJCOPY=${TRIPLET}-objcopy
READELF=${TRIPLET}-readelf
RANLIB=${TRIPLET}-ranlib
GDB=${TRIPLET}-gdb
GFORTRAN=${TRIPLET}-gfortran
STRINGS=${TRIPLET}-strings
SIZE=${TRIPLET}-size
GCOV=${TRIPLET}-gcov
STRIP=${TRIPLET}-strip
GPROF=${TRIPLET}-gprof
ssh user@host
> cat /proc/cpuinfo ==>
or
$CC -march=native -E -v - </dev/null 2>&1 | grep cc1
$CC -mcpu=native -march=native -Q --help=target
$CC -march=native -mcpu=native -mtune=native -Q --help=target
$CC -march=native -Q -v test.c -o test
lister les macros de GCC : $CC -dM -E -xc /dev/null
-dM : afficher les macros #define, y compris celles prédéfinis
-E : s’arrêter après le préprocesseur (ne pas compiler)
-xc : forcer le langage C
/dev/null : fichier vide en guise de code source
http://man7.org/linux/man-pages/man7/feature_test_macros.7.html
man feature_test_macros Feature test macros allow the programmer to control the definitions that are exposed by system header files when a program is
compiled.
# -march=armv8-a+crc -mtune=cortex-a53 -mfpu=crypto-neon-fp-armv8 -mfloat-abi=hard -ftree-vectorize -funsafe-math-optimizations -O2 -pipe
# -marm -mabi=aapcs-linux -march=armv8-a+crc -mfloat-abi=hard -mfpu=neon-fp-armv8 #other options are 'fp-armv8', 'neon-fp-armv8', and 'crypto-neon-fp-armv8'
# -funsafe-math-optimizations -mhard-float -mlittle-endian -mtls-dialect= gnu2 #or just gnu if gnu2 doesn't work
# -mtune=cortex-a53 -munaligned-access -mvectorize-with-neon-quad #-ftree-vectorize (removed since Autovectorizing (-ftree-vectorize) for NEON gives between zero and negligible
CFLAGS="${CFLAGS} -O3 -mcpu=cortex-a53 -mfpu=neon-fp-armv8 -mfloat-abi=hard -funsafe-math-optimizations"
RASPBERRY PI 3 GENTOO CFLAGS : CFLAGS="-O3 -pipe -march=armv8-a+crc -mtune=cortex-a53 -mfpu=crypto-neon-fp-armv8 -mfloat-abi=hard -funsafe-math-optimizations"
LDFLAGS="${LDFLAGS} -O3 -mcpu=cortex-a53 -mfpu=neon-fp-armv8 -mfloat-abi=hard -funsafe-math-optimizations"
export AS LD CC CXX CPP AR NM READELF RANLIB STRIP OBJCOPY OBJDUMP GFORTRAN GCOV GPROF SIZE STRINGS GDB
$CC -v
$CC -v 2>&1 | grep hard
$CC -Q --help=target
$CC -c -Q -O3 --help=optimizers
$CC -c -Q -O2 --help=optimizers
tar xvjf xenomai-${XenomaiVersion}.tar.bz2
cd ${LINUX_DIR}
head -4 Makefile
patch --dry-run -p1 < ../ipipe-core-4.4.43-arm-8.patch | grep [Hh]unk
${XENOMAI_DIR}/scripts/prepare-kernel.sh \
--arch=arm \
--ipipe=../ipipe-core-4.4.43-arm-8.patch \
--linux=${LINUX_DIR} \
--verbose
# wget http://xenomai.org/pipermail/xenomai/2016-April/036110.html
# wget http://wiki.csie.ncku.edu.tw/_showraw/patch-xenomai-3-on-bcm-2709.patch
patch -p1 < ../patch-xenomai-3-on-bcm-2709.patch --dry-run // no mor eneed for kernel >> 4.4
make ARCH=arm -j${CPU_NUMBERS} O=${XENOMAI_LINUX_DIR} CROSS_COMPILE=${TRIPLET}- mrproper
make ARCH=arm -j${CPU_NUMBERS} O=${XENOMAI_LINUX_DIR} CROSS_COMPILE=${TRIPLET}- bcm2709_defconfig
make ARCH=arm -j${CPU_NUMBERS} O=${XENOMAI_LINUX_DIR} CROSS_COMPILE=${TRIPLET}- menuconfig
make ARCH=arm -j${CPU_NUMBERS} CROSS_COMPILE=${TRIPLET}- mrproper
make ARCH=arm -j${CPU_NUMBERS} CROSS_COMPILE=${TRIPLET}- bcm2709_defconfig
make ARCH=arm -j${CPU_NUMBERS} CROSS_COMPILE=${TRIPLET}- menuconfig
# CPU Power Management --->
# CPU Frequency scaling --->
# [ ] CPU Frequency scaling
# Kernel Features --->
# [ ] Contiguous Memory Allocator
# Kernel Features --->
# [ ] Allow for memory compaction
# Kernel Hacking --->
# [ ] KGDB: kernel debugger --->
# Boot options --->
# Kernel command line type (Use bootloader kernel arguments if available) --->
# (X) Extend bootloader kernel arguments
# CPU Power Management ---->
# CPU Frequency scaling ---->
# [ ] CPU Frequency scaling
# CPU idle ---->
# [ ] CPU idle PM support
# Kernel Features ---->
# [ ] Contiguous Memory Allocator
# [ ] Allow for memory compaction
# Kernel Hacking ---->
# [ ] KGDB: kernel debugger
# Boot options ---->
# Kernel command line type ---->
# [x] Extend bootloader kernel arguments
make ARCH=arm -j${CPU_NUMBERS} O=${XENOMAI_LINUX_DIR} CROSS_COMPILE=${TRIPLET}- zImage modules dtbs
make ARCH=arm -j${CPU_NUMBERS} CROSS_COMPILE=${TRIPLET}- INSTALL_MOD_PATH=${PACKAGES_DIR} modules_install
make ARCH=arm -j${CPU_NUMBERS} CROSS_COMPILE=${TRIPLET}- zImage modules dtbs
${XENOMAI_DIR}/scripts/bootstrap && \
make clean \
&& \
./configure --host=arm-linux --with-core=cobalt --enable-assert --enable-smp --enable-silent-rules --enable-shared \
--enable-static --enable-lores-clock --enable-clock-monotonic-raw --enable-async-cancel \
--enable-dlopen-libs --disable-doc-install --prefix=${root_partition} \
CC=${TRIPLET}-gcc \
NM=${TRIPLET}-nm \
AR=${TRIPLET}-ar \
AS=${TRIPLET}-as \
LD=${TRIPLET}-ld \
CPP=${TRIPLET}-cpp \
OBJDUMP=${TRIPLET}-objdump \
OBJCOPY=${TRIPLET}-objcopy \
READELF=${TRIPLET}-readelf \
RANLIB=${TRIPLET}-ranlib \
GDB=${TRIPLET}-gdb \
GFORTRAN=${TRIPLET}-gfortran \
STRINGS=${TRIPLET}-strings \
SIZE=${TRIPLET}-size \
GCOV=${TRIPLET}-gcov \
STRIP=${TRIPLET}-strip \
GPROF=${TRIPLET}-gprof \
&& \
make ARCH=arm -j${CPU_NUMBERS} CROSS_COMPILE=${TRIPLET}- CFLAGS="${CFLAGS} -O3 -mcpu=cortex-a53 -mfpu=neon-fp-armv8 -mfloat-abi=hard -funsafe-math-optimizations" \
&& \
make -j6 ARCH=arm CROSS_COMPILE=$CROSS_COMPILER_PATH install
sudo make -j6 ARCH=arm CROSS_COMPILE=$CROSS_COMPILER_PATH install
sudo make DESTDIR=$root_partition install
cd busybox/
# make ARCH=arm CROSS_COMPILE=${TRIPLET}- menuconfig
make ARCH=arm CROSS_COMPILE=${TRIPLET}- defconfig
sudo make -j$CPU_NUMBERS ARCH=arm CROSS_COMPILE=${TRIPLET}- install CONFIG_PREFIX=$root_partition
cd Zlib
./configure --prefix=$root_partition
sudo make -j$CPU_NUMBERS ARCH=arm CROSS_COMPILE=${TRIPLET}- install
cd dropbear
./configure --host=arm-linux-gnueabi --with-zlib=$root_partition --prefix=$root_partition --build=$BUILDMACH --enable-bundled-libtom CC=${TRIPLET}-gcc LD=${TRIPLET}-ld
sudo make -j$CPU_NUMBERS ARCH=arm CROSS_COMPILE=${TRIPLET}- install
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment