Linux kernel 如何为Linux内核Arm交叉编译设置机器类型(arch_id)

Linux kernel 如何为Linux内核Arm交叉编译设置机器类型(arch_id),linux-kernel,arm,cross-compiling,embedded-linux,u-boot,Linux Kernel,Arm,Cross Compiling,Embedded Linux,U Boot,我想知道如何为内核设置正确的MACH\u类型或arch\u id。我搜索并找到了至少两个内核挂在“启动内核…”的引用。这些答案都是一样的。正确设置您的机器类型。但两人都没有提到如何做到这一点。有人知道怎么做吗 及 这两种情况都与我尝试引导内核时所经历的情况非常接近。它卡在“启动内核…”上,无法继续。我已经用.configs构建了好几次内核,这些配置应该完全适合我的模型 Timesys(LinuxLink)提供了一个.config,该配置应该与免费构建服务提供的内核相匹配。但这也不行。如果我使用他

我想知道如何为内核设置正确的
MACH\u类型
arch\u id
。我搜索并找到了至少两个内核挂在“启动内核…”的引用。这些答案都是一样的。正确设置您的机器类型。但两人都没有提到如何做到这一点。有人知道怎么做吗

这两种情况都与我尝试引导内核时所经历的情况非常接近。它卡在“启动内核…”上,无法继续。我已经用.configs构建了好几次内核,这些配置应该完全适合我的模型

Timesys(LinuxLink)提供了一个.config,该配置应该与免费构建服务提供的内核相匹配。但这也不行。如果我使用他们预先构建的内核,那么启动起来就没有问题。所以我知道这不是我的u-boot,也不是我配置SD卡的方式。问题一定来自内核构建

我运行make-like:
make-ARCH=arm-CROSS\u COMPILE=${PATH\u TO\u TOOLCHAIN}/bin/armv7l timesys linux-gnueabi-uImage
并将我的映像如下所示:
sudo-mkimage-A arm-O linux-T内核-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环境:

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

问题是,双u-boot头已应用于映像。根据。

您的机器是否支持早期打印?如果是这样,您可以启用它并访问更多调试输出。当您“生成uImage”时,内核已经为您运行mkimage。您正在将一个头放在一个头上,我认为您的挂起是因为您试图执行一个头,而不是内核条目代码。。。(uImage是带有u-boot头的zImage的名称)飞思卡尔的预内核引导代码与其他ARM SOC稍有不同,因为机器ID用于在解压缩期间指定串行端口。如果无法识别机器ID,则
putc()
代码挂起的可能性为50%。请显示更多U-Boot输出。你把uImage安装到SD卡上了?您的
bootdef
变量是什么@unixsmurf指出了一个需要首先解决的问题。在uImage的开头做一个
od
,看看你是否真的有一个双标题。我现在正在检查双标题。@eepp我似乎很难编译earlyprintk。我会继续努力的。不会花太长时间的。