ubuntu 在 R40e 上 還有 Debian 在 Sempron 2600 上

2012年3月29日 星期四

dmesg : plugin broadcom bt dongle

插入broadcom bt dongle 後: [35846.698859] usb 2-1.1.4.3: USB disconnect, address 100 [36348.976683] usb 2-1.2: USB disconnect, address 64 [37771.085747] usb 2-1.1.4.2: new full speed USB device using ehci_hcd and address 101 [37771.199661] usb 2-1.1.4.2: New USB device found, idVendor=0a5c, idProduct=2101 [37771.199665] usb 2-1.1.4.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0 [37771.199669] usb 2-1.1.4.2: Product: BT EDR Dongle [37771.199672] usb 2-1.1.4.2: Manufacturer: Broadcom Corp [37771.199809] usb 2-1.1.4.2: configuration #1 chosen from 1 choice 插入csr bt dongle [ 3785.993223] usb 2-1.1.4.3: USB disconnect, address 32 [ 3991.162896] usb 2-1.1.4.2: new full speed USB device using ehci_hcd and address 33 [ 3991.776824] usb 2-1.1.4.2: New USB device found, idVendor=0a12, idProduct=0001 [ 3991.776829] usb 2-1.1.4.2: New USB device strings: Mfr=0, Product=0, SerialNumber=0 [ 3991.776969] usb 2-1.1.4.2: configuration #1 chosen from 1 choice [ 3991.830149] Bluetooth: Generic Bluetooth USB driver ver 0.6 [ 3991.831140] usbcore: registered new interface driver btusb

2012年3月28日 星期三

應該用 Makefile 來作。
這樣用 make target 可以指定不同的 target。

輔助的地方才用 shell script
基本的動作:
  1. make -- 把所有 model 都 build 出來,含 tag
  2. make model -- 把那個 model build 出來

2012年3月21日 星期三

Failure [INSTALL_FAILED_SHARED_USER_INCOMPATIBLE]

一開始是用 Eclipse, run .. 結果 fail,出現 Failure [INSTALL_FAILED_SHARED_USER_INCOMPATIBLE] 改用 adb install 結果也一樣,
猜是 permission 的關係,所以用 sign.apk sign 一堆後,
還是一樣。

後來,去看一下 project 的 AndroidManifest.xml..有一項: android:sharedUserId="com.example.id" 把這行拿掉後,就可以了。

2012年3月20日 星期二

keep uboot splash as long as possible

其實是在找讓 uboot splash screen 清掉的code。
先是 bootloader : diff --git a/cpu/arm_cortexa8/cpu.c b/cpu/arm_cortexa8/cpu.c index ac7ac13..1e3c940 100644 --- a/cpu/arm_cortexa8/cpu.c +++ b/cpu/arm_cortexa8/cpu.c @@ -137,8 +137,8 @@ int cleanup_before_linux(void) unsigned int i; #ifdef CONFIG_VIDEO_MX5 - ipu_disable_channel(MEM_BG_SYNC); - ipu_uninit_channel(MEM_BG_SYNC); +// ipu_disable_channel(MEM_BG_SYNC); +// ipu_uninit_channel(MEM_BG_SYNC); #endif 這兩行 code 會 disable ipu.

然後是 kernel:

arch/arm/mach-mx5/mx51_babbage.c: /* * The following uses standard kernel macros define in arch.h in order to * initialize __mach_desc_MX51_BABBAGE data structure. */ /* *INDENT-OFF* */ MACHINE_START(MX51_BABBAGE, "Freescale MX51 Babbage Board") /* Maintainer: Freescale Semiconductor, Inc. */ .phys_io = AIPS1_BASE_ADDR, .io_pg_offst = ((AIPS1_BASE_ADDR_VIRT) >> 18) & 0xfffc, #ifdef CONFIG_ANDROID_PMEM .fixup = fixup_android_board, #else .fixup = fixup_mxc_board, #endif .map_io = mx5_map_io, .init_irq = mx5_init_irq, .init_machine = mxc_board_init, .timer = &mxc_timer, MACHINE_END 所以timer 是 mxc_timer

然後 timer init 的 code 是: static void __init mx51_babbage_timer_init(void) { struct clk *uart_clk; /* Change the CPU voltages for TO2*/ if (mx51_revision() == IMX_CHIP_REVISION_2_0) { cpu_wp_auto[0].cpu_voltage = 1175000; cpu_wp_auto[1].cpu_voltage = 1100000; cpu_wp_auto[2].cpu_voltage = 1000000; } mx51_clocks_init(32768, 24000000, 22579200, 24576000); uart_clk = clk_get_sys("mxcintuart.0", NULL); early_console_setup(UART1_BASE_ADDR, uart_clk); } static struct sys_timer mxc_timer = { .init = mx51_babbage_timer_init, };

結果是在 arch/arm/mach-mx5/clock.c : mx51_clocks_init : __raw_writel(0, MXC_CCM_CCGR1); __raw_writel(0, MXC_CCM_CCGR2); __raw_writel(0, MXC_CCM_CCGR3); __raw_writel(1 << MXC_CCM_CCGRx_CG8_OFFSET, MXC_CCM_CCGR4); __raw_writel(1 << MXC_CCM_CCGRx_CG2_OFFSET | 1 << MXC_CCM_CCGR5_CG6_1_OFFSET | 1 << MXC_CCM_CCGR5_CG6_2_OFFSET | 3 << MXC_CCM_CCGRx_CG7_OFFSET | 1 << MXC_CCM_CCGRx_CG8_OFFSET | 3 << MXC_CCM_CCGRx_CG9_OFFSET | 1 << MXC_CCM_CCGRx_CG10_OFFSET | 3 << MXC_CCM_CCGRx_CG11_OFFSET, MXC_CCM_CCGR5); __raw_writel(1 << MXC_CCM_CCGRx_CG4_OFFSET, MXC_CCM_CCGR6); 這一段 code ,應該是把 ipu 的 clock 關掉了..

加上 3 << MXC_CCM_CCGRx_CG5_OFFSET 把 IPU的 clock 也打開後,這一段就不會 clean splash screen。
... 但是後面還有人把 splash screen clean..

在 init/main.c : do_initcalls( )。還是會把 screen clean 掉。
這個 function call 是一一呼叫 所有 driver 的 init function。 for (fn = __early_initcall_end; fn < __initcall_end; fn++) { do_one_initcall(*fn); }
查 System.map,可以知道 __early_initcall_end 到 __initcall_end 之間有多少 function.. 518...

姊果是在 cpu_freq,這個disable dvfs 後,舊可以拿掉。
然後.. 卡在 board_io_init....


其實光是把 bootloader disable ipu 的code 拿掉,就有機會在kernel boot 到 cpufreq 時當機,,,

因為 IPU 的 clock 牽扯很多 system clock,所以要維持住 splash screen,不關閉 ipu clk,很多地方會導致當機。

iMX51 linux memory map

寫在arch/arm/plat-mxc/include/mach/mx51.h: /* * MX51 memory map: * * * Virt Phys Size What * --------------------------------------------------------------------------- * FA3E0000 1FFE0000 128K IRAM (SCCv2 RAM) * 30000000 256M GPU * 40000000 512M IPU * FA200000 60000000 1M DEBUG * FB100000 70000000 1M SPBA 0 * FB000000 73F00000 1M AIPS 1 * FB200000 83F00000 1M AIPS 2 * 8FFFC000 16K TZIC (interrupt controller) * 90000000 256M CSD0 SDRAM/DDR * A0000000 256M CSD1 SDRAM/DDR * B0000000 128M CS0 Flash * B8000000 128M CS1 Flash * C0000000 128M CS2 Flash * C8000000 64M CS3 Flash * CC000000 32M CS4 SRAM * CE000000 32M CS5 SRAM * CFFF0000 64K NFC (NAND Flash AXI) * */

2012年3月19日 星期一

try, show u-boot version string in shell

顯示 u-boot 的版本.

預計有以下方法:


u-boot 把自己的版本加在 kernel 開機參數傳給 kernel。
kernel 再把他顯示出來 ?

這樣可以參考 kernel 的 /proc/version,加一個 /proc/ubootversion,直接 cat 出來。
比較方便。

ref : fs/proc/version.c

麻煩的是,kernel command 好像不能傳含space 的字串。
所以格式有限制,
還有 uboot 的 bootcmd 是可以更改的。
所以


u-boot 直接操作 vfat partition ,寫入一個 version 檔?


用 command dd 出某個包含 version code 的 sector ?

ref: http://www.newit.co.uk/forum/index.php?topic=446.0

2012年3月16日 星期五

android 的遠端控制 -- androidscreencast

是從遠端控制 android。
有一個 open source 專案: androidscreencast http://code.google.com/p/androidscreencast/

使用方法是 follow 說明...download sdk,download prebuild 的 androidscreencast.jnlp 然後 run $ javaws androidscreencast.jnlp
就可以了。

