bc10/ソフトウェア

現在調整中

bc10用 android-2.2_r1.1 概要

bc10 向けに修正を加えた android-2.2_r1.1 userland の作成について記載します。

作業の流れは以下のとおりです。

android-2.2_r1.1 の開発環境作成 ->ソースコード取得 -> bc10用変更スクリプト実行 -> SGX SDK のインストール

現在調整中: 現在一部デバイスに対応中の箇所があります。予告無く更新することがありますのでご了承ください。

開発環境

今回の開発環境の概略は以下のとおりです。

パッケージインストール

ubuntu のリポジトリから必要なパッケージを取得してインストールします。

$ sudo apt-get install git-core gnupg flex bison gperf libsdl-dev libesd0-dev \
  libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev uboot-mkimage

java5

tag android-2.2_r1.1 のビルドに必要な sun-java5-jdk は Ubuntu 9.10 以降リポジトリから外されていますので、
/etc/apt/sources.list に一時的に古いリポジトリを追加します。

$ sudo vi /etc/apt/sources.list
  ## respective vendors as a service to Ubuntu users.
  deb http://archive.canonical.com/ubuntu lucid partner
  deb-src http://archive.canonical.com/ubuntu lucid partner
 
  deb http://archive.ubuntu.com/ubuntu lucid-security main restricted
  deb-src http://archive.ubuntu.com/ubuntu lucid-security restricted main multiverse universe #Added by software-properties
  deb http://archive.ubuntu.com/ubuntu lucid-security universe
  deb http://archive.ubuntu.com/ubuntu lucid-security multiverse
+ deb http://us.archive.ubuntu.com/ubuntu/ jaunty multiverse
+ deb http://us.archive.ubuntu.com/ubuntu/ jaunty-updates multiverse

追加完了後、 apt-get update コマンドでリポジトリ情報の取得をし sun-java5-jdk をインストールします。

$ sudo apt-get update
$ sudo apt-get install sun-java5-jdk

インストール完了後、誤って他の古いパッケージをインストールしないよう上記で追加したリポジトリを削除しておきます。

$ sudo vi /etc/apt/sources.list
  ## respective vendors as a service to Ubuntu users.
  deb http://archive.canonical.com/ubuntu lucid partner
  deb-src http://archive.canonical.com/ubuntu lucid partner
 
  deb http://archive.ubuntu.com/ubuntu lucid-security main restricted
  deb-src http://archive.ubuntu.com/ubuntu lucid-security restricted main multiverse universe #Added by software-properties
  deb http://archive.ubuntu.com/ubuntu lucid-security universe
  deb http://archive.ubuntu.com/ubuntu lucid-security multiverse
- deb http://us.archive.ubuntu.com/ubuntu/ jaunty multiverse
- deb http://us.archive.ubuntu.com/ubuntu/ jaunty-updates multiverse

もう一度 apt-get update で現状のリポジトリ情報の取得をして元の状態に戻します。

$ sudo apt-get update

ソース取得

repo 設定

android のソースコードを取得するために repo の設定を行います。

$ cd ~
$ mkdir bin
$ curl http://android.git.kernel.org/repo >~/bin/repo
$ chmod a+x ~/bin/repo

ubuntu を使っていれば、一度ログアウトしてログインし直すと ~/bin への PATH は通っています。
ログアウトせずそのまま作業したい場合は、以下のようにして ~/bin を環境変数の PATH に追加します。

$ export PATH=~/bin:$PATH

repo 初期化

bc10 という作業用ディレクトリを作成し、android-2.2_r1.1 branch を取得するために repo init を実行します。

$ cd ~/
$ mkdir bc10 
$ cd bc10
$ repo init -u git://android.git.kernel.org/platform/manifest.git -b android-2.2_r1.1

local_manifest.xml の追加

android-2.2_r1.1 tag で取得できるソースコード内には ALSA が含まれていません。
音声ライブラリに ALSA を使用するため bc10/.repo/ 以下に local_manifest.xml を作成します。
local_manifest.xmlに ALSA 関連ファイルを追加しソースコードを取得できるようにします。

