ubuntu 在 R40e 上 還有 Debian 在 Sempron 2600 上

2011年9月30日 星期五

看來好像掛掉。
再 trace 一下 mailinglist:

LKML 的一封:https://lkml.org/lkml/2011/5/21/69
"Rafael J. Wysocki" <>
Subject	[PATCH 0/3] Hibernate cleanups
Date	Sat, 21 May 2011 14:08:28 +0200

Hi,

Following are three hibernate patches I didn't have the time to
work on before.

[1/3] - Update comments in kernel/power/hibernate.c
[2/3] - Remove arch_prepare_suspend()
[3/3] - Update kerneldoc comments in kernel/power/hibernate.c

Since they don't make any functional changes, I don't think it makes sense
to wait with them for the next merge window, so I'd like to push them
for 2.6.40 if no one objects.

Thanks,
Rafael
慘的是..後來 Linus 宣佈沒有 2.6.40,而是 3.0 ...

LKML 的 interface 很好心,會把相關的 repy-discuss 放在一個 tree (頁面的左邊),每點一個 message,要是裡面包含 path,就會出現一個 "diff" 的link,讓你把 patch 拿下來。




這是samsung 基於那個 NOKIA initial work 所做的:
http://permalink.gmane.org/gmane.linux.power-management.general/22773

有提到那個 lds.S 修改。另外他還加上 A9 的 support。


還有 ,當 使用 eMMC /SD 作 resume partition 時,要等待 driver ready,所以
http://www.spinics.net/lists/arm-kernel/msg142548.html

這個 patch 加上 resumewait 參數,等 dev open success..

bookmark : kernel pm mantainer 說明 suspend, hibernation

寫在 https://lkml.org/lkml/2006/7/25/105

bookmark : webcore 導致 browser 當機,VM 重開問題

這個中國人有解答:
http://blog.csdn.net/a345017062/article/details/6394864

問題有列在 google code issue tracker :
http://code.google.com/p/android/issues/detail?id=12987

大概是 java function return class not match 問題。

不過他很大方的寫出 trace bug 的方法,可以學一下。
說要加上 Will Deacon 的 cpu_reset patch。
查一下,在 arch/arm/mm

誰用到?

宣告的地方:./arch/arm/include/asm/cpu-single.h #ifdef __STDC__ #define __catify_fn(name,x) name##x #else #define __catify_fn(name,x) name/**/x #endif #define __cpu_fn(name,x) __catify_fn(name,x) /* * If we are supporting multiple CPUs, then we must use a table of * function pointers for this lot. Otherwise, we can optimise the * table away. */ #define cpu_proc_init __cpu_fn(CPU_NAME,_proc_init) #define cpu_proc_fin __cpu_fn(CPU_NAME,_proc_fin) #define cpu_reset __cpu_fn(CPU_NAME,_reset) #define cpu_do_idle __cpu_fn(CPU_NAME,_do_idle) #define cpu_dcache_clean_area __cpu_fn(CPU_NAME,_dcache_clean_area) #define cpu_do_switch_mm __cpu_fn(CPU_NAME,_switch_mm) #define cpu_set_pte_ext __cpu_fn(CPU_NAME,_set_pte_ext) #include struct mm_struct; /* declare all the functions as extern */ extern void cpu_proc_init(void); extern void cpu_proc_fin(void); extern int cpu_do_idle(void); extern void cpu_dcache_clean_area(void *, int); extern void cpu_do_switch_mm(unsigned long pgd_phys, struct mm_struct *mm); extern void cpu_set_pte_ext(pte_t *ptep, pte_t pte, unsigned int ext); extern void cpu_reset(unsigned long addr) __attribute__((noreturn)); 所以 cpu_reset( ) 會變成 CPU_NAME_reset

CPU_NAME 定義在 ./arch/arm/include/asm/proc-fns.h # ifdef CONFIG_CPU_V6 # ifdef CPU_NAME # undef MULTI_CPU # define MULTI_CPU # else # define CPU_NAME cpu_v6 # endif # endif # ifdef CONFIG_CPU_V7 # ifdef CPU_NAME # undef MULTI_CPU # define MULTI_CPU # else # define CPU_NAME cpu_v7 # endif # endif 所以 cortext A8 的 kernel config 是: CONFIG_CPU_V7=y 也就是會變成 cpu_v7_reset( )

所以 assembly 的部份要看 cpu_v7_reset, c source 的部份要看 cpu_reset ().
.. 有一堆 source call cpu_reset...



ref:
  1. http://comments.gmane.org/gmane.linux.ports.arm.kernel/119552
  2. http://lists.infradead.org/pipermail/linux-arm-kernel/2011-July/057302.html

2011年9月29日 星期四

build TINY_ANDROID && some worklog on hibernate

問題應該還是在 kernel,android framework 在 suspend/resume 好像沒有限制,只有在特殊的情況會用 wakelock 防止suspend (跟hardware 相關,或是 charging)。
其他部份好像都無關 (pure software component ?)



