プチgpe-image


console-imageだとIrDABluetooth無線LAN、USBガジェットのドライバが組み込まれるけど、生憎その手のものは全く持っていないので貴重なメモリを無駄に喰ってた。まぁインストール後にipkg removeすればいいんだけど、1つ1つ指定しないといけないから面倒。なんか最初からインストールさせないうまい方法はないかと思ってたら、遊びで入れたminimal-gpe-imageだと入っていないことを発見。が、これだとPCMCIAすら効かないので勝手にいじくって自分用イメージを作ってみた。…うわ前置きなげぇ。

以下「続きを読む」へ。

とりあえずpackages/images/console-image.bbとpackages/images/minimalist-gpe-image.bbを比較すると、どうも"task-boot"と"task-base-extended"というのが匂うのでこれを調査。

"task-boot"はpackages/tasks/task-boot.bb、"task-base-extended"はpackages/tasks/task-base.bbが実体の模様。んでtask-base-extendedはtask-baseを、task-baseはtask-bootを内包しているっぽい。

#
# task-base contain stuff needed for base system (machine related)
#
RDEPENDS_task-base = "\
    task-boot \
    task-distro-base \
    task-machine-base \
    ${DISTRO_SSH_DAEMON} \
    ${HOTPLUG} \
    \
    ${@base_contains('MACHINE_FEATURES', 'kernel26','task-base-kernel26','task-base-kernel24',d)} \
    ${@base_contains('MACHINE_FEATURES', 'apm', 'task-base-apm', '',d)} \
    ${@base_contains('MACHINE_FEATURES', 'acpi', 'task-base-acpi', '',d)} \
    ${@base_contains('MACHINE_FEATURES', 'keyboard', 'task-base-keyboard', '',d)} \
    \
    ${@base_contains('COMBINED_FEATURES', 'alsa', 'task-base-alsa', '',d)} \
    ${@base_contains('COMBINED_FEATURES', 'ext2', 'task-base-ext2', '',d)} \
    ${@base_contains('COMBINED_FEATURES', 'vfat', 'task-base-vfat', '',d)} \
    ${@base_contains('COMBINED_FEATURES', 'irda', 'task-base-irda', '',d)} \
    ${@base_contains('COMBINED_FEATURES', 'pci', 'task-base-pci', '',d)} \
    ${@base_contains('COMBINED_FEATURES', 'pcmcia', 'task-base-pcmcia', '',d)} \
    ${@base_contains('COMBINED_FEATURES', 'usbgadget', 'task-base-usbgadget', '',d)} \
    ${@base_contains('COMBINED_FEATURES', 'usbhost', 'task-base-usbhost', '',d)} \
    ${@base_contains('COMBINED_FEATURES', 'bluetooth', 'task-base-bluetooth', '',d)} \
    ${@base_contains('COMBINED_FEATURES', 'wifi', 'task-base-wifi', '',d)} \
    ${@base_contains('COMBINED_FEATURES', 'uboot', 'task-base-uboot', '',d)} \
    ${@base_contains('COMBINED_FEATURES', 'redboot', 'task-base-redboot', '',d)} \
    ${@base_contains('COMBINED_FEATURES', 'apex', 'task-base-apex', '',d)} \
    \
    ${@base_contains('DISTRO_FEATURES', 'nfs', 'task-base-nfs', '',d)} \
    ${@base_contains('DISTRO_FEATURES', 'cramfs', 'task-base-cramfs', '',d)} \
    ${@base_contains('DISTRO_FEATURES', 'smbfs', 'task-base-smbfs', '',d)} \
    ${@base_contains('DISTRO_FEATURES', 'ipv6', 'task-base-ipv6', '',d)} \
    ${@base_contains('DISTRO_FEATURES', 'ipsec', 'task-base-ipsec', '',d)} \
    ${@base_contains('DISTRO_FEATURES', 'ppp', 'task-base-ppp', '',d)} \
    ${@base_contains('DISTRO_FEATURES', 'raid', 'task-base-raid', '',d)} \
    "

RDEPENDS_task-base-extended = "\
    task-base \
    ${ADD_WIFI} \
    ${ADD_BT} \
    "

なにやら長ったらしいのは、引数1に引数2が定義されていたら引数3をインストールすると勝手に仮定。COMBINED_FEATURESはconf/bitbake.confを覗いた感じではDISTRO_FEATURESとMACHINE_FEATURESの両方で定義されていた場合のみ有効とかそんな感じっぽい。

というわけでirdaとか不要なモノをDISTRO_FEATURESかMACHINE_FEATURESから削ればよさげなので、conf/distro/include/angstrom.incを下のように削る。ちなみにMACHINE_FEATURESはconf/machine/zaurus-2.6.incに定義されてた。ところでSEPPUKUって何だ。

--- conf/distro/include/angstrom.inc    6d2902857b621e681b3f0d4780dcd51ee236074e
+++ conf/distro/include/angstrom.inc    d8617c4f3fb04125c33634998325f2c131b03ed3
@@ -269,4 +269,5 @@
 SEPPUKU_COMPONENT    = "build"
 
 
 # We want images supporting the following features (for task-base)
+#DISTRO_FEATURES = "nfs smbfs wifi ppp alsa bluetooth ext2 vfat irda pcmcia usbgadget usbhost pci"
+DISTRO_FEATURES = "nfs alsa ext2 vfat pcmcia pci"
-DISTRO_FEATURES = "nfs smbfs wifi ppp alsa bluetooth ext2 vfat irda pcmcia usbgadget usbhost pci"

最後にpackages/images/minimal-gpe-imageをベースにしてpackages/images/petit-gpe-imageを作成。

--- minimal-gpe-image.bb        2008-01-06 20:41:02.000000000 +0900
+++ petit-gpe-image.bb  2008-02-10 08:19:43.000000000 +0900
@@ -4,14 +4,14 @@

 XSERVER ?= "xserver-kdrive-fbdev"

-export IMAGE_BASENAME = "minimalist-gpe-image"
+export IMAGE_BASENAME = "petit-gpe-image"

-PR = "r2"
+PR = "r1"

-DEPENDS = "task-boot"
+DEPENDS = "task-base"
 IMAGE_INSTALL = "\
     ${XSERVER} \
-    task-boot \
+    task-base \
     gpe-dm gpe-session-scripts gpe-login \
     matchbox-wm \
     gpe-terminal \

これで"bitbake -c rebuild task-base"してtask-baseを再構築してから"bitbake petit-gpe-image"でイメージの完成。