また ALSA 関連ファイルには android-2.2_r1.1 tag が切られていないため、Froyo branch を使用します。

$ vi .repo/local_manifest.xml
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
  <project path="external/alsa-lib" name="platform/external/alsa-lib" revision="froyo"/>
  <project path="external/alsa-utils" name="platform/external/alsa-utils" revision="froyo"/>
  <project path="hardware/alsa_sound" name="platform/hardware/alsa_sound" revision="froyo"/>
</manifest>

repo sync

local_manifest.xml の追加後 repo sync を実行し、android のソースコードを取得します。

$ repo sync

2〜3GB のファイルをダウンロードしますので回線速度に応じてそれなりに時間がかかります。

bc10 用ビルド設定ファイルの適用

android-2.2_r1.1 を bc10 向けに最適化してビルドするための patch および設定ファイルを
github のリポジトリから
git clone で取得し、patch_to_android-2.2_r1.1_for_b10/bc10-patch.sh を実行します。

bc10/ 直下に git clone し、device/beatcraft/patch-for-bc10内の bc10-patch.sh を実行します。
$ cd ~/bc10/device/
$ git clone git://github.com/bc-dev/device_beatcraft_bc10.git beatcraft
$ cd beatcraft/patch-for-bc10/
$ ./bc10-patch.sh

$ cd
$ git clone git://github.com/bc-dev/patch_to_android-2.2_r1.1_for_b10.git
$ cd patch_to_android-2.2_r1.1_for_b10

git clone で取得する場所はどこでも構いませんが、
bc10-patch.sh を実行する前に bc10-patch.sh の中の以下の環境変数を
ファイルの PATH に合うよう修正してください。

### Settings 
ANDROID_DIR=${HOME}/bc10
SETUP_DIR=${HOME}/patch_to_android-2.2_r1.1_for_b10
PATCH_DIR=${SETUP_DIR}/patches-for-bc10

ファイルの PATH 指定を確認後 bc10-patch.sh を実行します。

$ ./bc10-patch.sh

この patch で以下の機能を追加しています。

Android ビルド

android ビルドのため bc10の環境設定をします。

$ cd ~/bc10
$ source build/envsetup.sh
$ lunch bc10-eng
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=2.2
TARGET_PRODUCT=bc10
TARGET_BUILD_VARIANT=eng
TARGET_SIMULATOR=false
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=FRF91
============================================

上記のように設定確認後 make を実行します。

$ make

make を実行する際はビルドの環境(CPU のコア数)に応じて -j2 など並列実行を指定すると
所要時間を減らすことができます。
make 中に出力される情報を増やしたい場合は showcommands を付加して実行すると
make 中に実行されているコマンドのログを詳細に出力します。

例:

$ time make showcommands -j2 2>&1 | tee make.log-20101115-01

イメージ作成

ビルドが終了したらビルドされた userland のバイナリを起動可能な配置に整えます。
userland を整えるスクリプト mkbc10-image.sh を使用します。

$ cd ~/bc10
$ cd device/beatcraft/patch-for-bc10/image/
$ ./bc10-image.sh

$ cd patch_to_android-2.2_r1.1_for_b10
$ ./mkbc10-image.sh

実行すると以下のように ~/bc10/out/target/product/bc10/ に bc10-image/ というディレクトリが作成され、
このディレクトリ内に android userland が配置されます。

