パッケージのカスタマイズ
ちゃんとビルドできることを確認したところで,
Configファイルの構成
カーネルのカスタマイズの基本は,
Ubuntuのカーネルパッケージの場合,
そこでまずはパッケージビルドの大まかな流れを把握したうえで,
debian/
debian.env
rules
rules.d/
scripts/
debian.master/
abi/
changelog
config/
amd64/
armhf/
config.common.armhf
config.flavour.generic
config.flavour.generic-lpae
config.common.ubuntu
enforce
rules.d/
amd64.mk
armhf.mk
debian/
- debian.
envが読み出されサブのdebianディレクトリ (debian. master) を決定する。 - debian/
rules. dとdebian. master/ rules. d/ armhf. mkを読み込む。debian. master/ rules. d/には, アーキテクチャ固有の設定が記述されている。 - ビルドするアーキテクチャとフレーバーに合わせて,
debian/ rules. d/ 2-binary-arch. mkの"stamp-prepare-tree"ターゲットで, debian. master/ config以下にあるConfigファイルを連結し, ビルドディレクトリ (debian/ build/ build-generic/) に.configとして保存する。 - 生成されたConfigのうち,
必須オプション (debian. master/ config/ enforce) が有効になっているかどうかを, debian/ scripts/ config-checkで確認する。 - debian.
master/ rules. d/ armhf. mkのbuild_ imageをビルドする。 - debian/
scripts/ module-checkとdebian/ scripts/ abi-checkを使って, debian. master/ abi/以下に保存されている前回リリースしたバージョンのシンボルやモジュールリストと比較を行う。 - ビルドしたファイル群をDebianパッケージとしてまとめる。
.configを生成しているのは3.の部分なのですが,
$ cat config.common.ubuntu armhf/config.common.armhf armhf/config.flavour.generic > build/build-generic/.config $ cd build/build-generic; make silentoldconfig
よって,
フレーバーの追加
Configを大きく変更する場合は,
- 「debian.
master/ rules. d/$(ARCH).mk」 のflavours行に, 新しいフレーバー名を追加する - 「debian.
master/ config/$(ARCH)/config. flavour.フレーバー名」 を作成する - ビルド時は
「debian/ rules binary-フレーバー名」 を実行する
今回はMultiPlatform対応のgenericカーネルに,
OpenBlocks AX3の場合
編集すべきところがわかったところで,
OpenBlocks AX3のdefconfigはarch/
check_
#!/bin/bash
cat $1 | while read line
do
[ -z "$line" ] && continue
if echo $line | grep -q "^#" ; then
# "# CONFIG_ABC is not set" to "CONFIG_ABC"
conf=`echo $line | sed "s/^# \(.*\) is not set/\1/"`
else
# "CONFIG_ABC=y" to "CONFIG_ABC"
conf=${line%=*}
fi
orig=`grep "$conf[= ]" $2`
if [ -z "$orig" ]; then
echo "Added : $line"
elif [ "$line" = "$orig" ]; then
echo "Duplicate: $line"
elif [ "# $conf is not set" = "$orig" ]; then
echo "Uncomment: $line"
elif echo $line | grep -q "^# " ; then
echo "Commented: $conf (Ubuntu is $orig)"
else
echo "Changed : $orig => ${line#*}"
fi
done
そして既存のConfigをubuntu_
$ cd ubuntu-trusty $ cat debian.master/config/config.common.ubuntu > ../ubuntu_configs $ cat debian.master/config/config.common.ports >> ../ubuntu_configs $ cat debian.master/config/armhf/config.common.armhf >> ../ubuntu_configs $ cat debian.master/config/armhf/config.flavour.generic >> ../ubuntu_configs $ chmod u+x ../check_config.sh $ ../check_config.sh arch/arm/configs/mvebu_defconfig ../ubuntu_configs | sort Added : # CONFIG_EXT3_FS_XATTR is not set Added : CONFIG_ARMADA_THERMAL=y Added : CONFIG_EXPERIMENTAL=y Added : CONFIG_I2C_MV64XXX=y Added : CONFIG_MACH_ARMADA_370=y Added : CONFIG_MACH_ARMADA_XP=y Added : CONFIG_MMC_MVSDIO=y (中略) Changed : CONFIG_BT=m -> y Changed : CONFIG_BT_MRVL=m -> y (中略) Commented: CONFIG_CACHE_L2X0 (Ubuntu is CONFIG_CACHE_L2X0=y) Commented: CONFIG_DEBUG_BUGVERBOSE (Ubuntu is CONFIG_DEBUG_BUGVERBOSE=y) Commented: CONFIG_IOMMU_SUPPORT (Ubuntu is CONFIG_IOMMU_SUPPORT=y) Commented: CONFIG_SCHED_DEBUG (Ubuntu is CONFIG_SCHED_DEBUG=y) Commented: CONFIG_SWP_EMULATE (Ubuntu is CONFIG_SWP_EMULATE=y) Duplicate: # CONFIG_COMPACTION is not set Duplicate: CONFIG_AEABI=y Duplicate: CONFIG_ARCH_MVEBU=y (中略) Uncomment: CONFIG_DEBUG_USER=y Uncomment: CONFIG_EXT2_FS=y Uncomment: CONFIG_EXT3_FS=y Uncomment: CONFIG_GPIO_SYSFS=y (後略)
Addedがubuntu_
Addedは原則としてそのまま追加し,
編集したら,
$ debian/rules updateconfigs
これによりsilentoldconfigを行うため,