Created
February 20, 2018 06:34
-
-
Save bygreencn/b0ee5463e4ace527ba7442ee9c307e41 to your computer and use it in GitHub Desktop.
Croscompillation of RT linux with xenomai for RPI3
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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