/home/beat/bc10/out/target/product/bc10
mkdir android for android-rfs
/home/beat/bc10/out/target/product/bc10
copy android-root
copy android-system
change permission and owner
[sudo] password for beat:
$ cd ~/bc10/out/target/product/bc10
$ ls -l
-rw-r--r--  1 beat beat        7 2010-08-27 23:37 android-info.txt
drwxrwxrwx  8 root root     4096 2010-08-30 11:34 bc10-image
-rw-r--r--  1 beat beat     8866 2010-08-27 21:16 clean_steps.mk
drwxr-xr-x  3 beat beat     4096 2010-08-27 21:54 data
-rw-r--r--  1 beat beat    22869 2010-08-27 23:37 installed-files.txt
drwxr-xr-x 13 beat beat     4096 2010-08-27 23:28 obj
-rw-r--r--  1 beat beat      189 2010-08-27 21:16 previous_build_config.mk
-rw-r--r--  1 beat beat   163811 2010-08-27 23:37 ramdisk.img
drwxr-xr-x  8 beat beat     4096 2010-08-27 21:54 root
drwxr-xr-x  4 beat beat     4096 2010-08-27 21:54 symbols
drwxr-xr-x 11 beat beat     4096 2010-08-27 23:17 system
-rw-------  1 beat beat 78486144 2010-08-27 23:37 system.img
-rw-------  1 beat beat  1522752 2010-08-27 23:37 userdata.img
$ cd bc10-image
$ ls -l
drwxrwxrwx  2 root root   4096 2010-08-27 21:26 data
-rwxrwxrwx  1 root root    118 2010-08-27 21:54 default.prop
drwxrwxrwx  2 root root   4096 2010-08-27 21:26 dev
-rwxrwxrwx  1 root root 107440 2010-08-27 21:54 init
-rwxrwxrwx  1 root root   1677 2010-08-27 20:53 init.goldfish.rc
-rwxrwxrwx  1 root root    197 2010-08-24 20:58 init.omap3.rc
-rwxrwxrwx  1 root root  13605 2010-08-24 20:58 init.rc
drwxrwxrwx  2 root root   4096 2010-08-27 21:26 proc
drwxrwxrwx  2 root root   4096 2010-08-27 21:54 sbin
drwxrwxrwx  2 root root   4096 2010-08-27 21:26 sys
drwxrwxrwx 11 root root   4096 2010-08-30 11:34 system

kernel ビルド

x-loader、u-boot、kernel 部分の主な変更点は本ページ下部にあります
x-loader、u-boot、kernel の変更点をご覧ください。

環境変数設定

boot に必要な x-loader、u-boot、kernel は全て android のソースコードと
共に配布されている toolchain を使用してビルドします。

ビルド時にこの toolchain を使って cross compile が行われるよう、環境変数を設定します。

$ export PATH=/home/beat/bc10/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin:${PATH}
$ export ARCH=arm
$ export CROSS_COMPILE=arm-eabi-

x-loader

$ cd ~/bc10
$ git clone git://gitorious.org/~bc-dev/x-load-omap3/x-load-bc10.git x-load-bc10
$ cd x-load-bc10
$ git checkout -t -b bc10 origin/bc10
$ make omap3530bc10_config
$ make

x-load.bin は OMAP BootROM の仕様とフォーマットが合っていないため、このままNAND Flashや
SDカードに書きこんでもブートローダとして動作させることができません。
この問題を解決するため、signGP というツールで x-load.bin を加工する必要があります。
signGP の実行ファイルは以下の場所からダウンロードすることができます。
http://beagleboard.googlecode.com/files/signGP
ダウンロードした signGP を以下のように実行します。

$ ./signGP x-loader.bin

ビルド後出来た x-loader.bin.ift は MLO という名前で SDカードFATパーティションの先頭に書き込む
ためのファイルです。SDカードイメージ作成についてはページ下部にありますSDカードイメージ作成
をご覧ください。

u-boot

$ cd ~/bc10
$ git clone git://gitorious.org/bc10/u-boot-bc10.git u-boot-bc10
$ cd u-boot-bc10
$ git checkout -t -b build origin/build
$ make omap3_bc10_config
$ make

ビルド後出来た u-boot.bin は SDカードFATパーティションに MLO ファイルコピー後コピーします。
SDカードイメージ作成についてはページ下部にありますSDカードイメージ作成をご覧ください。

kernel

$ cd ~/bc10
$ git clone git://gitorious.org/~bc-dev/rowboat/bc10-rowboat-kernel.git bc10-rowboat-kernel
$ cd bc10-rowboat-kernel
$ git checkout -t -b bc10-2.6.32-build origin/bc10-2.6.32-build
$ make omap3_bc10_defconfig
$ make uImage
$ make modules

ビルド完了後以下のディレクトリにuImage が作成されます。

$ ls ~/bc10/bc10-rowboat-kernel/arch/arm/boot/
Image  Makefile  bootp  compressed  install.sh  uImage  zImage

SGX SDK の導入

SGX SDK を導入します。
注:SGX_SDK のダウンロードには少々時間がかかります。

$ cd bc10
$ git clone git://gitorious.org/rowboat/ti_android_sgx_sdk.git TI_Android_SGX_SDK
$ cd TI_Android_SGX_SDK
$ ./OMAP35x_Android_Graphics_SDK_setuplinux_3_01_00_03.bin

インストールディレクトリ位置を聞かれるので今回はデフォルトインストールディレクトリの
${HOME}/OMAP35x_Android_Graphics_SDK_3_01_00_03 を指定します。
インストール完了後${HOME}/OMAP35x_Android_Graphics_SDK_3_01_00_03にファイルが配置されます。

Rules.make の編集

Rules.make を以下のように修正したものが ${HOME}/bc10/device/beatcraft/bc10 にありますので、その
ファイルをコピーします。

SGX SDK のビルドには android userland、toolchain と kernel ソースが必要になります。
Rules.make は SGX SDK のビルドおよびインストールの際に上記のディレクトリ位置を参照するためのものです。

$ cd ${HOME}/OMAP35x_Android_Graphics_SDK_3_01_00_03
$ mv Rules.make Rules.make.orig
$ cp ${HOME}/bc10/device/beatcraft/bc10/Rules.make ${HOME}/OMAP35x_Android_Graphics_SDK_3_01_00_03/
#Rules.make

PLATFORM=LinuxOMAP3

################# FIELDS MODIFIABLE BY THE USER ###############################
#set home area HOME (relative location for all SDK operations)
# HOME=INVALIDVAL
HOME=/home/beat
#Current Directory where Graphics SDK is installed
GRAPHICS_INSTALL_DIR=$(HOME)/OMAP35x_Android_Graphics_SDK_3_01_00_03
#GRAPHICS_INSTALL_DIR=$(HOME)/bc10/TI_ANDROID
#Android Specific
#Path of Android Root FS
# ANDROID_ROOT=$(HOME)/INVALIDVAL
ANDROID_ROOT=$(HOME)/bc10/out/target/product/bc10/bc10-image
#set toolchain root path for arm-eabi
# CSTOOL_DIR=INVALIDVAL
CSTOOL_DIR=$(HOME)/bc10/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/
CSTOOL_PREFIX=arm-eabi-
CSTOOL_PATH=$(CSTOOL_DIR)/bin
CSTOOL_LIBSTDC++_PATH=$(CSTOOL_DIR)/arm-none-linux-gnueabi/libc/usr/lib

#set the kernel installation path
# KERNEL_INSTALL_DIR=$(HOME)/INVALIDVAL
KERNEL_INSTALL_DIR=$(HOME)/bc10/kernel-rowboat-bc10
TARGETFS_INSTALL_DIR=$(ANDROID_ROOT) 

GFX_TARGETFS_KERMOD_PATH=$(TARGETFS_INSTALL_DIR)/lib/modules/2.6.32 

#Android
ANDROID_DISCIMAGE=$(TARGETFS_INSTALL_DIR)/

コピー完了後、ビルドを実行します。

$ cd ~/OMAP35x_Android_Graphics_SDK_3_01_00_03
$ make
$ make OMAPES=3.x install

上記 make install の OMAPES=3.x という option は bc10 に搭載している OMAP3530 の
Graphic Chip の Revison を指定するものです。他オプションとしては以下のものがあります。

For OMAP3530 ES 1or2 = 2.x
For OMAP3530 ES3.0   = 3.x
For AM3517           = 3.x
For AM37x           = 5.x

ビルド完了後以下のメッセージがでます。

Installation complete!

これで ~/bc10/out/target/product/bc10/bc10-image/ に必要なファイルがコピーされ、
bc10 用 android userland の作成作業は完了です。

SD カードイメージ作成

