2014-10-20 63 views
0

我试着用不同的ARCH(x64,i386)和不同的工具链为我的beaglebone黑色交叉编译linux内核3.14。但他们都不能正确启动。它总是在为beaglebone黑色交叉编译linux内核

## Booting kernel from Legacy Image at 80007fc0 ... 
Image Name: Linux-3.17.1+ 
Image Type: ARM Linux Kernel Image (uncompressed) 
Data Size: 6732680 Bytes = 6.4 MiB 
Load Address: 80008000 
Entry Point: 80008000 
Verifying Checksum ... OK 
## Flattened Device Tree blob at 80f80000 
Booting using the fdt blob at 0x80f80000 
XIP Kernel Image ... OK 
OK 
Using Device Tree in place at 80f80000, end 80f92df6 

Starting kernel ... 

停止我觉得我用的是不正确的工具链,所以我尝试使用工具链的TI StarsWares和Linaro的工具链。但它仍然不起作用。我也认为我需要使用32位ubuntu而不是我的Ubuntu 14.10(64位),但它仍然无法正常工作。

最后,我尝试编译一个示例c程序,并尝试在我的beaglebone上运行它。它说:

[email protected]:~\# ./test 
-sh: ./test: No such file or directory 

它似乎我使用不正确的工具链。

我尝试使用的内核配置文件:

git://github.com/beagleboard/kernel.git 

,但它仍然停留在:

Starting kernel ... 

我crosscompile工具链了。

linaro toolchain

我的内核编译命令是:

make ARCH=arm CROSS_COMPILE=/home/larry/develop/linaro-toolchain/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/bin/arm-linux-gnueabihf-

make modules ARCH=arm CROSS_COMPILE=/home/larry/develop/linaro-toolchain/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/bin/arm-linux-gnueabihf-

make modules_install INSTALL_MOD_PATH=mymodules ARCH=arm CROSS_COMPILE=/home/larry/develop/linaro-toolchain/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/bin/arm-linux-gnueabihf-

make LOADADDR=0x80008000 uImage dtbs ARCH=arm CROSS_COMPILE=/home/larry/develop/linaro-toolchain/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/bin/arm-linux-gnueabihf-

内核的.config在这里:

kernel .config

我的U-Boot的配置是:

