2011年4月6日水曜日

obs600 で 再度 debian squeeze - その 2

また引用。
OpenBlockS 600D - 開発環境の構築
クロス開発 (VMware等のx86環境上での開発)
  1. ベースとなる環境の用意
  2. タイトル通り squeeze (amd64) で

  3. emdebian のリポジトリを追加します
  4. sources.list の準備
    /etc/apt/sources.list.d に以下 emdebian.list というファイルを追加
    # cat /etc/apt/sources.list.d/emdebian.list
    deb     http://www.emdebian.org/debian/ squeeze main
    deb-src http://www.emdebian.org/debian/ squeeze main
    
    アップデート
    $ sudo aptitude update
    
    キーリングを追加
    $ sudo aptitude install emdebian-archive-keyring
    
  5. 必要なパッケージを追加します
  6. $ sudo aptitude install \
    > build-essential u-boot libc6-powerpc-cross \
    > libc6-dev-powerpc-cross binutils-powerpc-linux-gnu gcc-4.4-powerpc-linux-gnu \
    > g++-4.4-powerpc-linux-gnu \
    > autoconf dpkg-cross linux-headers-2.6.32-5-common linux-source-2.6.32 \
    > kernel-package libncurses5-dev
    
    最後の二行は今後のモロモロのために

  7. カーネルのソースコードを展開します
  8. ありがたいことに SSDLinux のパッチもあるので上記通り linux-source-2.6.32 で。

  9. 開発用ディレクトリの作成と SSD/Linux のソース取得、展開
  10. テンポラリディレクトリ作成
    $ mkdir -p $HOME/obs600/tmp
    
    src.tgz の取得
    $ wget -nd -N -P $HOME/obs600/tmp \
    > http://ftp.plathome.co.jp/pub/ssdlinux/0.5-LATEST/source/src.tgz
    
    各種展開
    $ cd $HOME/obs600
    $ tar xzf tmp/src.tgz -C tmp
    $ tar xjf /usr/src/linux-source-2.6.32.tar.bz2 -C .
    
  11. カーネルパッケージ作成
  12. カーネルパッチあて
    SSD/Linux のソース usr/src/mkdist/kernel/2.6.32/patches/ に各種パッチあり
    $ cd linux-source-2.6.32
    $ for i in ../tmp/usr/src/mkdist/kernel/2.6.32/patches/*.patch; do
    > patch -p1 $i
    > done
    ...
    patching file Makefile
    Reversed (or previously applied) patch detected!  Assume -R? [n]
    Apply anyway? [n]
    (ここはエンター。デフォルトの n で OK)
    Skipping patch.
    4 out of 4 hunks ignored -- saving rejects to file Makefile.rej
    patching file scripts/Makefile.modinst
    
    ごめんなさい - scripts.patch
    +ifdef NOGZIP
           cmd_modules_install = mkdir -p $(2); cp $@ $(2) ;
    $(mod_strip_cmd) $(2)/$(notdir $@)
    +else
    +      cmd_modules_install = mkdir -p $(2); cp $@ $(2) ;
    $(mod_strip_cmd) $(2)/$(notdir $@) ;gzip -9 $(2)/$(notdir $@)
    +endif
    
    なので make 時に -D NOGZIP する

    .config などのコピー
    ワーキングディレクトリは $HOME/obs600/linux-source-2.6.32 のままで
    $ cp ../tmp/usr/src/mkdist/kernel/2.6.32/dot.config.powerpc-obs600 dot.config
    $ cp dot.config .config
    $ cp ../tmp/usr/src/mkdist/kernel/2.6.32/obs600.dts arch/powerpc/boot/dt
    $ cp ../tmp/usr/src/mkdist/kernel/2.6.32/obs600.dts arch/powerpc/boot/dts/
    
    menuconfig
    $ make-kpkg -j4 --arch powerpc --config menuconfig configure
    
    menuconfig はお好みで gconfig とか。DRBD 使ってみるので
    • Device Drivers ---> Connector を M に
    • Device Drivers ---> Block Devices ---> DRBD も M に
    その他お好みで。個人的には cgroup と namespace veth など。diff 取ると
    $ diff -uw dot.config .config
    +CONFIG_CONNECTOR=m
    +CONFIG_BLK_DEV_DRBD=m
    
    といったあたり。削除されてる
    -CONFIG_UNION_FS=y
    http://download.filesystems.org/unionfs/unionfs-2.x/
    あたりからパッチ持ってきてあてる必要あり。でも CF ブートなので割愛。

    kernel_image
    $ MAKEFLAGS="NOGZIP=1" make-kpkg -j4 --rootcmd=fakeroot --arch=powerpc \
    > --revision 0.91 --initrd kernel_image
    
  13. その他 uImage に必要なもの
  14. dtb
    参照:
    • $SSDSRC/usr/src/contrib/debootstrap/post-debootstrap
    • $SSDSRC/usr/src/contrib/developers/kimura/lenny_based_firmware/uimage/create_uImage.sh
    $ make ARCH=powerpc obs600.dtb
    /home/chamaken/obs600/linux-source-2.6.32/scripts/dtc/dtc -O dtb -o
    arch/powerpc/boot/obs600.dtb -b 0 -p 1024
    /home/chamaken/obs600/linux-source-2.6.32/arch/powerpc/boot/dts/obs600.dts
    DTC: dts->dtb  on file
    "/home/chamaken/obs600/linux-source-2.6.32/arch/powerpc/boot/dts/obs600.dts"
    $ cp arch/powerpc/boot/obs600.dtb ../
    
    vmlinux.bin.gz
    $ powerpc-linux-gnu-objcopy -O binary vmlinux ../vmlinux.bin
    $ cd ..
    $ gzip vmlinux.bin
    $ ls -1
    linux-image-2.6.32_0.91_powerpc.deb
    linux-source-2.6.32
    obs600.dtb
    tmp
    vmlinux.bin.gz
    
    すっごい長くなった上に番外。
    ここまでやっておくと次回 obs600 側になるので

  15. (何と言えばよいのか) 開発機側で OBS600 バイナリのファイルツリー準備
  16. include のパッケージは最低限。お好みで... drbb8-utils も
    $ su
    # debootstrap --foreign --arch=powerpc \
    > --include "ssh less u-boot initramfs-tools" \
    > squeeze rootfs http://ftp.jp.debian.org/debian
    I: Retrieving Release
    I: Retrieving Packages
    I: Validating Packages
    ...
    I: Extracting xz-utils...
    I: Extracting zlib1g...
    # ls -1
    linux-image-2.6.32_0.91_powerpc.deb
    linux-source-2.6.32
    obs600.dtb
    rootfs
    tmp
    vmlinux.bin.gz
    # cp linux-image-2.6.32_0.91_powerpc.deb obs600.dtb vmlinux.bin.gz rootfs/root/
    # chmod 0755 rootfs/root
    
    最後の chmod 忘れずに

0 件のコメント: