[問題]如何增加記憶體?

我們生活周遭存在太多太多的 embedded system ,過去 embedded system 有專屬的 OS,現在 linux 也可以應用在嵌入式環境,不過本版將廣泛討論所有嵌入式系統不只 linux 喔,歡迎有這方面經驗或有興趣的朋友一同進來討論。

版主: chester

[問題]如何增加記憶體?

文章saturn » 週二 12月 10, 2002 10:52 am

hi all,
我有一塊使用CL的EP7312的板上,現在我想使用 32MB的SDRAM,但boot時就會kernel oops,然後panic掛點。

我現在的作法有二種:
一是利用bootloader(hermit)傳遞mem參數(page數目、大小、記憶體大小等)
,另外bootloader還設定CAS latency、RAM device capacity、device bus width、enable SDRAM controller等。

另一作法是在linux kernel中直接修改 arch/arm/mach-clps711x/edb7211-arch.c
直接設定
mi->bank[0].start = 0xc0000000;
mi->bank[0].size = 32*1024*1024;
mi->bank[0].node = 0;
mi->nr_banks = 1;

然後再configure kernel,在cmdline 設定 mem=32M

以下是 kernel oops
------------------------------
SRAM_LAST value = 12344321
SRAM_LAST value = cddcbaab
Uncompressing Linux...........................................done.
SRAM_LAST value = 34432112
SRAM_LAST value = cddcbaab
Linux version 2.4.19-rmk4 (root@localhost.localdomain) (gcc version 2.95.2 19991024 (release)) #140 Tue Dec 10
09:36:39 CST 2002
CPU: ARM ARM720T revision 2
Machine: CL-EDB7211 (EP7211 eval board)
page_size = 0
PAGE_SIZE = 4096
Warning: bad configuration page, trying to continue
Security risk: creating user accessible mapping for 0x30000000 at 0xfd000000
Security risk: creating user accessible mapping for 0x20000000 at 0xfc000000
Security risk: creating user accessible mapping for 0x00000000 at 0xfa000000
Security risk: creating user accessible mapping for 0x10000000 at 0xfb000000
On node 0 totalpages: 8192
zone(0): 8192 pages.
zone(1): 0 pages.
zone(2): 0 pages.
Kernel command line: root=1f03 mem=32M
Calibrating delay loop... 36.76 BogoMIPS
Memory: 32MB = 32MB total
Memory: 30804KB available (1158K code, 243K data, 40K init)
Dentry cache hash table entries: 4096 (order: 3, 32768 bytes)
Inode cache hash table entries: 2048 (order: 2, 16384 bytes)
Mount-cache hash table entries: 512 (order: 0, 4096 bytes)
Buffer-cache hash table entries: 1024 (order: 0, 4096 bytes)
Page-cache hash table entries: 8192 (order: 3, 32768 bytes)
Unable to handle kernel paging request at virtual address 0002bfa8
pgd = c0024000
*pgd = 00000000, *pmd = 00000000
Internal error: Oops: ffffffff
CPU: 0
pc : [<c00557d8>] lr : [<00001ffe>] Not tainted
sp : c0157f20 ip : 000001ff fp : c0157f48
r10: c0031154 r9 : 00000001 r8 : c1ffe000
r7 : c1ffe000 r6 : 00000001 r5 : c01912c0 r4 : 0002bfa8
r3 : 0000afea r2 : 00000000 r1 : 00004ff6 r0 : 00000008
Flags: NzCv IRQs on FIQs off Mode SVC_32 Segment kernel
Control: 217D Table: C002401D DAC: 0000001D
Process swapper (pid: 0, stack limit = 0xc0156374)
Stack: (0xc0157f20 to 0xc0158000)
7f20: 000001f0 c01912c0 00000000 00000001 60000053 41807202 c0031154 c0157f6c
7f40: c0157f4c c0055ee0 c005566c c013fbf8 00000007 00000000 00000001 00008124
7f60: c0157f94 c0157f70 c007d9ec c0055cf4 c013fbf8 00008124 00000000 c016f808
7f80: c0164588 c0158c44 c0157fb0 c0157f98 c007dbf8 c007d978 c015b790 c007f104
7fa0: 00000000 c0157fcc c0157fb4 c002dd48 c007db90 00000000 c015b6ec c0164594
7fc0: c0157fe4 c0157fd0 c002dbb8 c002dd18 c016d438 c01908d0 c0157ffc c0157fe8
7fe0: c0028644 c002db74 c01649a8 c01908d0 00000000 c0158000 c0028080 c0028558
Backtrace:
Function entered at [<c005565c>] from [<c0055ee0>]
Function entered at [<c0055ce4>] from [<c007d9ec>]
r8 = 00008124 r7 = 00000001 r6 = 00000000 r5 = 00000007
r4 = C013FBF8
Function entered at [<c007d968>] from [<c007dbf8>]
r8 = C0158C44 r7 = C0164588 r6 = C016F808 r5 = 00000000
r4 = 00008124
Function entered at [<c007db80>] from [<c002dd48>]
r5 = 00000000 r4 = C007F104
Function entered at [<c002dd08>] from [<c002dbb8>]
r6 = C0164594 r5 = C015B6EC r4 = 00000000
Function entered at [<c002db64>] from [<c0028644>]
r5 = C01908D0 r4 = C016D438
Function entered at [<c0028548>] from [<c0028080>]
r4 = C01908D0
Code: e5922320 e0833081 e0824103 e3a00008 (e5845000)
Kernel panic: Attempted to kill the idle task!
In idle task - not syncing
-------------------------------------------------
我的一個疑問是bootloader對DRAM的設定在linux kernel的boot.S
還要再執行一遍嗎!?還是bootloader初始過一遍就可以了?

