- 論壇徽章:
- 0
|
5可用積分
busybox做的initramfs,在啟動(dòng)時(shí)出現(xiàn)問題,停住了。
busybox下的init/init.c中run()運(yùn)行到while(read(0, &c, 1) == 1 && c != '\n');停住了。
追蹤后發(fā)現(xiàn),是運(yùn)行read(0, &c, 1)時(shí)停住了,對(duì)應(yīng)于內(nèi)核中的函數(shù)是drivers/char/tty_io.c中的tty_read()
下面的調(diào)用過程如下:
tty_read() -> read_chan() -> schedule_timeout() -> schedule()最前面的一個(gè) -> 出去后就回不來了。
通過打印信息發(fā)現(xiàn),這個(gè)schedule()讓出后運(yùn)行了另一進(jìn)程,這個(gè)進(jìn)程再次調(diào)用schedule()后,運(yùn)行了第三個(gè)進(jìn)程,然后就不再調(diào)用schedule(),估計(jì)是死循環(huán)在這個(gè)第三個(gè)進(jìn)程中了。
這時(shí),中斷還是可以響應(yīng)的,時(shí)鐘中斷和串口中斷都可以運(yùn)行。但是就是再也回不去接著運(yùn)行tty_read()了。
請(qǐng)問會(huì)死在什么地方呢?應(yīng)該不是死在中斷里面,因?yàn)榭赡艿闹袛嗵幚砗瘮?shù)我都加上了打印語句,沒有發(fā)現(xiàn)哪個(gè)中斷處理程序被調(diào)用。(打印語句不是printk,而是直接寫串口寄存器的程序段)。有沒有什么辦法找出問題?
謝謝了!
具體信息如下:
Auto run second count down: 0
Booting from latest image (0xbe020000) ...
Code Address: 0x80010000, Entry Address: 0x80014430
Decompression OK!
Entry at 0x80014430
Closing network.
Starting program at 0x80014430
Linux version 2.6.27 (root@localhost.localdomain) (gcc version 3.4.2) #483 Fri Jun 12 13:17:04 CST 2009
Parallel flash device: name AM29LV320MT, id 0x2201, size 32768KB
96359PONG prom init
mips_hpt_frequency = 0x8f0d180, r4k_interval = 0x16e360
CPU revision is: 0002a010 (Broadcom BCM635
Determined physical RAM map:
memory: 07fa0000 @ 00000000 (usable)
Initrd not found or empty - disabling initrd
Zone PFN ranges:
Normal 0x00000000 -> 0x00007fa0
Movable zone start PFN for each node
early_node_map[1] active PFN ranges
0: 0x00000000 -> 0x00007fa0
On node 0 totalpages: 32672
free_area_init_node: node 0, pgdat 80148cf0, node_mem_map 81000000
Normal zone: 32416 pages, LIFO batch:7
Built 1 zonelists in Zone order, mobility grouping on. Total pages: 32416
Kernel command line: rdinit=/sbin/init console=ttyS0,115200
Primary instruction cache 32kB, VIPT, 2-way, linesize 16 bytes.
Primary data cache 16kB, 2-way, VIPT, cache aliases, linesize 16 bytes
PID hash table entries: 512 (order: 9, 2048 bytes)
console [ttyS0] enabled
Dentry cache hash table entries: 16384 (order: 4, 65536 bytes)
Inode-cache hash table entries: 8192 (order: 3, 32768 bytes)
Memory: 127416k/130688k available (1081k kernel code, 3100k reserved, 176k data, 440k init, 0k highmem)
Calibrating delay loop... 299.82 BogoMIPS (lpj=1499136)
Mount-cache hash table entries: 512
Total Flash size: 32768K with 512 sectors
File system address: 0xbf000100
msgmni has been set to 249
io scheduler noop registered (default)
brd: module loaded
loop: module loaded
brcmboard: brcm_board_init entry
Serial: BCM63XX driver $Revision: 3.00 $
ttyS0 at MMIO 0xfffe0100 (irq = 10) is a BCM63XX
Freeing unused kernel memory: 440k freed
init started: BusyBox v1.00 (2009.06.10-06:34+0000) multi-call #1
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
這里是響應(yīng)串口收數(shù)據(jù)中斷的打印 |
|