BUILD_TINY_ANDROID
make -j4 BUILD_TINY_ANDROID=true TARGET_NO_RECOVERY=true showcommands 來 build TINY_ANDROID。
 TINY_ANDROID 不會rebuild recovery,但是 Makefile 卻還是去 make recoveryimage,所以要手動加上 TARGET_NO_RECOVERY=true

build 出來後,到 out 去看 installed-files,果然有一堆沒包 (vimdiff with original build result)


兩個問題:
  1. pmic_adc 在 resume 的時候會 hang 住一陣子
  2. resume 後,shell , rx 沒動作 ,tx好像還 OK,-- 從 shell 的 output 來看

about pmic_adc:
  1. 先回到 resume OK 版本 -- 至少 screen 恢復
  2. 移除 pmic_backlight 和 pmic_XXX (?) -- 看看是否OK
  3. pmic_adc 的 suspend/resume 似乎是以 adc wq 不終止的情況 考慮....

2011年9月28日 星期三

enable LL (Low Level Debugging 後): /toolchain/arm-eabi-4.4.3/bin/arm-eabi-gcc -Wp,-MD,arch/arm/kernel/.debug.o.d -nostdinc -isystem /toolchain/arm-eabi-4.4.3/bin/../lib/gcc/arm-eabi/4.4.3/include -I/kernel_imx/arch/arm/include -Iinclude -include include/generated/autoconf.h -D__KERNEL__ -mlittle-endian -Iarch/arm/mach-mx5/include -Iarch/arm/plat-mxc/include -D__ASSEMBLY__ -mabi=aapcs-linux -mno-thumb-interwork -funwind-tables -D__LINUX_ARM_ARCH__=7 -march=armv7-a -include asm/unified.h -msoft-float -c -o arch/arm/kernel/debug.o arch/arm/kernel/debug.S /toolchain/arm-eabi-4.4.3/bin/arm-eabi-gcc -Wp,-MD,arch/arm/mm/.iomap.o.d -nostdinc -isystem /toolchain/arm-eabi-4.4.3/bin/../lib/gcc/arm-eabi/4.4.3/include -I/kernel_imx/arch/arm/include -Iinclude -include include/generated/autoconf.h -D__KERNEL__ -mlittle-endian -Iarch/arm/mach-mx5/include -Iarch/arm/plat-mxc/include -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -fno-delete-null-pointer-checks -Os -marm -mabi=aapcs-linux -mno-thumb-interwork -funwind-tables -D__LINUX_ARM_ARCH__=7 -march=armv7-a -msoft-float -Uarm -Wframe-larger-than=1024 -fno-stack-protector -fomit-frame-pointer -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fconserve-stack -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(iomap)" -D"KBUILD_MODNAME=KBUILD_STR(iomap)" -c -o arch/arm/mm/.tmp_iomap.o arch/arm/mm/iomap.c arch/arm/kernel/debug.S: Assembler messages: arch/arm/kernel/debug.S:167: Error: garbage following instruction -- `ldrne r3,=MX51_AIPS1_IO_ADDRESS(MX51_UART1_BASE_ADDR)' arch/arm/kernel/debug.S:183: Error: garbage following instruction -- `ldrne r3,=MX51_AIPS1_IO_ADDRESS(MX51_UART1_BASE_ADDR)' make[1]: *** [arch/arm/kernel/debug.o] Error 1 make: *** [arch/arm/kernel] Error 2 make: *** Waiting for unfinished jobs.... trace debug.S :167 addruart r3, r1 addruart 定義在 debug-macro.S: .macro addruart, rx, tmp mrc p15, 0, \rx, c1, c0 tst \rx, #1 @ MMU enabled? ldreq \rx, =UART_PADDR @ physical ldrne \rx, =UART_VADDR @ virtual 所以是 UART_VADDR 的定義: (debug-macro.S): #include #define UART_PADDR MX51_UART1_BASE_ADDR #define UART_VADDR MX51_AIPS1_IO_ADDRESS(MX51_UART1_BASE_ADDR) 的 MX51_AIPS1_IO_ADDRESS( ) 沒有展開 (定義)。
這個是定義在 mx51.h。
用 git blame 找一下 debug-macro.S ,發現原來是 include mx51.h ,後來在新增 mx5x.h 後,才改為 include mx51.h..

改回去就 build OK...
... 但是..

在 boot argument 加上 earlyprintk 後,bootmessage 在 Uncompressing Linxu... done, booting the kernel. 後,就沒有 message 了...
  1. 先看一下 _LL 造成 Assembly MACRO 展開的 error : 大概看一下就好
  2. 加上 framework, build 一版,注意 partition 問題。 recovery partition不能用,不然就要重新 partition
  3. 那個 DPLL 的 patch 有沒有上

標籤

網誌存檔