WD MyCloud编译的busybox-1.23.2中增加parted-3.0/parted-2.3

参考更优雅的(不拆硬盘)拯救死翘翘了的WD MyCloud(Ubuntu 17.10)配置编译出来的镜像中缺少parted,无法创建GPT分区,我们在此介绍一下如何增加parted-3.0/parted-2.3的功能。

首先参考Ubuntu 17.10上使用crosstool-ng-1.23.0建立WD MyCloud修复工具编译环境(uClibc)创建我们需要的编译工具。

接着参考更优雅的(不拆硬盘)拯救死翘翘了的WD MyCloud(Ubuntu 17.10)配置编译出启动镜像。

然后下载并编译libuuid-1.0.3的源代码

$ cd ~

$ wget https://nchc.dl.sourceforge.net/project/libuuid/libuuid-1.0.3.tar.gz

$ tar -zxvf libuuid-1.0.3.tar.gz

$ export PATH=$PATH:~/x-tools/arm-unknown-linux-uclibcgnueabihf/bin/

$ cd libuuid-1.0.3

$ ./configure --host=arm-unknown-linux-uclibcgnueabihf --prefix=`pwd`/uuid_arm/

$ make 

$ make install

然后下载并编译parted-3.0/parted-2.3的源代码

$ cd ~

$ wget http://ftp.gnu.org/gnu/parted/parted-3.0.tar.xz

$ tar -xvf parted-3.0.tar.xz

$ cd parted-3.0

$ export PATH=$PATH:~/x-tools/arm-unknown-linux-uclibcgnueabihf/bin/

$ export LD_LIBRARY_PATH=~/libuuid-1.0.3/uuid_arm/lib/:$LD_LIBRARY_PATH

$ ./configure --host=arm-unknown-linux-uclibcgnueabihf --disable-device-mapper --without-readline --disable-nls LDFLAGS="-L`echo ~`/libuuid-1.0.3/uuid_arm/lib" CFLAGS="-I`echo ~`/libuuid-1.0.3/uuid_arm/include/ -DGNULIB_defined_struct_option" --prefix=`pwd`/parted_arm/

#调整几处编译问题
$ sed -i 's/_GL_CXXALIASWARN[ \t]*(gets)/\/\/_GL_CXXALIASWARN \(gets\)/g' ~/parted-3.0/lib/stdio.in.h

$ sed -i 's/_GL_WARN_ON_USE[ \t]*(gets/\/\/_GL_WARN_ON_USE (gets/g' ~/parted-2.3/lib/stdio.in.h

$ make 

$ make install

完成后,打包我们刚刚构建的应用

$ mkdir ~/mycloud/extrafiles

$ mkdir ~/mycloud/extrafiles/lib

$ mkdir -p ~/mycloud/extrafiles/usr/lib

$ cp -r ~/parted-3.0/parted_arm/* ~/mycloud/extrafiles 

$ cp -r ~/libuuid-1.0.3/uuid_arm/* ~/mycloud/extrafiles

#可以简单的把整个sysroot直接拷贝过来,但是无用文件太多,导致最后的文件太大了,因此我们只提取我们自己需要的文件出来
$ cp ~/x-tools/arm-unknown-linux-uclibcgnueabihf/arm-unknown-linux-uclibcgnueabihf/sysroot/lib/ld-uClibc* ~/mycloud/extrafiles/lib/

$ cp ~/x-tools/arm-unknown-linux-uclibcgnueabihf/arm-unknown-linux-uclibcgnueabihf/sysroot/lib/libc.so* ~/mycloud/extrafiles/lib/

$ cp ~/x-tools/arm-unknown-linux-uclibcgnueabihf/arm-unknown-linux-uclibcgnueabihf/sysroot/lib/libuClibc-* ~/mycloud/extrafiles/lib/

$ cp ~/x-tools/arm-unknown-linux-uclibcgnueabihf/arm-unknown-linux-uclibcgnueabihf/sysroot/usr/lib/libc.so ~/mycloud/extrafiles/usr/lib/libc.so

#打包成压缩包,稍后我们的脚本会在找到这个压缩包后,打包进入镜像
$ cd ~/mycloud/extrafiles
$ tar -cvzf extrafiles.tar.gz *
$ mv extrafiles.tar.gz ../

重新打包uImage镜像

$ cd ~/mycloud

$ ./build-sys.sh

其他操作参照更优雅的(不拆硬盘)拯救死翘翘了的WD MyCloud(Ubuntu 17.10)

上面涉及到的源代码,如果不能下载成功,可以从本站下载一份代码拷贝。点击这里下载libuuid-1.0.3点击这里下载parted-2.3, 点击这里下载parted-3.0

参考链接


Building a minimal RootFS with Busybox, GLIBC and DropBear