2021-02-22

本文档详细介绍了如何构建和配置TI Jacinto处理器的Linux内核,包括获取内核源代码、清理、配置、编译以及安装步骤。强调了使用SDK工具链的重要性,提供了不同配置选项如menuconfig,并指出了针对不同板载设备的设备树文件。内核编译涉及make zImage、make dtb以及make modules_install等命令,最后将编译结果安装到目标文件系统。
摘要由CSDN通过智能技术生成

TI jacinto 用户指南

概述
这个wiki将介绍构建Linux内核的基本步骤。
获取内核源代码
获取内核源代码的最简单方法是下载并安装处理器SDK Linux J721e。一旦安装,内核源代码就包含在SDK的board-support目录中。为了方便起见,源代码还包括内核的git存储库,包括提交历史记录。
或者,可以直接从GIT获取内核源代码。
准备构建
在使用SDK提供的GCC工具链或独立于TI的工具链时,构建内核时不要获取工具链中包含的environment-setup文件,这一点很重要。这样做会导致内核树中主机端组件的编译失败。
除非另有规定,否则以下命令将从内核树的根目录运行。内核树的根目录是顶层目录,可以通过查找“MAINTAINERS”文件来识别。
编译器
在编译内核或内核模块之前,SDK的工具链需要添加到PATH环境变量中

export PATH=<sdk path>/linux-devkit/sysroots/x86_64-arago-linux/usr/bin:$PATH

该版本支持的当前编译器以及下载位置可以在内核版本的发布说明中找到。
清理内核源代码
在编译Linux内核之前,最好确保内核源代码是干净的,并且没有以前的编译留下的残余。
注意,下一步将删除内核树中所有保存的.config文件以及生成的目标文件。如果您已经完成了前面的配置,并且不希望丢失您的配置文件,那么您应该在继续之前保存配置文件的副本(.config)。
清理内核的命令如下:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean

配置内核
在编译Linux内核之前,需要对其进行配置,以选择哪些组件将成为内核映像的一部分,哪些组件将构建为动态模块,以及哪些组件将一起忽略。这是使用Linux内核配置系统完成的。
使用默认配置
通常最简单的方法是从基本的默认配置开始,然后根据需要为用例定制它。在Linux内核中,命令的形式如下::

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- <defconfig>

SDK内核配置
对于这个sdk,使用了singlecore-omap2plus_defconfig,我们建议所有用户使用它,或者至少作为一个起点。例子:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- tisdk_amNNNx-evm_defconfig

配置步骤运行后,完整的配置文件以.config的形式保存到内核树的根目录中。任何进一步的配置更改都是基于这个文件的,直到通过上面提到的内核清理来清理它为止.
注意:以前的SDK推荐用户使用omap2plus_defconfig作为他们的。对于此版本,应改用tisdk_[platformName]_defconfig,其中包括平台名称(例如,am335x-evm for AM335x, am437x-evm for AM437x, am57xx-evm for AM57xx, k2hk-evm for K2H/K2K, k2e-evm for K2E, k2l-evm for K2L, k2g-evm for K2G, and omapl138-lcdk for OMAP-L138)。如果内核是直接从git存储库下载的,那么defconfig需要用脚本构建。有关更多信息,请参阅内核源代码中的ti_config_fragments/README。否则,用户将注意到大量功能无法工作。
下面是从内核git存储库构建defconfig的过程。

$ ti_config_fragments/defconfig_builder.sh -t ti_sdk_[device]_release
$ export ARCH=arm
$ make ti_sdk_[device]_release_defconfig
$ mv .config arch/arm/configs/tisdk_[platformName]-evm_defconfig

支持的defconfig映射文件列表(即上面使用的ti_sdk_[device]_release)可以在ti_config_fragments/defconfig_map.txt文件中找到。
自定义配置
当您想要自定义内核配置时,最简单的方法是使用内置的内核配置系统。两种最流行的配置系统是:
menuconfig:一个基于ncurses的配置工具
注意:在一些系统上,为了使用xconfig,你可能需要安装libqt3-mt-dev包。例如,在Ubuntu 10.04中,可以使用命令sudo apt-get install libqt3-mt-dev来实现这一点
要调用内核配置,你只需使用如下命令:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- <config type>
i.e. for menuconfig the command would look like
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig

一旦打开配置窗口,您就可以选择应该在构建中包含哪些内核组件。退出配置将把您的选择保存到内核树的根文件.config中。

编译源代码
编译内核
配置好内核之后,必须编译它,以生成可引导的内核映像以及所选的任何动态内核模块。
默认情况下,U-boot期望zImage是所使用的内核映像类型。
要构建zImage,请使用这个命令

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage

这将导致在arch/arm/boot/目录中创建一个名为zImage的内核映像文件。
编译设备树二进制文件
从3.8内核开始,每个TI evm都有一个内核所需的唯一的设备树二进制文件。因此,您需要为目标设备构建和安装正确的dtb。所有设备树文件都位于arch/arm/boot/dts/。下面列出了各种TI evms和匹配设备树文件。
单板设备树文件

Boards	Device Tree File
Beaglebone Black	am335x-boneblack.dts
AM335x General Purpose EVM	am335x-evm.dts
AM335x Starter Kit	am335x-evmsk.dts
AM335x Industrial Communications Engine	am335x-icev2.dts
AM437x General Purpose EVM	am437x-gp-evm.dts, am437x-gp-evm-hdmi.dts (HDMI)
AM437x Starter Kit	am437x-sk-evm.dts
AM437x Industrial Development Kit	am437x-idk-evm.dts
AM57xx EVM	am57xx-evm.dts, am57xx-evm-reva3.dts (revA3 EVMs )
AM572x IDK	am572x-idk.dts
AM571x IDK	am571x-idk.dts
AM574x IDK	am574x-idk.dts
K2H/K2K EVM	keystone-k2hk-evm.dts
K2E EVM	keystone-k2e-evm.dts
K2L EVM	keystone-k2l-evm.dts
K2G EVM	keystone-k2g-evm.dts
K2G ICE EVM	keystone-k2g-ice.dts
OMAP-L138 LCDK	da850-lcdk.dts
J721e EVM	k3-j721e-common-proc-board.dts
J7200 EVM	k3-j7200-common-proc-board.dts

表:每个单板的设备树文件名
要构建单独的设备树文件,请找到正在使用的板的dts文件的名称,并将.dts扩展名替换为.dtb。然后执行如下命令:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- <dt filename>.dtb

编译后的设备树文件位于arch/arm/boot/dts中.
例如,Beaglebone Black设备树文件名为am335x-boneblack.dts. 要构建设备树二进制文件,请运行:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- am335x-boneblack.dtb

编译内核模块
默认情况下,sdk中使用的大多数Linux驱动程序都没有集成到内核映像中(ex zImage)。这些驱动程序构建为动态模块。构建这些模块的命令是:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules

这将导致.ko(内核对象)文件被放置在内核树中。这些.ko文件是动态内核模块。
当您对内核进行更改时,通常建议您重新构建内核模块并重新安装内核模块。否则,内核模块可能无法加载或运行。下一节将介绍如何安装这些模块。
注意:任何时候你对内核做了改变,需要你重新编译它,你也应该确保你重新编译了内核模块并重新安装它们。否则,所有的内核模块可能会拒绝加载,这将导致功能的重大损失。
安装内核
一旦编译了Linux内核、dtb文件和模块,就必须安装它们。对于内核映像,可以通过将zImage文件复制到要读取它的位置来安装它。设备树二进制文件也应该复制到内核映像复制到的同一目录。
安装内核映像和设备树二进制文件

`` cd <kernel sources dir> sudo cp arch/arm/boot/zImage <rootfs path>/boot sudo cp arch/arm/boot/dts/<dt file>.dtb <rootfs path>/boot``

例如,如果您想将内核映像和BeagleBone Black设备树文件复制到SD卡的rootfs分区,您可以输入以下命令: cd <kernel sources dir> sudo cp arch/arm/boot/zImage arch/arm/boot/dts/am335x-boneblack.dtb /media/rootfs/boot
从U-boot 2013.10开始,默认情况下,从MMC/EMMC引导时,不再从MMC的/boot/分区读取内核和设备树二进制文件,而是从根文件系统的引导目录读取。这意味着您将内核映像和设备树二进制文件复制到/media/rootfs/boot而不是/media/boot。
安装内核模块
要安装内核模块,可以使用另一个make命令,该命令与其他命令类似,但带有一个附加参数,该参数给出了应该安装模块的基本位置。此命令将从该位置创建一个目录树,如lib/modules/,其中包含与此版本内核对应的动态模块。基本位置通常应该是目标文件系统的根。命令的一般格式为:

sudo make ARCH=arm  INSTALL_MOD_PATH=<path to root of file system> modules_install

例如,如果您正在SD卡的rootfs分区上安装模块,您将执行以下操作:

sudo make ARCH=arm INSTALL_MOD_PATH=/media/rootfs modules_install

请注意
将INSTALL_MOD_STRIP=1附加到make modules_install命令以减少最终安装的大小

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值