可靠构建BeagleBone Black的Linux内核

时间:2014-05-20 17:29:32

标签: linux-kernel beagleboneblack

是否有适合BeagleBone Black平台任何地方的Linux内核的可靠构建?我遵循了here指令以及其他许多地方,但都没有。这两个模块都没有构建(.ko文件只是没有构建,在上面的链接的情况下找不到),或者缺少内核的构建目标。我在32位x86 Ubuntu 14.04上使用Linaro ARM编译器(arm-linux-gnueabihf-gcc)交叉编译。

具体来说,我已经检查了BeagleBone Git repository,分支3.8,3.11,3.12,2.13和3.14的来源。我还检查了第三方git clone here。我遇到的问题如下:

  • 3.8:内核将编译(带有大量警告),但是由于补丁过程中的错误而导致模块无法编译,无法在分支中运行patch.sh。
  • 3.11:内核将编译(带有大量警告),但uImage-dtb.am335x-boneblack Make目标不会。编译模块失败,因为至少有一个文件具有不正确的补丁,导致产生错误的C语法。
  • 3.12:内核将与模块一起编译(包含大量警告)。将内核和模块复制到电路板成功。启动内核失败,并在启动开始时立即从U-Boot的启动命令中冻结。
  • 3.13,3.14:内核编译因语法错误而失败。
  • 来自TowerTech的
  • 3.8.13+:内核编译成功(有大量警告),模块编译失败,同样是由于patch.sh修补不正确。

在我可以编译内核的情况下,我使用U-Boot中的TFTP引导服务器将其复制到内存中的新鲜的vanilla板,然后在内存中引导内核。但是,没有一个成功编译的内核可以正常工作,因为它们缺少模块/ firmware / dtbs。什么可能导致不正确的修补?当然,编写代码和补丁的开发人员必须对其进行测试,因此我的工作空间可能有问题,但我无法想象此时的情况。我使用的命令与链接1的命令相同。

3 个答案:

答案 0 :(得分:8)

我也按照你提到的链接,我能够启动BBB。我正在使用https://www.kernel.org/中的主线内核。以下是我遵循的步骤

  1. 下载最新内核。我的版本是3.18-rc4
  2. 使用“omap2plus_defconfig”这是beaglebone black的默认配置
  3. 创建命令

    make ARCH = arm CROSS_COMPILE = arm-linux-gnueabi- omap2plus_defconfig -j4

    make ARCH = arm CROSS_COMPILE = arm-linux-gnueabi- uImage dtbs LOADADDR = 0x80008000 -j4。

    产生的图像存在于以下路径中。

    arch / arm / boot / uImage uImage

    拱/臂/引导/ DTS / am335x-boneblack.dtb

  4. 此后编译模块。

    make ARCH = arm CROSS_COMPILE = arm-linux-gnueabi- modules -j4

  5. 我使用busybox和NFS服务器作为root
  6. 使用的编译器是arm-linux-gnueabi-gcc。有了这个,我能够成功启动并运行模块。它的优点是我们使用的是最新的内核。

答案 1 :(得分:4)

我终于能够使用新的内核3.14启动BBB

我正在安装debian的beagleboneblack rev C上。

我基本上都遵循这里的步骤 http://dev.ardupilot.com/wiki/building-for-beaglebone-black-on-linux/

内核下载:(我没有使用git,带宽有限......) https://github.com/beagleboard/linux/archive/3.14.tar.gz

构建(在Ubuntu 14.04上完成):(我不确定某些步骤是否相关或冗余)

安装mkimage

sudo apt-get install libssl-dev
wget ftp://ftp.denx.de/pub/u-boot/u-boot-latest.tar.bz2
tar -xjf u-boot-latest.tar.bz2
cd u-boot-2014.10/
make sandbox_defconfig tools-only
sudo install tools/mkimage /usr/local/bin

http://arago-project.org/git/projects/?p=am33x-cm3.git;a=tree;f=bin;h=75a5de7aa94ff6ccbfb1b3b9dc80bc2fe5b423bf;hb=refs/heads/master下载am335x-pm-firmware.bin并复制到内核目录

构建内核

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- bb.org_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- uImage dtbs LOADADDR=0x80008000 -j4
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- modules -j4
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- am335x-boneblack.dtb -j4

安装模块

mkdir -p ../export/rootfs
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=../export/rootfs/ modules_install

现在将模块复制到beaglebone black中的/ lib / modules /目录(为模块创建一个新目录)

cd ../export/rootfs/lib/modules/
rsync -avz 3.14.25/ root@192.168.1.3:/lib/modules/3.14.25/

接下来是将 zImage和am335x-boneblack.dtb 复制到BBB

zImage arch/arm/boot复制到BBB的/boot/uboot/

am335x-boneblack.dtb arch/arm/boot/dts复制到/boot/uboot/dtbs

如果您直接用新的zImage和am335x-boneblack.dtb替换现有的zImage和am335x-boneblack.dtb并且它们无法正常工作,那么您将遇到麻烦。我将新映像存储在/ boot / uboot中的文件夹中,并在uboot中操作环境变量以选择我想要的那个。

我知道,我本可以使用tftpserver ..

我希望它有助于某人。我花了很多时间在这上面应该非常简单:(

答案 2 :(得分:1)

是的,文档确实已经过时(大约在2011年或2012年初)并且非常令人困惑。首先,github / beagleboard / kernel区域表示不推​​荐使用beagleboard / linux作为内核。但是,它仍然被积极地使用1)添加尚未被内核树接受的补丁,以及2)专门为beaglebone devel构建添加内核配置。内核树中的bb.org_defconfig没有打开一些调试内容。

所以... github / beagleboard / linux和github / beagleboard / kernel在BBB上为我(3.14)工作。如果您想要标准图像,请使用" linux&#34 ;;如果你想要一个铃声和口哨图像使用"内核"。

此外,更新的交叉编译器在APT的gcc-arm-linux-gnueabihf中。确保你有" hf" (硬浮点单位)版本。无需依赖linaro。

我让项目滚动后我会更新文档....