還有這個記憶體問題如何解決!?
我用的kernel是 2.4.19加上rmk4 patch

kind regards,
Saturn
saturn
 

Re: [問題]如何增加記憶體?

文章chester » 週二 12月 10, 2002 11:59 am

saturn 寫:hi all,
我有一塊使用CL的EP7312的板上,現在我想使用 32MB的SDRAM,但boot時就會kernel oops,然後panic掛點。

我現在的作法有二種:
一是利用bootloader(hermit)傳遞mem參數(page數目、大小、記憶體大小等)
,另外bootloader還設定CAS latency、RAM device capacity、device bus width、enable SDRAM controller等。

另一作法是在linux kernel中直接修改 arch/arm/mach-clps711x/edb7211-arch.c
直接設定
mi->bank[0].start = 0xc0000000;
mi->bank[0].size = 32*1024*1024;
mi->bank[0].node = 0;
mi->nr_banks = 1;

然後再configure kernel,在cmdline 設定 mem=32M

以下是 kernel oops
------------------------------
SRAM_LAST value = 12344321
SRAM_LAST value = cddcbaab
Uncompressing Linux...........................................done.
SRAM_LAST value = 34432112
SRAM_LAST value = cddcbaab
Linux version 2.4.19-rmk4 (root@localhost.localdomain) (gcc version 2.95.2 19991024 (release)) #140 Tue Dec 10
09:36:39 CST 2002
CPU: ARM ARM720T revision 2
Machine: CL-EDB7211 (EP7211 eval board)
page_size = 0
PAGE_SIZE = 4096
Warning: bad configuration page, trying to continue
Security risk: creating user accessible mapping for 0x30000000 at 0xfd000000
Security risk: creating user accessible mapping for 0x20000000 at 0xfc000000
Security risk: creating user accessible mapping for 0x00000000 at 0xfa000000
Security risk: creating user accessible mapping for 0x10000000 at 0xfb000000
On node 0 totalpages: 8192
zone(0): 8192 pages.
zone(1): 0 pages.
zone(2): 0 pages.
Kernel command line: root=1f03 mem=32M
Calibrating delay loop... 36.76 BogoMIPS
Memory: 32MB = 32MB total
Memory: 30804KB available (1158K code, 243K data, 40K init)
Dentry cache hash table entries: 4096 (order: 3, 32768 bytes)
Inode cache hash table entries: 2048 (order: 2, 16384 bytes)
Mount-cache hash table entries: 512 (order: 0, 4096 bytes)
Buffer-cache hash table entries: 1024 (order: 0, 4096 bytes)
Page-cache hash table entries: 8192 (order: 3, 32768 bytes)
Unable to handle kernel paging request at virtual address 0002bfa8
pgd = c0024000
*pgd = 00000000, *pmd = 00000000
Internal error: Oops: ffffffff
CPU: 0
pc : [<c00557d8>] lr : [<00001ffe>] Not tainted
sp : c0157f20 ip : 000001ff fp : c0157f48
r10: c0031154 r9 : 00000001 r8 : c1ffe000
r7 : c1ffe000 r6 : 00000001 r5 : c01912c0 r4 : 0002bfa8
r3 : 0000afea r2 : 00000000 r1 : 00004ff6 r0 : 00000008
Flags: NzCv IRQs on FIQs off Mode SVC_32 Segment kernel
Control: 217D Table: C002401D DAC: 0000001D
Process swapper (pid: 0, stack limit = 0xc0156374)
Stack: (0xc0157f20 to 0xc0158000)
7f20: 000001f0 c01912c0 00000000 00000001 60000053 41807202 c0031154 c0157f6c
7f40: c0157f4c c0055ee0 c005566c c013fbf8 00000007 00000000 00000001 00008124
7f60: c0157f94 c0157f70 c007d9ec c0055cf4 c013fbf8 00008124 00000000 c016f808
7f80: c0164588 c0158c44 c0157fb0 c0157f98 c007dbf8 c007d978 c015b790 c007f104
7fa0: 00000000 c0157fcc c0157fb4 c002dd48 c007db90 00000000 c015b6ec c0164594
7fc0: c0157fe4 c0157fd0 c002dbb8 c002dd18 c016d438 c01908d0 c0157ffc c0157fe8
7fe0: c0028644 c002db74 c01649a8 c01908d0 00000000 c0158000 c0028080 c0028558
Backtrace:
Function entered at [<c005565c>] from [<c0055ee0>]
Function entered at [<c0055ce4>] from [<c007d9ec>]
r8 = 00008124 r7 = 00000001 r6 = 00000000 r5 = 00000007
r4 = C013FBF8
Function entered at [<c007d968>] from [<c007dbf8>]
r8 = C0158C44 r7 = C0164588 r6 = C016F808 r5 = 00000000
r4 = 00008124
Function entered at [<c007db80>] from [<c002dd48>]
r5 = 00000000 r4 = C007F104
Function entered at [<c002dd08>] from [<c002dbb8>]
r6 = C0164594 r5 = C015B6EC r4 = 00000000
Function entered at [<c002db64>] from [<c0028644>]
r5 = C01908D0 r4 = C016D438
Function entered at [<c0028548>] from [<c0028080>]
r4 = C01908D0
Code: e5922320 e0833081 e0824103 e3a00008 (e5845000)
Kernel panic: Attempted to kill the idle task!
In idle task - not syncing
-------------------------------------------------
我的一個疑問是bootloader對DRAM的設定在linux kernel的boot.S
還要再執行一遍嗎!?還是bootloader初始過一遍就可以了?