`U-Boot# printenv 
arch=arm 
baudrate=115200 
board=am335x 
board_name=A335BNLT 
board_rev=000B 
bootcmd=gpio set 53; i2c mw 0x24 1 0x3e; run findfdt; mmc dev 0; if mmc rescan ; then echo micro SD card found;setenv mmcdev 0;else echo No micro SD card found, setting mmcdev to 1;setenv mmcdev 1;fi;setenv bootpart ${mmcdev}:2;mmc dev ${mmcdev}; if mmc rescan; then gpio set 54; echo SD/MMC found on device ${mmcdev};if run loadbootenv; then echo Loaded environment from ${bootenv};run importbootenv;fi;if test -n $uenvcmd; then echo Running uenvcmd ...;run uenvcmd;fi;gpio set 55; if run loaduimage; then gpio set 56; run loadfdt;run mmcboot;fi;fi; 
bootdelay=1 
bootdir=/boot 
bootenv=uEnv.txt 
bootfile=uImage 
bootpart=0:2 
console=ttyO0,115200n8 
cpu=armv7 
dfu_alt_info_emmc=rawemmc mmc 0 3751936 
dfu_alt_info_mmc=boot part 0 1;rootfs part 0 2;MLO fat 0 1;MLO.raw mmc 100 100;u-boot.img.raw mmc 300 3C0;u-boot.img fat 0 1;uEnv.txt fat 0 1 
dfu_alt_info_nand=SPL part 0 1;SPL.backup1 part 0 2;SPL.backup2 part 0 3;SPL.backup3 part 0 4;u-boot part 0 5;kernel part 0 7;rootfs part 0 8 
ethact=cpsw 
ethaddr=1c:ba:8c:95:c8:fa 
fdt_high=0xffffffff 
fdtaddr=0x80F80000 
fdtfile=am335x-boneblack.dtb 
findfdt=if test $board_name = A33515BB; then setenv fdtfile am335x-evm.dtb; fi; if test $board_name = A335X_SK; then setenv fdtfile am335x-evmsk.dtb; fi;if test $board_name = A335BONE; then setenv fdtfile am335x-bone.dtb; fi; if test $board_name = A335BNLT; then setenv fdtfile am335x-boneblack.dtb; fi 
importbootenv=echo Importing environment from mmc ...; env import -t $loadaddr $filesize 
kloadaddr=0x80007fc0 
loadaddr=0x80200000 
loadbootenv=load mmc ${mmcdev} ${loadaddr} ${bootenv} 
loadfdt=load mmc ${bootpart} ${fdtaddr} ${bootdir}/${fdtfile} 
loadramdisk=load mmc ${mmcdev} ${rdaddr} ramdisk.gz 
loaduimage=load mmc ${bootpart} ${kloadaddr} ${bootdir}/${bootfile} 
mmcargs=setenv bootargs console=${console} ${optargs} root=${mmcroot} 
rootfstype=${mmcrootfstype} 
mmcboot=echo Booting from mmc ...; run mmcargs; bootm ${kloadaddr} - ${fdtaddr} 
mmcdev=0 
mmcroot=/dev/mmcblk0p2 ro 
mmcrootfstype=ext4 rootwait 
mtdids=nand0=omap2-nand.0 
mtdparts=mtdparts=omap2-nand.0:128k(SPL),128k(SPL.backup1),128k(SPL.backup2),128k(SPL.backup3),1920k(u-boot),128k(u-boot-env),5m(kernel),-(rootfs) 
nandargs=setenv bootargs console=${console} ${optargs} root=${nandroot} 
rootfstype=${nandrootfstype} 
nandboot=echo Booting from nand ...; run nandargs; nand read ${loadaddr} ${nandsrcaddr} ${nandimgsize}; bootm ${loadaddr} 
nandimgsize=0x500000 
nandroot=ubi0:rootfs rw ubi.mtd=7,2048 
nandrootfstype=ubifs rootwait=1 
nandsrcaddr=0x280000 
netargs=setenv bootargs console=${console} ${optargs} root=/dev/nfs 
nfsroot=${serverip}:${rootpath},${nfsopts} rw ip=dhcp 
netboot=echo Booting from network ...; setenv autoload no; dhcp; tftp ${loadaddr} ${bootfile}; tftp ${fdtaddr} ${fdtfile}; run netargs; bootm ${loadaddr} - ${fdtaddr} 
nfsopts=nolock 
ramargs=setenv bootargs console=${console} ${optargs} root=${ramroot} 
rootfstype=${ramrootfstype} 
ramboot=echo Booting from ramdisk ...; run ramargs; bootm ${loadaddr} ${rdaddr} ${fdtaddr} 
ramroot=/dev/ram0 rw ramdisk_size=65536 initrd=${rdaddr},64M 
ramrootfstype=ext2 
rdaddr=0x81000000 
rootpath=/export/rootfs 
soc=am33xx 
spiargs=setenv bootargs console=${console} ${optargs} root=${spiroot} 
rootfstype=${spirootfstype} 
spiboot=echo Booting from spi ...; run spiargs; sf probe ${spibusno}:0; sf read ${loadaddr} ${spisrcaddr} ${spiimgsize}; bootm ${loadaddr} 
spibusno=0 
spiimgsize=0x362000 
spiroot=/dev/mtdblock4 rw 
spirootfstype=jffs2 
spisrcaddr=0xe0000 
static_ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off 
stderr=serial 
stdin=serial 
stdout=serial 
usbnet_devaddr=1c:ba:8c:95:c8:fa 
vendor=ti 
ver=U-Boot 2013.04-dirty (Jun 19 2013 - 09:57:14) 

Environment size: 3877/131068 bytes 

这花我要多少时间。任何人都可以帮助我? 谢谢。

+0

我想在你的桌面上安装Linux可以帮助:首先,你将学习Linux,其次,在Linux上交叉编译可能更容易。 – 2014-10-20 08:35:24

+0

您可能没有交叉编译问题。从'0x80007fc0'启动似乎是Beaglebone的典型代表,但不是其他ARM板。尝试将uImage加载到0x80200000,将DTB加载到0x81200000,如[此处]所述(http://elinux.org/Building_BBB_Kernel)。这些地址必须在** bootcmd ** U-Boot环境变量中修改。 – sawdust 2014-10-20 19:16:56

+1

*“我尝试编译一个示例c程序并尝试在我的beaglebone上运行...” - - 这种失败很可能是一个共享库问题。使用'-static' GCC编译/链接选项静态链接你的程序。 – sawdust 2014-10-20 19:26:29

回答

0

[email protected]:~\# ./test -sh: ./test: No such file or directory

此问题是由于shared library issue这是不一样的有根文件系统和工具链的一个。

如何验证..?

compile the code with statically linked

e.g手臂-NONE-Linux的gnueabi-GCC的hello.c -static -o你好

,并尝试执行。

还要检查这个Linux Cant find dynamically linked applications

+0

是的,你说得对,谢谢。它现在可以执行。但是我的定制内核仍然停留在'Starting kernel ...',你有什么想法吗? – larry 2014-10-23 01:59:55

1

我们与BeagleBoard的XM类似的问题。我们按照维基页面上的步骤,但它始终用于挂起启动内核....

而最奇怪的解决方案之一是使用HDMI电缆插入显示器,而不是使用minicom或其他串行控制台。早些时候,我们没有支持HDMI的显示器......但是当我们更换显示器并插入HDMI时...那里是追逐Angstrom标志和登录屏幕。

我搜查了很多为什么发生这种情况的原因。还没有答复,但也许你可以改变bootargs的控制台参数。我们使用标准ttyS0将其更改为ttyO2并尝试或尝试插入HDMI电缆。

1

我在debian预安装的BBB上遇到了同样的麻烦。我编译了3.14内核,当我在BBB上尝试它时,它曾经陷入“正在启动内核......”

但是我的错误是我只用/boot/uboot/替换了zImage。当我用在3.14中编译的/boot/uboot/dtbs/代替am335x-boneblack.dtb时,它开始工作。新的am335x-boneblack.dtb可以在kernel_dir/arch/arm/boot/dts中找到。并且不要忘记复制目录与新模块(从modules_install命令)到0123B的BBB

0

我遇到了类似的问题,并最终通过将dtb置于0x88000000来解决它。 我想原来的位置可能会重叠内核....