查看: 6028|回复: 95
|
移植 Linux 到 Broadcom MIPS SoC -- Kernel Panic
[复制链接]
|
|
我試著將 linux-2.6.30.2 移植到 Broadcom SoC -- MIPS3302, 在 menuconfig 里我選擇 bcm47xx target 為範本, 一開始都算順利, 在修改 Early Printk, Serial driver 和 Timer 後, 總算是可以看到開機訊息, 但是當 kernel 要跳到 userspace 的 /init 時卻出現 kernel panic , 不知各位大大可否指點一下, 我也不知道問題出在哪了
我盡量將工作環境和資訊描述清楚, 希望對各位的判斷有幫助
Host : Fedora release 10 (Cambridge),
Kernel 2.6.27.29-170.2.79.fc10.x86_64 on an x86_64 (2)
Cross compiler : mipsel-unknown-linux-gnu-gcc version 4.3.2 (由 crosstool-ng-1.4.1 產生)
Linux kernel : linux-2.6.30.2 (在 Linux MIPS 的 main page 下載)
BusyBox : 1.10.3
我將 busybox 編譯成 static library 並存放在 initramfs 目錄下
過後在 linux-2.6.30.2 目錄下通過 make menuconfig 將 initramfs source 指到 initramfs 目錄.
這之後再透過 make 產生 vmlinux 檔. 將這檔透過 tftp 載到 target board. 開機訊息如下 :
Linux version 2.6.30.2 (tanks@F10-Server) (gcc version 4.3.2 (crosstool-NG-1.4.9
console [early0] enabled
CPU revision is: 0002901a (Broadcom BCM3302)
ssb: Initializing MIPS core...
ssb: Sonics Silicon Backplane found at address 0x18000000
Determined physical RAM map:
memory: 02000000 @ 00000000 (usable)
User-defined physical RAM map:
memory: 02000000 @ 00000000 (usable)
Initrd not found or empty - disabling initrd
Zone PFN ranges:
Normal 0x00000000 -> 0x00002000
Movable zone start PFN for each node
early_node_map[1] active PFN ranges
0: 0x00000000 -> 0x00002000
Built 1 zonelists in Zone order, mobility grouping on. Total pages: 8128
Kernel command line: console=ttyS0,9600 mem=32M
Primary instruction cache 32kB, VIPT, 4-way, linesize 16 bytes.
Primary data cache 32kB, 2-way, VIPT, cache aliases, linesize 16 bytes
NR_IRQS:128
PID hash table entries: 128 (order: 7, 512 bytes)
Dentry cache hash table entries: 4096 (order: 2, 16384 bytes)
Inode-cache hash table entries: 2048 (order: 1, 8192 bytes)
Memory: 28848k/32768k available (1369k kernel code, 3920k reserved, 279k data, )
Calibrating delay loop... 530.43 BogoMIPS (lpj=1060864)
Mount-cache hash table entries: 512
Initializing cgroup subsys ns
Initializing cgroup subsys cpuacct
bio: create slab <bio-0> at 0
JFFS2 version 2.2. (NAND) © 2001-2006 Red Hat, Inc.
io scheduler noop registered
io scheduler anticipatory registered
io scheduler deadline registered
io scheduler cfq registered (default)
Serial: 8250/16550 driver, 1 ports, IRQ sharing disabled
serial8250.0: ttyS0 at MMIO 0xb8000300 (irq = 3) is a 16550A
console handover: boot [early0] -> real [ttyS0]ity, n flowcontrol
Freeing unused kernel memory: 1760k freed
bbKernel panic - not syncing: Attempted to kill init! <-- 死在這里
一開始我以為是 busybox 編譯出問題, 可是我利用 qemu-mipsel 來跑編譯出來的 busybox 卻可正常運作
我已不知要如何下手了
各位大大可否提供一些建議或方向給我嗎 ?
[ 本帖最后由 tanks 于 24-9-2009 12:42 PM 编辑 ] |
|
|
|
|
|
|
|
发表于 24-9-2009 05:33 PM
|
显示全部楼层
回复 1# tanks 的帖子
您好,
我沒遇過這問題, 不過想問您,
1. kernel和busybox都用同一個cross compiler build的嗎
2. 換成3.x的build看看
若不行, 再討論 |
|
|
|
|
|
|
|
楼主 |
发表于 24-9-2009 06:11 PM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 24-9-2009 06:24 PM
|
显示全部楼层
回复 3# tanks 的帖子
我COMPILE MYRINIX 时也碰过这样的问题。
换机器COMPILE 就OK了 |
|
|
|
|
|
|
|
发表于 24-9-2009 11:47 PM
|
显示全部楼层
回复 4# atchek 的帖子
很好奇,為什麼呢?
兩台機器有哪些不一樣? |
|
|
|
|
|
|
|
发表于 24-9-2009 11:59 PM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 25-9-2009 12:00 AM
|
显示全部楼层
原帖由 atchek 于 24-9-2009 11:59 PM 发表
我也不懂 。。。 到现在还不知道。
有可能其中一台机的RAM有问题 ...? 可能吗? |
|
|
|
|
|
|
|
发表于 25-9-2009 12:21 AM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 25-9-2009 03:30 AM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 25-9-2009 09:49 AM
|
显示全部楼层
回复 9# hackintosh 的帖子
不过这个人好像才來过一兩次 leh |
|
|
|
|
|
|
|
发表于 25-9-2009 11:56 AM
|
显示全部楼层
之前有试过是filesystem的问题,kernel支援yaffs1,可是我下载到yaffs2的image进去,结果也是出现这种信息。 |
|
|
|
|
|
|
|
楼主 |
发表于 25-9-2009 02:26 PM
|
显示全部楼层
回复 4# atchek 的帖子
我沒有其他 PC 可以拿來 compile 了 Orz... |
|
|
|
|
|
|
|
发表于 25-9-2009 02:29 PM
|
显示全部楼层
回复 3# tanks 的帖子
可是 crosstool-ng 沒有 3.x 版的選項 , 2.6 版核心不是要 4.1 版以上的 GCC 才能編嗎 ?
不過我會去用 crosstool build 一個3.x 版的 gcc 來試看看行不行
我以前用過3.X的GCC build過2.6的核心, 沒有問題...
另外, 既然您正好要用crosstool build 3.x的crosscompiler, 可否順便寫一篇教學,
本來是我要寫, 但一直抽不出時間, 就交給您啦
也順便寫用crosstool-ng的使用教學, 因為crosstool沒繼續維護了 |
|
|
|
|
|
|
|
楼主 |
发表于 25-9-2009 02:32 PM
|
显示全部楼层
原帖由 guohui 于 25-9-2009 11:56 AM 发表
之前有试过是filesystem的问题,kernel支援yaffs1,可是我下载到yaffs2的image进去,结果也是出现这种信息。
initramfs 好像是利用 cache 來當 filesystem, 不太懂 = ="
我去試看看把所有 kernel 都 support 的 filesystem 全開好了. |
|
|
|
|
|
|
|
楼主 |
发表于 25-9-2009 02:38 PM
|
显示全部楼层
|
|
|
|
|
|
|
楼主 |
发表于 25-9-2009 02:43 PM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 25-9-2009 02:57 PM
|
显示全部楼层
回复 16# tanks 的帖子
那排除compiller的問題.
那您的/etc/inittab是怎麼來的呢?
自已建的還是用busybox的?
懷疑是kernel找不到init... |
|
|
|
|
|
|
|
楼主 |
发表于 25-9-2009 03:31 PM
|
显示全部楼层
回复 17# 詩魂 的帖子
建出來的 busybox 本身只有 bin, sbin, usr 三個目錄
其他目錄都是自已建的
[tanks@F10-Server etc]$ ls
fstab group init.d inittab passwd profile shadow
[tanks@F10-Server etc]$ cat inittab
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::restart:/sbin/init
tty2::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff -a |
|
|
|
|
|
|
|
发表于 25-9-2009 05:26 PM
|
显示全部楼层
回复 18# tanks 的帖子
從kernel panic的地方來看, 像是死在init的時候.
基本上, kernel應該是有執行init行程, 在/init/main.c中有一段:
if (execute_command) {
run_init_process(execute_command);
printk(KERN_WARNING "Failed to execute %s. Attempting "
"defaults...\n", execute_command);
}
run_init_process("/sbin/init"
run_init_process("/etc/init"
run_init_process("/bin/init"
run_init_process("/bin/sh"
panic("No init found. Try passing init= option to kernel."
基本上執行run_init_process, 執行的init是第一個行程, 也是所有行程的父行程,
只有在執行init有問題才會return, 進而執行panic("No init found. Try passing init= option to kernel."
您的機器沒有這訊息, 判斷init行程沒問題.
init行程執行的第一個文件為inittab, 所以我才請您檢查這個文件. 若這個文件沒問題,
再一一往下track, 往下找下一個可能出現的問題.
這是我的想法, 您認為呢? 我之前沒遇過這問題, 同時, 也沒有機器幫您試.
提供一點看法給您參考, 若同意我的想法, 可依此往下trace下去,
可以的話, 重建root filesystem再試看看 |
|
|
|
|
|
|
|
发表于 25-9-2009 05:41 PM
|
显示全部楼层
btw, 您是李宏的學弟嗎? |
|
|
|
|
|
|
| |
本周最热论坛帖子
|