那些年,交叉编译那些事
编译 python2.7.11 arm64
复制代码
1 先编译个x86版本。
2 mkdir build.pc
3 cd build.pc
4 ../configure --disable-ipv6 --enable-shared
5 make
6
7 编译arm64版本之前,先在configure文件前面添加
8 ac_cv_file__dev_ptmx=yes
9 ac_cv_file__dev_ptc=no
10
11 mkdir build.arm64
12 cd build.arm64
13 ../configure --host=aarch64-linux-gnu --prefix=/home/trait/v8le/linaro-aarch64/aarch64-linux-gnu --disable-ipv6 --enable-shared --build=aarch64
14
15 遇到错误1:
16 Parser/pgen ../Grammar/Grammar Include/graminit.h Python/graminit.c
17 Parser/pgen: Parser/pgen: cannot execute binary file
18 make: *** [Include/graminit.h] Error 126
19 拷贝build.pc的pgen即可解决。
20 cp /home/trait/v8le/Python-2.7.11/build.pc/Parser/pgen ./Parser/
21
22 make && make install
23 在make install的需要修改Makefile里PYTHONPATH,添加x86的lib目录,如:PYTHONPATH=/home/trait/v8le/Python-2.7.11/build.pc/build/lib.linux-i686-2.7:(shell ..)
复制代码
编译 libffi-3.2.1 arm64
1 mkdir build.arm64
2 cd build.arm64
3 ../configure --host=aarch64-linux-gnu --prefix=/home/trait/v8le/linaro-aarch64/aarch64-linux-gnu --enable-shared
4 make && make install
编译 zlib-1.2.8 arm64
1 ./configure --prefix=/home/trait/v8le/linaro-aarch64/aarch64-linux-gnu
2 修改Makefile
3 修改gcc为aarch64-linux-gnu-gcc
4 修改ar为aarch64-linux-gnu-ar
5 修改ranlib为aarch64-linux-gnu-ranlib
6 make && make install
编译 glib-2.46.2 arm64
复制代码
1 mkdir build.arm64
2 cd build.arm64
3
4 echo ac_cv_type_long_long=yes>aarch64.cache
5 echo glib_cv_stack_grows=no>>aarch64.cache
6 echo glib_cv_uscore=no>>aarch64.cache
7 echo ac_cv_func_posix_getpwuid_r=yes>>aarch64.cache
8 echo ac_cv_func_posix_getgrgid_r=yes>>aarch64.cache
9
10 ../configure --host=aarch64-linux-gnu --prefix=/home/trait/v8le/linaro-aarch64/aarch64-linux-gnu --cache-file=aarch64.cache LIBFFI_CFLAGS=-I/home/trait/v8le/linaro-aarch64/aarch64-linux-gnu/include LIBFFI_LIBS=/home/trait/v8le/linaro-aarch64/aarch64-linux-gnu/lib64/libffi.la
11
12 遇到错误1:
13 ../../gobject/gclosure.c:28:17: fatal error: ffi.h: No such file or directory
14 #include <ffi.h>
15 这是libffi安装的时候将它的头文件安装在lib目录下,如下解决:
16 cd /home/trait/v8le/linaro-aarch64/aarch64-linux-gnu/include
17 ln -s ../lib/libffi-3.2.1/include/ffi.h ffi.h
18 ln -s ../lib/libffi-3.2.1/include/ffitarget.h ffitarget.h
19
20 遇到错误2:
21 ./.libs/libgobject-2.0.so: undefined reference to `ffi_type_void'
22 ./.libs/libgobject-2.0.so: undefined reference to `ffi_type_double'
23 ./.libs/libgobject-2.0.so: undefined reference to `ffi_prep_cif'
24 ./.libs/libgobject-2.0.so: undefined reference to `ffi_type_sint32'
25 ./.libs/libgobject-2.0.so: undefined reference to `ffi_type_float'
26 ./.libs/libgobject-2.0.so: undefined reference to `ffi_type_uint64'
27 ./.libs/libgobject-2.0.so: undefined reference to `ffi_type_sint64'
28 ./.libs/libgobject-2.0.so: undefined reference to `ffi_type_pointer'
29 ./.libs/libgobject-2.0.so: undefined reference to `ffi_type_uint32'
30 ./.libs/libgobject-2.0.so: undefined reference to `ffi_call'
31 同样是libffi的安装问题,如下解决:
32 cd /home/trait/v8le/linaro-aarch64/aarch64-linux-gnu
33 cp ./lib64/* ./lib
复制代码
编译 libaio-0.3.110 arm64
1 make prefix=/home/trait/v8le/linaro-aarch64/aarch64-linux-gnu CC=aarch64-linux-gnu-gcc
2 make prefix=/home/trait/v8le/linaro-aarch64/aarch64-linux-gnu CC=aarch64-linux-gnu-gcc install
编译 openssl-1.0.1s arm4
1 CC=aarch64-linux-gnu-gcc ./config no-asm shared --prefix=/home/trait/v8le/linaro-aarch64/aarch64-linux-gnu
2 make && make install
编译 ncurses-6.0 arm64 && 编译libuuid arm64
1 mkdir build.arm64
2 cd build.arm64
3 ../configure --host=aarch64-linux-gnu --prefix=/home/trait/v8le/linaro-aarch64/aarch64-linux-gnu --enable-shared
4 make && make install
编译 libfdt(device-tree-compiler_1.4.0)
1 make CC=aarch64-linux-gnu-gcc AR=aarch64-linux-gnu-ar RANLIB=aarch64-linux-gnu-ranlib PREFIX=/home/trait/v8le/linaro-aarch64/aarch64-linux-gnu
2 make CC=aarch64-linux-gnu-gcc AR=aarch64-linux-gnu-ar RANLIB=aarch64-linux-gnu-ranlib PREFIX=/home/trait/v8le/linaro-aarch64/aarch64-linux-gnu install
编译 yajl_1.0.12 arm64
复制代码
1 需先安装cmake
2 第一步,修改CMakelist SET (YAJL_MAJOR 12)后面 添加:
3 SET (CMAKE_C_COMPILER "aarch64-linux-gnu-gcc")
4 第二步,注释掉下面3行:
5 #ADD_CUSTOM_TARGET(test
6 # ./run_tests.sh ${CMAKE_CURRENT_BINARY_DIR}/test/yajl_test
7 # WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/test)
8
9 ./configure --prefix=/home/trait/v8le/linaro-aarch64/aarch64-linux-gnu
10 make && make install
复制代码
编译 xen4.4.1 arm64
复制代码
1 make dist-xen XEN_TARGET_ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CONFIG_EARLY_PRINTK=fastmodel
2 make dist-xen XEN_TARGET_ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CONFIG_EARLY_PRINTK=xgene-storm debug=y
3 make dist-xen XEN_TARGET_ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CONFIG_EARLY_PRINTK=xgene-storm debug=y MAX_PHYS_CPUS=8
4 make dist-xen XEN_TARGET_ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CONFIG_EARLY_PRINTK=xgene-storm debug=y HAS_GICV3=y
5 make dist-xen XEN_TARGET_ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CONFIG_EARLY_PRINTK=vexpress debug=y HAS_GICV3=y
6
7 带dtb编译:
8 make dist-xen XEN_TARGET_ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CONFIG_EARLY_PRINT=fastmodel CONFIG_DTB_FILE=/home/trait/workspace/linux-3.14.65/arch/arm64/boot/dts/foundation-v8.dtb
复制代码
编译 xen tools arm64
复制代码
1 ./configure --host=aarch64-linux-gnu --build=aarch64 glib_CFLAGS=-I/home/trait/v8le/linaro-aarch64/aarch64-linux-gnu/include/glib-2.0 glib_LIBS=/home/trait/v8le/linaro-aarch64/aarch64-linux-gnu/lib/libglib-2.0.la
2
3 遇到错误1:
4 configure: error: ./configure failed for tools
5 这是ncurses的目录问题,如下解决:
6 cd /home/trait/v8le/linaro-aarch64/aarch64-linux-gnu/include
7 ln -s ./ncurses/curses.h ncurses.h
8
9 make XEN_TARGET_ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- CONFIG_EARLY_PRINT=fastmodel
复制代码
编译 linux-3.14 + xen支持的
复制代码
1 make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- defconfig
2 sed -e 's/.*CONFIG_XEN is not set/CONFIG_XEN=y/g' -i .config
3 sed -e 's/.*CONFIG_BLK_DEV_LOOP is not set/CONFIG_BLK_DEV_LOOP=y/g' -i .config
4 make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- oldconfig
5 make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image
6 make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- dtbs
7 make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- modules
8 make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- modules_install INSTALL_MOD_PATH=/home/trait/modules_install
9
10 make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig
11 make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image
12 make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- arm64_fr_defconfig
13 -------------------------------------------------------------------------------------------------------------------------
14
15 mkimage -T multi -C gzip -a 0 -e 0 -n xen-uImage -d Image.gz:foundation-v8.dtb.gz xen-uImage.gzip
16
17 #mkimage -A arm -T kernel -a 0x80200000 -e 0x80200000 -C none -d /home/trait/workspace/xen/xen/xen xen-uImage
18
19 mkimage -A arm64 -T kernel -a 0x80800000 -e 0x80800000 -C none -d xen uXen
20 mkimage -A arm64 -T kernel -a 0x80200000 -e 0x80200000 -C none -d xen uXen
21 --------------------------------------------------------------------------------------------------------------------------
22 make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- xgene_xen_defconfig
23 make CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm vexpress_defconfig
24 make CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm zImage
25 qemu-system-arm -M vexpress-a9 -m 512M -kernel /home/trait/qemu-linux/linux-3.14.65/arch/arm/boot/zImage -nographic -append "root=/dev/mmcblk0 console=ttyAMA0" -sd a9rootfs.ext3
复制代码
编译uboot 2013-10
1 先安装arm-linux-gnu-gcc,网上下载
2
3 # make ARCH=arm CROSS_COMPILE=arm-linux-gnu- smdk2410_config 与下面的效果相同
4 make smdk2410_config
5 make all
xen u-boot
复制代码
1 setenv ipaddr 10.60.15.53;setenv serverip 10.60.40.11;setenv xen_addr_r 0x90000000;setenv netmask 255.255.0.0;setenv kern_addr_r 0x98000000;setenv fdt_addr_r 0x99000000
2 setenv xen_load 'tftp ${xen_addr_r} uXen';setenv xen_dtb 'tftp ${fdt_addr_r} u-boot.dtb;fdt addr ${fdt_addr_r};fdt resize;'
3 setenv xen_boot 'setenv bootargs ${bootargs_xen};bootm ${xen_addr_r} - ${fdt_addr_r}'
4 setenv dom0_node 'fdt set /chosen/module@0 compatible xen,linux-zimage xen,multiboot-module'
5 setenv xen_dom0 'tftp ${kern_addr_r} Image; run dom0_node;fdt set /chosen/module@0 reg < 0x0 ${kern_addr_r} 0x${filesize} >'
6 setenv xen_run 'run xen_dtb xen_dom0 xen_load;fdt print /chosen;run xen_boot'
7 setenv bootargs_xen 'conswitch=x sync_console dom0_mem=1G dom0_max_vcpus=1 console=dtuart dtuart=/smb/motherboard/amba/uart@28001000'
8
9 # setenv bootargs_xen 'conswitch=x sync_console dom0_mem=1G dom0_max_vcpus=1 console=dtuart dtuart=/smb/uart@28001000'
复制代码
编译gdbserver aarch64
复制代码
1 --------------------主机-----------------------------
2 mkdir build.pc
3 cd build.pc
4 ../configure --target=aarch64-linux-gnu
5
6 make
7 ---------------------目标机--------------------------
8 mkdir build.arm64
9 cd build.arm64
10 ../configure --prefix=/home/trait/gnu-tools/install --target=aarch64-linux-gnu --host=aarch64-linux-gnu
11 make CC=/home/trait/v8le/linaro-aarch64/bin/aarch64-linux-gnu-gcc