還有這個記憶體問題如何解決!?
我用的kernel是 2.4.19加上rmk4 patch

kind regards,
Saturn


在 arm-linux 的架構中,memory system 的所有設定都應該在 booting 時
就需做好了,也就是說 DRAM/SRAM/flash 的設定都需在 bootloader 中就
做好了.
在 arm-linux kernel 中並不會去對 memory controller 有做任何的設定.

利用 oops 的訊息查一下相對應的 System.map 去找出function 出來.
所從 PC register 中的值找起.
CK.
頭像
chester
版面大總管
版面大總管
 
文章: 56
註冊時間: 週四 11月 14, 2002 9:42 pm
來自: taipei

re:[問題]如何增加記憶體?

文章訪客 » 週二 12月 10, 2002 4:04 pm

謝謝您的回答!
bootloader那我也作了修改,改為32MB,但似乎沒有成效。
至於你說的 System.map,也去對應過了,沒找到對應的symbol
只知道是在那個function之間發生問題~trace下去發現似乎是在context switch時出問題!
我再看看好了~~ 謝謝啦~
訪客
 

re:[問題]如何增加記憶體?

文章chester » 週三 12月 11, 2002 9:21 am

Anonymous 寫:謝謝您的回答!
bootloader那我也作了修改,改為32MB,但似乎沒有成效。
至於你說的 System.map,也去對應過了,沒找到對應的symbol
只知道是在那個function之間發生問題~trace下去發現似乎是在context switch時出問題!
我再看看好了~~ 謝謝啦~


bootloader 那所設的 memory size 基本上是和 kernel 是沒有關係的,
一旦 bootloader 設定好 memory size 的話,它才有辦法去做 memory
clear,的動作.
簡單來說,就算是沒有 bootloader 的話,我只要我的 booting 有做到
memory contoller setup complete 就可以.

