可靠的BeagleBone Black Linux内核构建

10
有没有可靠的Linux内核构建版本适用于BeagleBone Black平台?我已经按照这里以及其他地方的说明进行了尝试,但都没有成功。要么模块无法构建(在上述链接中,.ko文件根本没有构建出来,也找不到),要么内核缺少构建目标。我正在使用Linaro ARM编译器(arm-linux-gnueabihf-gcc)在32位x86 Ubuntu 14.04上进行交叉编译。
具体而言,我已经检出了BeagleBone Git repository 的3.8、3.11、3.12、3.13和3.14分支的源代码。我还检出了一个第三方git克隆体这里。我遇到的问题如下:
  • 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的错误修补程序。
在我能够编译内核的情况下,我使用TFTP启动服务器从U-Boot将其复制到新的空白板上,并在内存中启动内核。然而,由于缺少模块/固件/ dtbs,所有成功编译的内核都无法正常工作。是什么导致了错误的修补程序?开发人员已经测试过代码和补丁,所以我的工作空间可能存在问题,尽管我目前无法想象具体是什么。我使用的命令与链接1中的相同。

你使用哪个平台进行交叉编译? - wallyk
简要查看互联网似乎表明,现有的BeagleBone教程不比典型的嵌入式品种更差。您介意让您的问题更具体,涉及到您正在遇到的问题吗? - oakad
@wallyk,我正在一台运行Ubuntu 14.04的32位x86笔记本电脑上进行交叉编译。我处理过的所有BeagleBone Black都是使用开箱即用的原始Angstrom系统。 - Alex Marshall
我一直在使用BBB的原始Debian内核,发现它非常稳定,没有任何问题。你编译自己的内核想要实现什么目的? - Jason Lewis
@JasonLewis Debian内核是否支持通过apt在BeagleBone Black上进行自动化内核升级? - Alex Marshall
显示剩余4条评论
3个回答

10
我也跟着你提到的链接操作成功启动了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

    arch/arm/boot/dts/am335x-boneblack.dtb

  4. 编译模块。

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

  5. 我使用的是busybox和NFS服务器作为root文件系统
编译器使用的是arm-linux-gnueabi-gcc。通过这种方式,我能够成功地启动并运行内核模块,它的优点在于我们使用了最新可用的内核。

我还需要在u-boot环境中将fdtaddr设置为0x88000000,因为(我认为)默认地址与RAM中的内核重叠。 - talshorer
使用omap2plus_defconfig时,我得到了很多“所选处理器在ARM模式下不支持xxx”(其中xxx可以是许多指令之一)。我不得不使用基于crosstool的工具链中的omap1。你知道为什么吗? - 3bdalla

5
我终于成功地使用新的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上
arch/arm/boot复制 zImage 到 BBB 的 /boot/uboot/arch/arm/boot/dts复制 am335x-boneblack.dtb 到 BBB 的 /boot/uboot/dtbs 如果你直接替换现有的zImage和am335x-boneblack.dtb,而它们不能正常工作,你会遇到麻烦。我把新的镜像存储在 /boot/uboot 文件夹中,并在uboot中操作环境变量以选择我想要的镜像。
我知道,我可以使用tftpserver..
希望对某些人有所帮助。我花了很多时间在这上面,本应该非常简单 :(

你到底是如何“在Uboot中操作环境变量以选择我想要的那个”的? - Ashitakalax

1
是的,文档非常过时(大约是2011年或2012年),并且非常混乱。首先,github/beagleboard/kernel区域表示它已被弃用,要使用beagleboard/linux作为内核。但是,它仍然被积极地使用,以便于:1)添加尚未被接受到内核树中的补丁;2)添加专门针对beaglebone devel builds的内核配置。内核树中的bb.org_defconfig未打开一些调试内容。
因此,无论是github/beagleboard/linux还是github/beagleboard/kernel都可以在BBB上为我工作(3.14)。如果您想要一个标准图像,请使用“linux”;如果您想要一个炫目的图像,请使用“kernel”。
此外,APT中有一个更新的交叉编译器,gcc-arm-linux-gnueabihf。确保您拥有“hf”(硬浮点单元)版本。不需要依赖linaro。
我将在启动项目后更新文档...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接