cross compile bash for openWRT on Rasp Pi 3

refer https://openwrt.org/docs/guide-developer/crosscompile

openWRT source 編譯的時候可以順便編譯出cross compile tool chain

  1. git clone https://git.lede-project.org/source.git
  2. cd source
  3. make menuconfig
  4. enter target system, select BCM27xx
  5. enter subtarget, select BCM2710
  6. check and enter Advanced configuration options (for developers)
    1. check Target Options
    2. check Toolchain Options
    3. keep default in above 2 options
  7. make -j8

以上編譯完成之後會出現 staging_dir/ 這個資料夾

staging_dir/ 資料夾裡面會有四個資料夾

host
packages
target-arm_cortex-a53+neon-vfpv4_musl-1.1.16_eabi
toolchain-arm_cortex-a53+neon-vfpv4_gcc-5.4.0_musl-1.1.16_eabi

toolchain 就是第四個資料夾了

接著寫個script (~/crosscompile/env.sh)方便設定cross compile 環境變數

export STAGING_DIR=/data2/owenwen/crosscompile/source/staging_dir
export TOOLCHAIN_DIR=$STAGING_DIR/toolchain-arm_cortex-a53+neon-vfpv4_gcc-5.4.0_musl-1.1.16_eabi
export LDCFLAGS=$TOOLCHAIN_DIR/usr/lib
export LD_LIBRARY_PATH=$TOOLCHAIN_DIR/usr/lib
export PATH=$TOOLCHAIN_DIR/bin:$PATH

然後下載 bash source , configure 的部份

  1. wget https://ftp.gnu.org/gnu/bash/bash-4.4.tar.gz
  2. tar zxf bash-4.4.tar.gz
  3. cd bash-4.4
  4. source ~/crosscompile/env.sh
  5. ./configure –build=i686-linux –host=armv7-linux CC=$TOOLCHAIN_DIR/bin/arm-openwrt-linux-gcc CXX=$TOOLCHAIN_DIR/bin/arm-openwrt-linux-g++ –without-bash-malloc
  6. make -j8

build pass 之後就會有一個可以在 openWRT on Rasp PI 3 上面運行的bash 囉!

在沒有加 –without-bash-malloc 之前,運行bash 會看到下面這個錯誤訊息

locale.c:81: cannot allocate 18 bytes

咕狗之後看到docker bash 也有一樣的錯誤訊息並且說明是musl 沒有實做 brk/sbrk 的關係

https://github.com/tianon/docker-bash/blob/master/4.4/Dockerfile

# musl does not implement brk/sbrk (they simply return -ENOMEM)
# bash: xmalloc: locale.c:81: cannot allocate 18 bytes (0 bytes allocated)

 

我也把一份已經編譯好的上傳在google drive bash

refer http://worldend.logdown.com/posts/276005-cross-compile-for-openwrt

1 關於 “cross compile bash for openWRT on Rasp Pi 3” 的評論

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s