另外,你可以查一下到底這個 kernel panic 是 data abort exception or
prefetch abort exception or undef abort exception.
通常的情況都是 data abort exception,如果是 data abort exception 的話
,那麼記得把 PC-0x8 ,再去看看相對應的 system map.

最後,看你 post 出來的 error message ,似乎 kernel 還沒 fork 出新的
kernel thread 出來,應該不會有 context switch 的動作吧...! :shock:
CK.
頭像
chester
版面大總管
版面大總管
 
文章: 56
註冊時間: 週四 11月 14, 2002 9:42 pm
來自: taipei

re:[問題]如何增加記憶體?

文章jesse.sung » 週三 12月 11, 2002 1:02 pm

會不會是這個造成的呢?
Unable to handle kernel paging request at virtual address 0002bfa8
頭像
jesse.sung
程式開發組
程式開發組
 
文章: 654
註冊時間: 週三 9月 04, 2002 9:43 am

re:[問題]如何增加記憶體?

文章brian » 週三 12月 11, 2002 2:50 pm

chester 寫:bootloader 那所設的 memory size 基本上是和 kernel 是沒有關係的,
一旦 bootloader 設定好 memory size 的話,它才有辦法去做 memory
clear,的動作.
簡單來說,就算是沒有 bootloader 的話,我只要我的 booting 有做到
memory contoller setup complete 就可以.

另外,你可以查一下到底這個 kernel panic 是 data abort exception or
prefetch abort exception or undef abort exception.
通常的情況都是 data abort exception,如果是 data abort exception 的話
,那麼記得把 PC-0x8 ,再去看看相對應的 system map.

最後,看你 post 出來的 error message ,似乎 kernel 還沒 fork 出新的
kernel thread 出來,應該不會有 context switch 的動作吧...! :shock:


你的意思是說bootloader作好正確的setup,kernel就不需設定。
而若bootloader沒作設定,kernel就需自己作設定,是不是!?

對不起!我之前看錯了,看樣子是死在kmem_grow_cache();
它backtrace的結果是這樣的...
kmem_grow_cache()<-kmalloc()<-proc_create()<-proc_misc_init()<-proc_root_init()<-start_kernel()

我該如何下手呢!?一個一個trace,還是各位有任何的見議!?
謝謝!

Brian
brian
 

re:[問題]如何增加記憶體?

文章saturn » 週三 12月 11, 2002 3:24 pm

這是ksymoops的結果..

>>EIP; c0055804 <kmem_cache_grow+1ac/4a8> <=====
>>r10; c0031154 <__arm720_proc_info+0/0>
Trace; c005565c <kmem_cache_grow+4/4a8>
Trace; c0055fb8 <kmalloc+200/240>
Trace; c0055dbc <kmalloc+4/240>
Trace; c007dac0 <proc_create+80/c4>
Trace; c007da3c <proc_kill_inodes+ac/b0>
Trace; c007dccc <create_proc_entry+74/b8>
Trace; c007dc54 <proc_mkdir+64/68>
Trace; c002dd48 <proc_misc_init+40/180>
Trace; c002dd08 <proc_misc_init+0/180>
Trace; c002dbb8 <proc_root_init+54/f0>
Trace; c002db64 <proc_root_init+0/f0>
Trace; c0028644 <start_kernel+fc/144>
Trace; c0028548 <start_kernel+0/144>
Trace; c0028080 <__mmap_switched+0/30>
Code; c00557f4 <kmem_cache_grow+19c/4a8>
00000000 <_EIP>:
Code; c00557f4 <kmem_cache_grow+19c/4a8>
0: 81 30 83 e0 03 41 xorl $0x4103e083,(%eax)
Code; c00557fa <kmem_cache_grow+1a2/4a8>
6: 82 (bad)
Code; c00557fb <kmem_cache_grow+1a3/4a8>
7: e0 18 loopne 21 <_EIP+0x21> c0055815 <kmem_cache_grow+1bd/4a8>
Code; c00557fd <kmem_cache_grow+1a5/4a8>
9: 02 9f e5 e2 a5 ff add 0xffa5e2e5(%edi),%bl
Code; c0055803 <kmem_cache_grow+1ab/4a8> <=====
f: eb 00 jmp 11 <_EIP+0x11> c0055805 <kmem_cache_grow+1ad/4a8> <=====
Code; c0055805 <kmem_cache_grow+1ad/4a8>
11: 50 push %eax
Code; c0055806 <kmem_cache_grow+1ae/4a8>
12: 84 e5 test %ah,%ch

