2014-10-20 123 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來解決它。 我想原來的位置可能會重疊內核....