bc10/booting 起動用SDカード作成 の手順に従って作成していきます。
なお、この作成手順は、SDカード用です。bc10は、設計上マイクロSDからのブートは出来ません。
SDカードの概略は以下のようになります。

作業環境はLinuxを想定しています。
作業手順は以下のようになります。

  1. パーティションの初期化・設定
  2. ファイルシステムのフォーマット
  3. ファイルの配置

以下の説明は主にLinuxBootDiskFormat(code.google.com)から引用してアレンジしたものです。

SDカードのアンマウント

このあとパーティション操作やフォーマット作業をおこなうために、SDカードがマウントされている場合には、
まずアンマウントをおこないます。以下のようにSDカードがマウントされているとします。

$ df -h
Filesystem            Size  Used Avail Use% Mounted on
...
/dev/sdc1             400M   94M  307M  24% /media/disk
...

アンマウントをおこないます。

$ umount /media/disk

パーティションの初期化・設定

fdiskコマンドを実行します。
引数にはSDカードのデバイスファイルを指定します。この位置は作業環境によって変わりますので、
事前に確認しておいてください。以下は実行例です。

$ sudo fdisk /dev/sdc
Command (m for help): [p]

Disk /dev/sdc: 2021 MB, 2021654528 bytes
255 heads, 63 sectors/track, 245 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1   *           1         246     1974240+   c  W95 FAT32 (LBA)
Partition 1 has different physical/logical endings:
     phys=(244, 254, 63) logical=(245, 200, 19)

パーティションを全て削除します。

Command (m for help): [d]
Selected partition 1

エキスパートモードにモード変更します。

Command (m for help): [x]

ヘッダ数を255に設定します。

Expert Command (m for help): [h]
Number of heads (1-256, default xxx): [255]

セクタ数を63に設定します。

Expert Command (m for help): [s]
Number of sectors (1-63, default xxx): [63]

シリンダ数の設定は使用するSDカードごとに異なります。
以下の計算式でシリンダ数を計算します。(小数点以下切り捨て)

#シリンダ数 = 小数点以下切り捨て (SDカードのバイト数 / 255 / 63 / 512 )

今回の例で使用しているSDカードでは以下のようになります。

2021654528 / 255 / 63 / 512 = 245.79
-> 245

シリンダ数を設定します。今回の例では245になります。

Expert Command (m for help): [c]
Number of cylinders (1-256, default xxx): [上式で求めた値]

ノーマルモードにモード変更します。

Expert Command (m for help): [r]

FAT32パーティションを作成します。

Command (m for help): [n]
Command action
   e   extended
   p   primary partition (1-4)
[p]
Partition number (1-4): [1]
First cylinder (1-245, default 1): [(press Enter)]
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-245, default 245): [+50]

Command (m for help): [t]
Selected partition 1
Hex code (type L to list codes): [c]
Changed system type of partition 1 to c (W95 FAT32 (LBA))

ブートフラグを設定します。

Command (m for help): [a]
Partition number (1-4): [1]

Linuxのファイルシステム用パーティションを作成します。

Command (m for help): [n]
Command action
   e   extended
   p   primary partition (1-4)
[p]
Partition number (1-4): [2]
First cylinder (52-245, default 52): [(press Enter)]
Using default value 52
Last cylinder or +size or +sizeM or +sizeK (52-245, default 245): [(press Enter)]
Using default value 245

パーティション設定を確認します。

Command (m for help): [p]

Disk /dev/sdc: 2021 MB, 2021654528 bytes
255 heads, 63 sectors/track, 245 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1   *           1          51      409626    c  W95 FAT32 (LBA)
/dev/sdc2              52         245     1558305   83  Linux

パーティションテーブルの変更を保存します。

Command (m for help): [w]
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.

WARNING: If you have created or modified any DOS 6.x
partitions, please see the fdisk manual page for additional
information.
Syncing disks.

ファイルシステムのフォーマット

FAT32パーティションとLinuxパーティションをそれぞれフォーマットします。
LABEL1とLABEL2の文字列の部分はパーティションのラベルになりますので、
お好きな名前で設定してください。このページではLABEL1、LABEL2 と設定しています。