Kernel panic: Attempted to kill the idle task!
saturn
可愛的小學生
可愛的小學生
 
文章: 11
註冊時間: 週二 12月 10, 2002 4:10 pm

re:[問題]如何增加記憶體?

文章chester » 週三 12月 11, 2002 4:33 pm

brian 寫:
chester 寫:bootloader 那所設的 memory size 基本上是和 kernel 是沒有關係的,
一旦 bootloader 設定好 memory size 的話,它才有辦法去做 memory
clear,的動作.
簡單來說,就算是沒有 bootloader 的話,我只要我的 booting 有做到
memory contoller setup complete 就可以.

另外,你可以查一下到底這個 kernel panic 是 data abort exception or
prefetch abort exception or undef abort exception.
通常的情況都是 data abort exception,如果是 data abort exception 的話
,那麼記得把 PC-0x8 ,再去看看相對應的 system map.

最後,看你 post 出來的 error message ,似乎 kernel 還沒 fork 出新的
kernel thread 出來,應該不會有 context switch 的動作吧...! :shock:


你的意思是說bootloader作好正確的setup,kernel就不需設定。
而若bootloader沒作設定,kernel就需自己作設定,是不是!?

對不起!我之前看錯了,看樣子是死在kmem_grow_cache();
它backtrace的結果是這樣的...
kmem_grow_cache()<-kmalloc()<-proc_create()<-proc_misc_init()<-proc_root_init()<-start_kernel()

我該如何下手呢!?一個一個trace,還是各位有任何的見議!?
謝謝!

Brian


不好意思,講得不是很清楚...
換個方式來講好了,
bootloader 其中之一的工作就是把 DRAM/SRAM 設定好,那麼設定 DRAM/SRAM 的方式就是得要把 memory controller 給搞定,
等到 memory system 一切得 ready 了以後,我們就可以開始對 DRAM/SRAM 部分做讀取的動作了.....
也就是說其實在 bootloader 設定 memory size ,是給 bootloader 用的.

而在 linux kernel 中要填 memory size 是讓 kernel 知道它到底有多少的
physical memory 可用.(linux kernel 是假設說 DRAM/SRAM 都是
己經設定好可以做讀取和寫入動作).

總結來說,二個都要設.

那麼至於你的問題,初步想法是 memory mapping 設錯了.


PS.如果說你回復到最開始的狀態也會有這樣的情形嗎??
CK.
頭像
chester
版面大總管
版面大總管
 
文章: 56
註冊時間: 週四 11月 14, 2002 9:42 pm
來自: taipei

re:[問題]如何增加記憶體?

文章saturn » 週三 12月 11, 2002 4:59 pm

chester 寫:不好意思,講得不是很清楚...
換個方式來講好了,
bootloader 其中之一的工作就是把 DRAM/SRAM 設定好,那麼設定 DRAM/SRAM 的方式就是得要把 memory controller 給搞定,
等到 memory system 一切得 ready 了以後,我們就可以開始對 DRAM/SRAM 部分做讀取的動作了.....
也就是說其實在 bootloader 設定 memory size ,是給 bootloader 用的.

而在 linux kernel 中要填 memory size 是讓 kernel 知道它到底有多少的
physical memory 可用.(linux kernel 是假設說 DRAM/SRAM 都是
己經設定好可以做讀取和寫入動作).

總結來說,二個都要設.

那麼至於你的問題,初步想法是 memory mapping 設錯了.


PS.如果說你回復到最開始的狀態也會有這樣的情形嗎??


您說的memory mapping指的是!?
我不瞭解,是指arch/arm/mach-clps711x/edb7211-mm.c裡的mapping 嗎!?是它嗎!?static struct map_desc edb7211_io_desc[] __initdata = {
/* virtual, physical, length, domain, r, w, c, b */


/* memory-mapped extra keyboard row and CS8900A Ethernet chip */
{ EP7211_VIRT_EXTKBD, EP7211_PHYS_EXTKBD, MB1, DOMAIN_IO, 1, 1, 0, 0 },
{ EP7211_VIRT_CS8900A, EP7211_PHYS_CS8900A, MB1, DOMAIN_IO, 1, 1, 0, 0 },

/* flash banks */
{ EP7211_VIRT_FLASH1, EP7211_PHYS_FLASH1, MB1 * 4, DOMAIN_KERNEL, 1, 1, 0, 0 },
{ EP7211_VIRT_FLASH2, EP7211_PHYS_FLASH2, MB1 * 8, DOMAIN_KERNEL, 1, 1, 0, 0 },

{ EP7211_VIRT_SMC911C_1, EP7211_PHYS_SMC911C_1, MB1, DOMAIN_IO, 1, 0, 0, 0 },
LAST_DESC
};