在 debian ,和network 有 proxy 的環境執行,java runtime 會 fail ,error 是: .....downdload ... fail ....
是因為 java run time 的 proxy 沒有設定好。

設定 java run time network proxy 的方法...
ref : http://java.com/en/download/help/proxy_setup.xml

在 自己的home目錄 run $ javaws 接著 UI 介面就會起來,follow 上面 link 的方法,選 network . proxy.. 設好後就 OK 了。

有時候會有 mouse, key input 無法控制的問題。
可能有兩個原因:
  • /data/dalvik-cache 權限問題: androidscreencast 的 stub 要對 dalvik-cache 寫入,所以需要這個 folder 的 write 權限, 這個在 androidscreencast 的 project page 有說明
  • screen timeout : screen timeout 後,會 disable input,所以 Dispatcher 會顯示 : event dropped ...., 這個就要 disable screen timeout

一般第一個有關 /data/dalvik-cache 權限的問題,還會有另一個狀況,就是初次開機, /data 是空的,所以 androidscreencast open file/folder 會是 fail。
這個等開完機再連線就可以


debian jessie install oracle jdk6.
java control panel 開啟要用:
$javaws -viewer


另外,那個網站很久沒 mantain, 討論區上有一些說明 porting 到 jelly bean 的方法。
但是要重新 build.
所以 fork 到 github: https://github.com/checko/androidscreencast_org

同時修正 build fail 的地方..


這篇文章有說明如何把jnlp 改成 local, 而不是到 source site download jar.

重點就是那個 codebase https:// ... 改成 file://localhost/home/...

2012年3月7日 星期三

kernel boot fail,,, cannot open root device

常常發生這樣的狀況...
重 build kernel 後,開機 fail,kernel 說找不到 rootfs 所以 mount nfs.. 當然,也是 fail。

查一下 boot log..有..

Unpacking initramfs...
Initramfs unpacking failed: junk in compressed archive
的字樣...

然後 和正常的相比,init 的區域大了許多:
Memory: 443812k/443812k available, 14940k reserved, 0K highmem
Virtual kernel memory layout:
    vector  : 0xffff0000 - 0xffff1000   (   4 kB)
    fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)
    DMA     : 0xf9e00000 - 0xffe00000   (  96 MB)
    vmalloc : 0x9c800000 - 0xf4000000   (1400 MB)
    lowmem  : 0x80000000 - 0x9c000000   ( 448 MB)
    pkmap   : 0x7fe00000 - 0x80000000   (   2 MB)
    modules : 0x7f000000 - 0x7fe00000   (  14 MB)
      .init : 0x80008000 - 0x800f4000   ( 944 kB)
      .text : 0x800f4000 - 0x80937000   (8460 kB)
      .data : 0x80958000 - 0x809b65e0   ( 378 kB)
. 其中 .init 的 end address 比較大。

查了一下...是 增加了 某些 module,讓 size 變大了,所以超出範圍。
,. 這次的例子是增加了 logo...

2012年3月6日 星期二

use custom build sdk

好奇怪,文章都在說怎麼 build 出 sdk,卻沒有人說要怎樣用這個 build 好的 sdk。

所以我也不知道方法,只好用 覆蓋 的方式,用 build 出來的 sdk 把原來的覆蓋掉。

eclipse 啟動後會自動 update android-sdk-linux/platforms/ 下的內容,
所以 copy 過去的 sdk 會出現在 Android SDK Manager 裡 Local Package 的地方 (開啟 repository view)

但是顯示的不是 folder 名子,而是 sdk 版本名,例如: android2.3.3。

專案要指定 sdk 的話,就要在 project properties -- android 中,選 android 2.3.3


ref:
  1. http://mmmyddd.freeshell.net/wiki/android/build.html
  2. http://www.poemcode.net/2010/09/android-sdk-addon/

Android apk 與 簽章

android 上所有的 apk 都要有簽章(sign) 才能安裝。
為了方便 developer,在開發過程,build tool 會用一個SDK 產生的private key 來幫 apk 簽章。

sign 的動作在產生 apk 檔的時候才會作,

Eclipse 在 Run,debug 時才會產生 apk 檔。
  1. Run 的時候,是 Release Mode。這時候sign的key 是...
  2. Debug 的時候,是 debug Mode,這時候用 SDK 的 key 來 sign。
手動簽章的動作,就是在 Eclipse 中,在 project 按右鍵。
Android Tools -- Export Unsigned Application Package

這樣會產生一個沒有簽章的 apk。
然後再手動 sign。

標籤

網誌存檔