bc10/rowboat

SGX and DSP integration、 DSP stack 部分

2010/07/05

ビルド

以下を実行して DSP を統合した android kernel および userland をビルドします。

$ make TARGET_PRODUCT=beagleboard BUILD_WITH_GST=true dvsdk

ビルドエラーの修正

ただし、kernel を 2.6.32 に更新したことで DSP stack のビルド時にエラーが出るようになります。

エラーの詳細は長くなりますので割愛しますが以下の箇所でエラーが出ます、それぞれ以下のように修正します。

1. external/ti-dsp/dvsdk_3_00_02_44/dsplink_1_61_03/packages/dsplink/gpp/src/arch/OMAP3530/shmem/Linux/omap3530_phy_shmem.c

~/rowboat-eclair-dsp/external/ti-dsp/dvsdk_3_00_02_44/dsplink_1_61_03/packages/dsplink/gpp/src/../../gpp/src/arch/OMAP3530/shmem/Linux/omap3530_phy_shmem.c:131: error: implicit declaration of function 'IO_ADDRESS'
$ diff -u omap3530_phy_shmem.c.orig omap3530_phy_shmem.c
--- omap3530_phy_shmem.c.orig	2010-06-29 20:53:20.341371121 +0900
+++ omap3530_phy_shmem.c	2010-07-05 14:19:04.614552881 +0900
@@ -128,12 +128,12 @@
 
     halObject = (OMAP3530_HalObj *) halObj ;
 
-    halObject->generalCtrlBase = (Uint32)IO_ADDRESS(GENERAL_CONTROL_BASE) ;
-    halObject->iva2CmBase      = (Uint32)IO_ADDRESS(IVA2_CM_BASE) ;
-    halObject->coreCmBase      = (Uint32)IO_ADDRESS(CORE_CM_BASE) ;
-    halObject->perCmBase       = (Uint32)IO_ADDRESS(PER_CM_BASE) ;
-    halObject->iva2PrmBase     = (Uint32)IO_ADDRESS(IVA2_PRM_BASE) ;
-    halObject->mailboxBase     = (Uint32)IO_ADDRESS(MAILBOX_BASE) ;
+    halObject->generalCtrlBase = (Uint32)ioremap(GENERAL_CONTROL_BASE, 4096) ;
+    halObject->iva2CmBase      = (Uint32)ioremap(IVA2_CM_BASE, 8192) ;
+    halObject->coreCmBase      = (Uint32)ioremap(CORE_CM_BASE, 8192) ;
+    halObject->perCmBase       = (Uint32)ioremap(PER_CM_BASE, 8192) ;
+    halObject->iva2PrmBase     = (Uint32)ioremap(IVA2_PRM_BASE, 8192) ;
+    halObject->mailboxBase     = (Uint32)ioremap(MAILBOX_BASE, 4096) ;

2. external/ti-dsp/dvsdk_3_00_02_44/codec_engine_2_24_01/cetools/packages/ti/sdo/linuxutils/cmem/src/module/cmemk.c