---------------------------

Brian
saturn
可愛的小學生
可愛的小學生
 
文章: 11
註冊時間: 週二 12月 10, 2002 4:10 pm

re:[問題]如何增加記憶體?

文章chester » 週三 12月 11, 2002 6:14 pm

您說的memory mapping指的是!?
我不瞭解,是指arch/arm/mach-clps711x/edb7211-mm.c裡的mapping 嗎!?是它嗎!?static struct map_desc edb7211_io_desc[] __initdata = {
/* virtual, physical, length, domain, r, w, c, b */


/* memory-mapped extra keyboard row and CS8900A Ethernet chip */
{ EP7211_VIRT_EXTKBD, EP7211_PHYS_EXTKBD, MB1, DOMAIN_IO, 1, 1, 0, 0 },
{ EP7211_VIRT_CS8900A, EP7211_PHYS_CS8900A, MB1, DOMAIN_IO, 1, 1, 0, 0 },

/* flash banks */
{ EP7211_VIRT_FLASH1, EP7211_PHYS_FLASH1, MB1 * 4, DOMAIN_KERNEL, 1, 1, 0, 0 },
{ EP7211_VIRT_FLASH2, EP7211_PHYS_FLASH2, MB1 * 8, DOMAIN_KERNEL, 1, 1, 0, 0 },

{ EP7211_VIRT_SMC911C_1, EP7211_PHYS_SMC911C_1, MB1, DOMAIN_IO, 1, 0, 0, 0 },
LAST_DESC
};

---------------------------

Brian[/quote]


不是,這一部分是 I/O memory mapping.

有幾個方法可以找出問題點..
1.恢復到原始的狀態,也就是說板子不加 memory 的情況下,會發生什麼情形..
2.如果可以正常 booting 的話,那麼在試試看把板子上的memory 加上去,
其它的都不會改變,那麼會發生什麼情形呢??

PS.從 Oops 的message 看出,pgd/pgm 都是 NULL ,也就是說所指到的
memory address 是 non mapping 的,所以我才會說可能是
memory mapping 的問題...
CK.
頭像
chester
版面大總管
版面大總管
 
文章: 56
註冊時間: 週四 11月 14, 2002 9:42 pm
來自: taipei

re:[問題]如何增加記憶體?

文章saturn » 週五 12月 13, 2002 11:58 am

chester 寫:不是,這一部分是 I/O memory mapping.

有幾個方法可以找出問題點..
1.恢復到原始的狀態,也就是說板子不加 memory 的情況下,會發生什麼情形..
2.如果可以正常 booting 的話,那麼在試試看把板子上的memory 加上去,
其它的都不會改變,那麼會發生什麼情形呢??

PS.從 Oops 的message 看出,pgd/pgm 都是 NULL ,也就是說所指到的
memory address 是 non mapping 的,所以我才會說可能是
memory mapping 的問題...


對不起! 你可能誤會了我的意思了!我原本是 16MB現增為 32MB但增為 32MB
就無法開機了!16MB的版子可以正常開機。

Brian
saturn
可愛的小學生
可愛的小學生
 
文章: 11
註冊時間: 週二 12月 10, 2002 4:10 pm

re:[問題]如何增加記憶體?

文章chester » 週五 12月 13, 2002 2:31 pm

saturn 寫:
chester 寫:不是,這一部分是 I/O memory mapping.

有幾個方法可以找出問題點..
1.恢復到原始的狀態,也就是說板子不加 memory 的情況下,會發生什麼情形..
2.如果可以正常 booting 的話,那麼在試試看把板子上的memory 加上去,
其它的都不會改變,那麼會發生什麼情形呢??

PS.從 Oops 的message 看出,pgd/pgm 都是 NULL ,也就是說所指到的
memory address 是 non mapping 的,所以我才會說可能是
memory mapping 的問題...


對不起! 你可能誤會了我的意思了!我原本是 16MB現增為 32MB但增為 32MB
就無法開機了!16MB的版子可以正常開機。

Brian