$ sudo mkfs.msdos -F 32 /dev/sdc1 -n LABEL1
mkfs.msdos 2.11 (12 Mar 2005)
$ sudo mkfs.ext3 -L LABEL2 /dev/sdc2
mke2fs 1.40-WIP (14-Nov-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
195072 inodes, 389576 blocks
19478 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=402653184
12 block groups
32768 blocks per group, 32768 fragments per group
16256 inodes per group
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912

Writing inode tables: done                            
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: 

ファイルの配置

ブートローダのイメージファイルをSDカードに配置します。
まず、SDカードを挿しなおすなどして、再度マウントさせます。
SDカードのマウントポイントはシステムの都合に合わせて読みかえてください。

FAT パーティション

1段目のブートローダであるX-Loaderは、SDカード上の配置方法に制限があります。
必ず以下のように配置してください。

  1. FAT32パーティションのフォーマット後、最初に配置するようにします。
  2. パーティション内のトップディレクトリに配置します。
  3. ファイル名を「MLO」とします。
$ cd  ~/bc10/x-load-bc10
$ cp x-load.bin.ift /media/LABEL1/MLO

続いて、2段目のブートローダであるU-Bootを配置します。 ファイル名を「u-boot.bin」とします。

$ cd ~/bc10/u-boot-bc10
$ cp u-boot.bin /media/LABEL1/u-boot.bin

bc10-rowboat-kernel でビルドした uImage を配置します。

$ sudo cp ~/bc10/bc10-rowboat-kernel/arch/arm/boot/uImage /media/LABEL1/

bc10/rowboat-eclair-dsp と 同様に boot.scr を作成します。
このファイルはシリアルコンソールで u-boot のコマンドプロンプトから setenv で設定するのと同じ内容を作成し、
起動時に毎回手動で設定する手間を省略するためのものです。
また、メモリマッピングを変えないよう設定します。

まず以下の内容の boot.script を作成します。

$ cd ~
$ vi boot.script
if fatload mmc 0 84000000 uImage
then
 echo ***** Kernel: /dev/mmcblk0p1/uImage.bin *****
fi
echo ***** RootFS: /dev/mmcblk0p2 *****
setenv bootargs 'mem=256M androidboot.console=ttyS2 console=tty0 console=ttyS2,115200n8 root=/dev/mmcblk0p2 init=/init rootwait omapfb.video_mode=680x480MR-24@60'
bootm 84000000

このファイルを引数に指定して、以下のように mkimage を実行します。

$ mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n ./boot.script -d ./boot.script ./boot.scr &> /dev/null

生成された boot.scr をSDカードのFATパーティションにコピーします。

$ sudo cp boot.scr /media/LABEL1/

Linux パーティション

ビルドしたbc10用 android の userland を配置します。

$ cd ~/bc10/out/target/product/bc10/bc10-image
$ sudo cp -fr * /media/LABEL2/

最後にSDカードをアンマウントする前に念のため sync を実行します。

$ sync
$ sudo umount /media/LABEL1
$ sudo umount /media/LABEL2

以上で SDカードイメージ作成は完了です。

x-loader、u-boot、kernel の変更点

bc10 froyo 対応 u-boot、x-loader、kernel に関する項目です。

bc10-rowboat-kernel

派生元

主な変更点

u-boot-bc10

派生元

主な変更点

x-load-bc10

派生元

主な変更点

参照URL

更新記録

2010/09/06 環境構築、android ソース取得部分まで記載、x-loader、u-boot、kernel調整中
2010/09/06 x-loader、u-boot、kernel 部分記載
2010/09/08 SDカードイメージ作成部分記載
2010/09/09 SDカードイメージ作成 uImage 部分記載
2010/09/29 SDカードイメージ作成 マイクロSDからのbootは不可
2010/11/16 android-2.2_r1.1 への patch を行うスクリプトと実行手順を修正


BC::labsへの質問は、bc9-dev @ googlegroups.com までお願い致します。
トップ   新規 一覧 単語検索 最終更新   最終更新のRSS