~/rowboat-eclair-dsp/external/ti-dsp/dvsdk_3_00_02_44/codec_engine_2_24_01/cetools/packages/ti/sdo/linuxutils/cmem/src/module/cmemk.c:1086: error: 'L_PTE_CACHEABLE' undeclared (first use in this function)
$ diff -u cmemk.c.orig cmemk.c
--- cmemk.c.orig	2010-06-29 21:05:39.718696468 +0900
+++ cmemk.c	2010-07-05 14:28:27.767315616 +0900
@@ -1084,7 +1084,7 @@
 static int set_cached(struct vm_area_struct *vma)
 {
     vma->vm_page_prot = __pgprot(pgprot_val(vma->vm_page_prot) |
-                                 (L_PTE_CACHEABLE | L_PTE_BUFFERABLE)
+                                 (L_PTE_MT_WRITETHROUGH | L_PTE_MT_BUFFERABLE)
                                 );
 
     vma->vm_flags |= VM_RESERVED | VM_IO;

3. external/ti-dsp/dvsdk_3_00_02_44/codec_engine_2_24_01/cetools/packages/ti/sdo/linuxutils/sdma/src/module/sdmak.c

~/rowboat-eclair-dsp/external/ti-dsp/dvsdk_3_00_02_44/codec_engine_2_24_01/cetools/packages/ti/sdo/linuxutils/sdma/src/module/sdmak.c:45:22: error: mach/dma.h: No such file or directory
$ diff -u sdmak.c.orig sdmak.c
--- sdmak.c.orig	2010-06-29 21:13:45.434697722 +0900
+++ sdmak.c	2010-06-29 21:22:33.300049114 +0900
@@ -42,8 +42,8 @@
 #include <asm/arch/tc.h>
 #else
 #include <mach/hardware.h>
-#include <mach/dma.h>
-#include <mach/tc.h>
+#include <plat/dma.h>
+#include <linux/tc.h>
 #endif
 
 /*

4. external/ti-dsp/dvsdk_3_00_02_44/dmai_2_00_01_04/packages/ti/sdo/dmai/linux/Display_fbdev.c

linux/Display_fbdev.c:45:29: error: mach/omapfb.h: No such file or directory
diff -u Display_fbdev.c.orig Display_fbdev.c
--- Display_fbdev.c.orig	2010-06-29 21:48:52.347886578 +0900
+++ Display_fbdev.c	2010-06-29 21:46:37.214483328 +0900
@@ -42,7 +42,7 @@
 #include <linux/fb.h>
 
 #ifdef Dmai_Device_omap3530
-    #include <mach/omapfb.h>
+    #include <linux/omapfb.h>
 #else
 //    #include <video/davincifb.h>
 #endif

5. external/ti-dsp/dvsdk_3_00_02_44/dmai_2_00_01_04/packages/ti/sdo/dmai/Makefile

~/rowboat-eclair-dsp/kernel/include/asm-generic/signal.h:94: error:'__BITS_PER_LONG' undeclared here (not in a function)
$ diff -u Makefile.orig Makefile
--- Makefile.orig	2010-06-29 22:01:32.699753968 +0900
+++ Makefile	2010-06-29 22:12:20.791781379 +0900
@@ -103,7 +103,7 @@
 
 CPP_FLAGS	+= -I$(XDC_INSTALL_DIR)/packages -I$(DMAI_INSTALL_DIR)/packages -I$(CE_INSTALL_DIR)/packages -I$(FC_INSTALL_DIR)/packages -I$(XDAIS_INSTALL_DIR)/packages -DDmai_Device_$(PLATFORM_DEVICE)
 
-GCC_CPP_FLAGS	+= $(CPP_FLAGS) -I$(LINUXKERNEL_INSTALL_DIR)/include -I$(LINUXKERNEL_INSTALL_DIR)/arch/arm/$(PLATFORM_ARCH)/include $(HAVE_AUTOCONFIG) -I$(CMEM_INSTALL_DIR)/packages -I$(LINK_INSTALL_DIR)/packages -DDmai_BuildOs_linux -Dxdc_target_types__=gnu/targets/std.h -I$(LINUXLIBS_INSTALL_DIR)/include -Dxdc_target_name__=arm/GCArmv7A
+GCC_CPP_FLAGS	+= $(CPP_FLAGS) -I$(LINUXKERNEL_INSTALL_DIR)/arch/arm/$(PLATFORM_ARCH)/include $(HAVE_AUTOCONFIG) -I$(CMEM_INSTALL_DIR)/packages -I$(LINK_INSTALL_DIR)/packages -DDmai_BuildOs_linux -Dxdc_target_types__=gnu/targets/std.h -I$(LINUXLIBS_INSTALL_DIR)/include -Dxdc_target_name__=arm/GCArmv7A
 C64P_CPP_FLAGS	+= $(CPP_FLAGS) -I$(BIOS_INSTALL_DIR)/packages/ti/bios/include -I$(BIOS_INSTALL_DIR)/packages -DDmai_BuildOs_bios -Dxdc_target__='<ti/targets/std.h>' -I$(CODEGEN_INSTALL_DIR)/include -mv6400+ -pdse225 -eo$(PLATFORM_DEVICE).o$(EXT)
 
 #GCC_C_FLAGS	+= $(C_FLAGS) -Wall -Werror $(ANDROID_CFLAGS)

6. external/ti-dsp/dvsdk_3_00_02_44/dmai_2_00_01_04/packages/ti/sdo/dmai/Makefile

linux/omap3530/Framecopy_accel.c:51:32: error: linux/omap_resizer.h: No such file or directory

上記の5で行った include path の変更を元に戻す

$ diff -u Makefile.modified Makefile
--- Makefile.modified	2010-06-29 22:12:20.791781379 +0900
+++ Makefile	2010-06-29 22:01:32.699753968 +0900
@@ -103,7 +103,7 @@
 
 CPP_FLAGS	+= -I$(XDC_INSTALL_DIR)/packages -I$(DMAI_INSTALL_DIR)/packages -I$(CE_INSTALL_DIR)/packages -I$(FC_INSTALL_DIR)/packages -I$(XDAIS_INSTALL_DIR)/packages -DDmai_Device_$(PLATFORM_DEVICE)
 
-GCC_CPP_FLAGS	+= $(CPP_FLAGS) -I$(LINUXKERNEL_INSTALL_DIR)/arch/arm/$(PLATFORM_ARCH)/include $(HAVE_AUTOCONFIG) -I$(CMEM_INSTALL_DIR)/packages -I$(LINK_INSTALL_DIR)/packages -DDmai_BuildOs_linux -Dxdc_target_types__=gnu/targets/std.h -I$(LINUXLIBS_INSTALL_DIR)/include -Dxdc_target_name__=arm/GCArmv7A
+GCC_CPP_FLAGS	+= $(CPP_FLAGS) -I$(LINUXKERNEL_INSTALL_DIR)/include -I$(LINUXKERNEL_INSTALL_DIR)/arch/arm/$(PLATFORM_ARCH)/include $(HAVE_AUTOCONFIG) -I$(CMEM_INSTALL_DIR)/packages -I$(LINK_INSTALL_DIR)/packages -DDmai_BuildOs_linux -Dxdc_target_types__=gnu/targets/std.h -I$(LINUXLIBS_INSTALL_DIR)/include -Dxdc_target_name__=arm/GCArmv7A
 C64P_CPP_FLAGS	+= $(CPP_FLAGS) -I$(BIOS_INSTALL_DIR)/packages/ti/bios/include -I$(BIOS_INSTALL_DIR)/packages -DDmai_BuildOs_bios -Dxdc_target__='<ti/targets/std.h>' -I$(CODEGEN_INSTALL_DIR)/include -mv6400+ -pdse225 -eo$(PLATFORM_DEVICE).o$(EXT)
 
 #GCC_C_FLAGS	+= $(C_FLAGS) -Wall -Werror $(ANDROID_CFLAGS)

実行時エラーを回避するための修正

上記の修正でビルドは通るようになりますが、起動後にエラーが出る箇所があるのでその箇所も修正します。

1. cmemk
カーネルモジュールを読み込むと cmemk: Unknown symbol init_mm というエラーが出て使用できないので、以下のように修正します。

まず kernel の config を一箇所変更します。

$ cd source buid/envsetup.sh
$ cd kernel
$ make menuconfig

Kernel hacking → Enable unused/obsolete exported symbols を有効にして保存
make clean で kernel ディレクトリ内のビルド済みファイルを削除し、ファイルの修正後に再ビルドします。

external/ti-dsp/dvsdk_3_00_02_44/codec_engine_2_24_01/cetools/packages/ti/sdo/linuxutils/cmem/src/module/cmemk.c

$ diff -u cmemk.c.orig cmemk.c
--- cmemk.c.orig	2010-06-29 21:05:39.718696468 +0900
+++ cmemk.c	2010-07-05 14:27:31.782329823 +0900
@@ -1026,10 +1026,10 @@
 void show_pte(struct mm_struct *mm, unsigned long addr)
 {
         pgd_t *pgd;
- 
+#if 0
         if (!mm)
                 mm = &init_mm;
-
+#endif
         printk(KERN_ALERT "pgd = %p\n", mm->pgd);
         pgd = pgd_offset(mm, addr);
         printk(KERN_ALERT "[%08lx] *pgd=%08lx", addr, pgd_val(*pgd));
@@ -1084,7 +1084,7 @@
 static int set_cached(struct vm_area_struct *vma)
 {
     vma->vm_page_prot = __pgprot(pgprot_val(vma->vm_page_prot) |
-                                 (L_PTE_CACHEABLE | L_PTE_BUFFERABLE)
+                                 (L_PTE_MT_WRITETHROUGH | L_PTE_MT_BUFFERABLE)
                                 );

external/ti-dsp/dvsdk_3_00_02_44/linuxutils_2_24_02/packages/ti/sdo/linuxutils/cmem/src/module/cmemk.c

$ diff -u cmemk.c.orig cmemk.c
--- cmemk.c.orig	2010-07-01 19:58:23.436891292 +0900
+++ cmemk.c	2010-07-01 19:59:01.642238507 +0900
@@ -1026,10 +1026,10 @@
 void show_pte(struct mm_struct *mm, unsigned long addr)
 {
         pgd_t *pgd;
-
+#if 0
         if (!mm)
                 mm = &init_mm;
-
+#endif
         printk(KERN_ALERT "pgd = %p\n", mm->pgd);
         pgd = pgd_offset(mm, addr);
         printk(KERN_ALERT "[%08lx] *pgd=%08lx", addr, pgd_val(*pgd));

2. DMAI
DMAI(Davinci Multimedia Application Interface) が omap kernel の OMAP2/3 Display Subsystem のデフォルト設定では動かないので、
DMAI の Display.c の中の omap3530 設定を無効にします。

external/ti-dsp/dvsdk_3_00_02_44/dmai_2_00_01_04/packages/ti/sdo/dmai/linux/Display.c

$ diff -u Display.c.orig Display.c
--- Display.c.orig	2010-07-05 16:23:35.693115944 +0900
+++ Display.c	2010-07-01 20:13:28.761149734 +0900
@@ -523,6 +523,7 @@
                     Char* displayDevice, VideoStd_Type *videoType,
                     Int *rotation)
 {
+#if 0
 /* #ifdef Dmai_Device_omap3530 */   
     FsOptionsSequence *sequence = NULL;
     Display_Output  currentDisplayOutput;

上記の変更を加えたあとでビルドを実行します。

$ make TARGET_PRODUCT=beagleboard BUILD_WITH_GST=true dvsdk

DSP stack のビルドを最初から再実行したい場合は、

$ make TARGET_PRODUCT=beagleboard BUILD_WITH_GST=true dvsdk_clean
$ make TARGET_PRODUCT=beagleboard BUILD_WITH_GST=true dvsdk

します。
その他ビルドの詳細なコントロールに関しては Makefile の中の各種変数の設定をご覧ください。

rootfsの作成

ビルドがエラーなく終了したら、android の rootfs を起動可能な配置に整えます。

$ cd out/target/product/beagleboad
$ mkdir android_rootfs
$ cp -r root/* android_rootfs
$ cp -r system android_rootfs

network設定

rowboatで起動した際にnetworkが使えるよう、android rootfs に設定を加えます。
以前に記載した方法ではうまくいかないので、修正します。

まず android_rootfs/init.rc の最後に以下の行を加え、ネットワーク設定用スクリプトを追加で実行するようにします。
service startEth0 /system/bin/starteth0.sh

このスクリプトを android_rootfs/system/bin/ に以下の内容で作成します。
#/system/bin/sh
setprop service.adb.tcp.port 5555
netcfg eth0 dhcp
setprop net.dns1 8.8.8.8

init.rc の他に、device ごとの設定ファイルを記述する initi.***.rc が使用できますので、
network の設定はそこに記述します。 device 名は /proc/cpuinfo の Hardware の項目の値を使用します。
複数の word になっている場合は最初の単語だけが有効で、すべて小文字にして記述します。
bc10 の場合は OMAP3 beagle board となるので、/android_rootfs/init.omap3.rc を作成し、以下のように記述します。

on boot
    setprop net.dns1 8.8.8.8

service lan-setup /system/etc/init.omap3.sh
    oneshot

上記設定ではDNSサーバに Google Public DNS を設定していますが、
各自の環境に合わせてLANのDNSサーバアドレスなどを宜設定してください。

つぎに以下の内容で /android_rootfs/system/etc/init.omap3.sh を作成します。

#!/system/bin/sh
 
netcfg eth0 up
netcfg eth0 dhcp

これで起動時に USB ether が DHCP でアドレスを取得して使用可能になります。

USB Wifi の場合も、正しく読み込める kernel module を用意して以下のように記述し
android_rootfs の system/etc/Wireless などといった正しく読み込める path に firmware ファイルを配置すれば、
GUI からのコントロールはできませんが通信は可能になります。
例:

#!/system/bin/sh
 
insmod /system/lib/modules/rt3070sta.ro
netcfg ra0 up
netcfg ra0 dhcp





※上記の修正は、Google Groups rowboat http://groups.google.com/group/rowboat での以下の遣り取りや、
 その中で挙がっていた老二さんの blog を参考にさせていただき検証して実行したものです。

Kernel 2.6.32 with DSP & SGX Drivers
http://groups.google.com/group/rowboat/browse_thread/thread/39381715e2204360

Steps to bring up Network(eth0) in Beagleboard using Android
http://groups.google.com/group/rowboat/browse_thread/thread/5787b9bf8618e38d

Getting build errors after repo sync
http://groups.google.com/group/rowboat/browse_thread/thread/133014a3b73ea72c

Rowboat Android Compile for BeagleBoard
http://tw.myblog.yahoo.com/stevegigijoe/article?mid=230&prev=232&next=227


BC::labsへの質問は、bc9-dev @ googlegroups.com までお願い致します。
トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   最終更新のRSS
Last-modified: 2010-07-21 (水) 13:32:37 (2987d)