你是指不一樣的 memory size on board ,但是都是用同一份 kernel 嗎??
(可以把這些 message dump 出來嗎??)

另外,memory 型號有沒有換呢??

再試試看把 CONFIG_DEBUG_KERNEL and CONFIG_DEBUG_SLAB
CONFIG_DEBUG_BUGVERBOSE這些選項打開來..
CK.
頭像
chester
版面大總管
版面大總管
 
文章: 56
註冊時間: 週四 11月 14, 2002 9:42 pm
來自: taipei

re:[問題]如何增加記憶體?

文章saturn » 週五 12月 13, 2002 6:22 pm

chester 寫:你是指不一樣的 memory size on board ,但是都是用同一份 kernel 嗎??
(可以把這些 message dump 出來嗎??)

另外,memory 型號有沒有換呢??

再試試看把 CONFIG_DEBUG_KERNEL and CONFIG_DEBUG_SLAB
CONFIG_DEBUG_BUGVERBOSE這些選項打開來..


兩張板子只有記憶大小不同,一張16、另一張32MB
至於 kernel部份,在general setup那設定mem大小,CONFIG_CMDLINE="root=1f03 mem=16M rw
這個16M版本的 kernel兩張版子都能跑!
但configure 成32M
CONFIG_CMDLINE="root=1f03 mem=32M rw
32MB那張版子會出之前所說的error
兩個kernel的差異只在mem的設定。

至於你說的message dump,是指什麼!?
我不懂!請你明示!

記憶體有換 原本是 MT 48LC4M16A2 *2
改成 MT 48LC8M16A2 *2

您上述的 DEBUG 選項我都有開!

謝謝!你的回應!

Brian
saturn
可愛的小學生
可愛的小學生
 
文章: 11
註冊時間: 週二 12月 10, 2002 4:10 pm

re:[問題]如何增加記憶體?

文章訪客 » 週六 12月 14, 2002 7:10 pm

saturn 寫:
兩張板子只有記憶大小不同,一張16、另一張32MB
至於 kernel部份,在general setup那設定mem大小,CONFIG_CMDLINE="root=1f03 mem=16M rw
這個16M版本的 kernel兩張版子都能跑!
但configure 成32M
CONFIG_CMDLINE="root=1f03 mem=32M rw
32MB那張版子會出之前所說的error
兩個kernel的差異只在mem的設定。

至於你說的message dump,是指什麼!?
我不懂!請你明示!

記憶體有換 原本是 MT 48LC4M16A2 *2
改成 MT 48LC8M16A2 *2

您上述的 DEBUG 選項我都有開!

謝謝!你的回應!

Brian


嗯.....有趣的現象!
現在先來 try 一下是 hardware 有問題呢?? 還是 software (kernel)有bugs??

如果可以的話,先來單純使用 bootloader 來測試 SDRAM .
(確定可以用 bootloader 來 access (讀及寫)所有的 16M/32M SDRAM).
這樣做的目的是想要確認 SDRAM 是正常,且 Memory controller 是正確被
設定的.

如果是沒問題的話,那麼使用這個沒有問題的 bootloader 配合著
linux-2.4.19-rmk4 ,(kernel 部分也請不要修改任何東西,不用傳參數)
看看到底同一份的 kernel 會不會有不同的結果...

----------
--CK
訪客
 

re:[問題]如何增加記憶體?

文章saturn » 週四 12月 19, 2002 1:37 pm

Anonymous 寫:嗯.....有趣的現象!
現在先來 try 一下是 hardware 有問題呢?? 還是 software (kernel)有bugs??

如果可以的話,先來單純使用 bootloader 來測試 SDRAM .
(確定可以用 bootloader 來 access (讀及寫)所有的 16M/32M SDRAM).
這樣做的目的是想要確認 SDRAM 是正常,且 Memory controller 是正確被
設定的.

如果是沒問題的話,那麼使用這個沒有問題的 bootloader 配合著
linux-2.4.19-rmk4 ,(kernel 部分也請不要修改任何東西,不用傳參數)
看看到底同一份的 kernel 會不會有不同的結果...

----------
--CK


那請問該如何寫測試程式!?用組合語言嗎!?還是用c寫!?
可否明示整個大概的流程!?

謝謝!
Brian
saturn
可愛的小學生
可愛的小學生
 
文章: 11
註冊時間: 週二 12月 10, 2002 4:10 pm

下一頁

回到 embedded system

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客