2013-09-05 15 views
2

我想知道如何爲內核設置正確的MACH_TYPEarch_id。我搜索並發現至少有兩個引用,內核將在「Starting Kernel ...」中掛起。這些答案都是一樣的。正確設置您的機器類型。但之後都沒有提到如何去做。有人知道怎麼做嗎?如何爲Linux Kernel Arm交叉編譯設置機器類型(arch_id)

Pretty good explanation for the hang.Another good description.

這兩者都是接近,當我嘗試啓動我的內核是什麼,我經歷。它卡在「Starting Kernel ...」上,不會繼續。我已經從.configs創建了幾次內核,這些內容應該完全適合我的模型。

Timesys(LinuxLink)提供了一個.config,它應該與它們提供的免費構建服務提供的內核相匹配。但那也行不通。如果我使用他們的預建的內核,它啓動沒有問題。所以我知道這不是我的u-boot或者我配置我的SD卡的方式。這個問題必須來自內核構建。

我跑我做出這樣:make ARCH=arm CROSS_COMPILE=${PATH_TO_TOOLCHAIN}/bin/armv7l-timesys-linux-gnueabi- uImage,讓我的圖片如下:sudo mkimage -A arm -O linux -T kernel -C none -a 0x70800000 -e 0x70800000 -n "Linux-2.6.35-ts-armv7l" -d arch/arm/boot/uImage ../../uImage

我與飛思卡爾的i.MX53評估板工作。當我嘗試運行的內核:

U-Boot 2009.08-dirty (Aug 02 2013 - 19:57:03) 

CPU: Freescale i.MX53 family 2.1V at 800 MHz 
mx53 pll1: 800MHz 
mx53 pll2: 400MHz 
mx53 pll3: 432MHz 
mx53 pll4: 455MHz 
ipg clock  : 66666666Hz 
ipg per clock : 33333333Hz 
uart clock : 66666666Hz 
cspi clock : 108000000Hz 
ahb clock  : 133333333Hz 
axi_a clock : 400000000Hz 
axi_b clock : 200000000Hz 
emi_slow clock: 133333333Hz 
ddr clock  : 400000000Hz 
esdhc1 clock : 80000000Hz 
esdhc2 clock : 80000000Hz 
esdhc3 clock : 80000000Hz 
esdhc4 clock : 80000000Hz 
nfc clock  : 26666666Hz 

Board: MX53-LOCO 1.0 Rev. B 
Boot Reason: [POR] 
Boot Device: SD 
I2C: ready 
DRAM: 1 GB 
MMC: FSL_ESDHC: 0,FSL_ESDHC: 1 
In: serial 
Out: serial 
Err: serial 
Serial reinitilized! 
Net: got MAC address from IIM: 00:04:9f:01:f7:ce 
FEC0 [PRIME] 
Hit any key to stop autoboot: 0 
mmc0 is current device 

MMC read: dev # 0, block # 2048, count 8192 ... 8192 blocks read: OK 
## Booting kernel from Legacy Image at 70800000 ... 
Image Name: Linux-2.6.35-ts-armv7l 
Image Type: ARM Linux Kernel Image (uncompressed) 
Data Size: 2999932 Bytes = 2.9 MB 
Load Address: 70800000 
Entry Point: 70800000 
Verifying Checksum ... OK 
XIP Kernel Image ... OK 
OK 

Starting kernel ... 

的u-boot ENV:

bootdelay=3 
baudrate=115200 
netdev=eth0 
ethprime=FEC0 
uboot=u-boot.bin 
kernel=uImage 
nfsroot=/opt/eldk/arm 
bootargs_base=setenv bootargs console=ttymxc0,115200 
bootargs_nfs=setenv bootargs ${bootargs} root=/dev/nfs ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp 
bootcmd_net=run bootargs_base bootargs_nfs; tftpboot ${loadaddr} ${kernel}; bootm 
bootcmd=run bootcmd_mmc 
ethact=FEC0 
lcd=video=mxcdi0fb:RGB24,SEIKO-WVGA di0_primary 
bootargs_mmc=setenv bootargs ${bootargs} gpu_nommu ${lcd} ip=dhcp root=/dev/mmcblk0p1 rootwait rw 
bootargs=console=ttymxc0,115200 gpu_nommu video=mxcdi0fb:RGB24,SEIKO-WVGA di0_primary ip=dhcp root=/dev/mmcblk0p1 rootwait rw 
bootcmd_mmc=run bootargs_base bootargs_mmc; mmc dev 0; mmc read ${loadaddr} 0x800 0x2000; bootm 
loadaddr=0x70800000 
stdin=serial 
stdout=serial 
stderr=serial 
+2

您的機器是否支持'earlyprintk'?如果是這樣,你可以啓用它並訪問更多的調試輸出。 – eepp

+3

當你「make uImage」時,內核已經爲你運行mkimage。你在標題上放一個標題,我認爲你的掛起是因爲你試圖執行一個標題而不是內核條目代碼... (uImage是一個帶有u-boot標題的zImage的名稱) – unixsmurf

+2

飛思卡爾的預內核引導代碼與其他ARM SoC有點不同,因爲機器ID用於指定解壓縮期間的串行端口。如果機器ID無法識別,那麼'putc()'代碼將掛起的機率爲50/50。請顯示更多的U-Boot輸出。那麼你把uImage安裝到SD卡上?你的'bootdef'變量是什麼? @unixsmurf指出了一個需要首先解決的問題。在uImage的開頭做一個'od',看看你是否真的有雙頭。 – sawdust

回答

2

的問題是,雙的u-boot頭已經被應用到圖像。 按照unixsmurf