TI jacinto – 入门指南
1.1. 入门指南
• 1.1.1. 下载并安装SDK
• 1.1.2. 运行安装脚本
• 1.1.3. 在Linux上格式化SD卡
• 1.1.3.1. 概述
• 1.1.3.2. 选择SD卡设备
• 1.1.3.3. 分区SD卡
• 1.1.4. 顶级Makefile
• 1.1.5. GCC工具链
1.1.1. 下载并安装SDK
概述
1.1.1. Download and Install the SDK
Overview
The Processor SDK Linux J721e 安装程序(ti-processor-sdk-linux-j7-evm--Linux-x86-Install.bin) 将安装必要的组件,开始在TI微处理器上进行开发。
SDK由开发文件系统、目标文件系统、示例应用程序、工具链和板支持包、易用脚本和文档组成。
处理器SDK Linux J721e现在包括ARM GCC工具链。处理器SDK Linux J721e是针对特定的Linux发行名和版本ubuntu18.04构建和测试的。注意,这并不妨碍用户在其他Linux发行版上安装SDK。
下载SDK安装程序
您可以从Jacinto7 Linux SDK下载页面下载最新的处理器SDK Linux J721e安装程序。
如何运行SDK安装程序
确保已设置执行权限。打开终端窗口,将目录更改为安装程序所在的位置(可能是下载目录),然后运行以下命令:
chmod +x ./ti-processor-sdk-linux-j7-evm-<version>-Linux-x86-Install.bin
./ti-processor-sdk-linux-j7-evm-<version>-Linux-x86-Install.bin
或者,您可以授予执行权限并运行 “ti-processor-sdk-linux-j7-evm--Linux-x86-Install.bin” 在Linux主机PC中双击它.
注意
作为安装的一部分,打包将运行一个脚本来配置您的环境并下载Linux devkit。这将导致安装持续大约一分钟,即使它显示已达到100%。
注意
如果什么都没有发生,那么您可能正在运行32位版本的Linux。安装程序是64位的,无法正确执行。
其他安装程序选项
使用参数–help调用安装程序将列出安装程序的可用选项(例如文本安装程序等):
./ti-processor-sdk-linux-j7-evm-<version>-Linux-x86-Install.bin --help
SDK安装程序执行步骤
1.确认用户确认加载处理器SDK Linux J721e是否正常。如果用户试图在现有目录上进行过度安装并对目录进行了更改,则需要注意这一点。
2.目录安装位置将提示用户输入处理器SDK Linux J721e的位置。下面给出了一个示例。
3. 软件安装完成软件安装。
在何处安装处理器SDK包
安装位置的默认选择是用户的主目录。
安装完成后,请参阅设置主机环境一节了解下一步。
Yocto配置
Yocto配置包含在Linux SDK包的configs/processor-sdk-linux-.txt位置。
如果需要的只是Yocto配置,可以直接从发布页面下载。
1.1.2. 运行安装脚本
概述
在Linux主机上安装SDK之后,应该运行安装脚本,为主机的软件开发做准备。有些任务需要管理员权限。当需要这些管理员权限时,脚本将提示您。安装脚本执行以下操作:
•验证Linux主机是否为推荐的Ubuntu LTS版本
•安装所需的主机包
•目标文件系统安装
•NFS设置
•TFTP设置
•Minicom设置
•uboot设置
•加载uboot脚本
注意
主机设置对于所有TI平台都是通用的。
如何运行安装脚本
安装脚本(setup.sh)位于处理器SDK Linux J721e安装目录中。默认情况下,该目录的名称为
ti-processor-sdk-linux-j7-evm-.
然后运行脚本:
./setup.sh
安装脚本将首先检查用户是否运行了推荐的Ubuntu长期支持(LTS)发行版,如果没有,它将退出。如果用户运行在另一个Ubuntu版本或另一个Linux发行版上,则鼓励他们修改环境设置脚本以匹配他们的发行版。查看当前支持哪个版本的Ubuntu。
详细的步骤描述通过安装脚本
下面的部分将更详细地描述如何运行脚本以及它在做什么。
安装所需主机包
这部分将检查以确保您有适当的主机支持包,以允许您执行以下任务:
•telnet
•打开内核配置工具menuconfig
•通过nfs挂载文件系统
•tftp
•打开minicom
•重建u-boot
如果您的主机缺少任何所需的包,它们将在此步骤中自动安装。
请注意
这个命令要求您在主机上拥有管理员权限(sudo访问)。
下面的命令是这个脚本的一个示例。实际的包可能因不同的版本而不同:
sudo apt-get install xinetd tftpd nfs-kernel-server minicom build-essential libncurses5-dev autoconf automake dos2unix screen lrzsz lzop u-boot-tools
添加到拨号组
注意
此部分要求您具有管理员权限(sudo访问权限)。
使用ubuntu12.04+的用户需要一个独特的步骤。默认情况下,用户没有访问串行设备的适当权限(例如ttyS0、ttyUSB0等)。用户必须是“拨号”组的成员才能在没有根权限的情况下访问这些串行设备。
在此步骤中,脚本将检查当前Linux用户是否属于拨号组。如果不是,则当前Linux用户将自动添加到拨号组。Linux用户在访问串行设备时仍然需要使用sudo,直到用户注销然后重新登录。
目标文件系统安装
此步骤将提取目标文件系统。
注意
此部分要求您具有管理员权限(sudo访问权限)。
默认位置是: /home/user/ti-processor-sdk-linux-j7-evm-<version>/targetNFS
In which directory do you want to install the target filesystem?(if this directory does not exist it will be created)
[ /home/user/ti-processor-sdk-linux-[platformName]-x.x.x.x/targetNFS ]
您可以通过键入另一个位置或点击来覆盖默认位置,您可以接受默认位置。这可能需要一点时间来解压文件系统。
如果已多次运行此脚本,并且文件系统已存在,则系统将要求您:
•重命名文件系统
•覆盖文件系统
•跳过文件系统提取
NFS设置
这一步将允许您导出在上一步中提取的文件系统。
注意
此命令要求您具有管理员权限(sudo访问权限)。
•此步骤将上一步到根文件系统的路径添加到主机上的/etc/exports文件中。
•然后停止NFS内核守护程序,然后重新启动,以确保导出的文件系统被识别。
TFTP设置
本节将在主机上设置tftp访问。
注意
此命令要求您在主机上具有管理员权限(sudo访问权限)。
默认位置是/tftpboot,它不在linux主机的根目录下,需要管理员权限。您可以点击来选择默认位置,或者键入另一个路径来覆盖默认位置。然后发生以下任务:
•将在主机上为您创建一个tftp配置文件,位于/etc/xinetd.d/tftp
•tftp服务器停止,然后重新启动,以确保更改被接收。
如果已多次运行此脚本或文件名已存在,系统将要求您选择以下选项之一。
•重命名文件系统
•覆盖文件系统
•跳过文件系统提取
对有关/tftpboot文件的任何其他提示重复此步骤。
Minicom设置
此步骤将为SDK开发设置minicom(串行通信应用程序)。
Which serial port do you want to use with minicom?
[ /dev/ttyUSB0 ]
对于大多数板,应选择默认的 /dev/ttyUSB0
•minicom配置会保存在/home/user/.minirc.dfl
•旧的配置(如果有的话)将保存在/home/user/.minirc.dfl.old
配置保存到/home/user/.minircdfl可以更改,请参阅软件开发指南获取更多信息。
请注意
如果您正在使用USB-to-Serial转换器,您的端口应该配置为/dev/ttyUSBx.
1.1.3. 在Linux上格式化SD卡
1.1.3.1. 概述
Linux SDK在/bin目录中包含一个名为mksdboot.sh文件。此脚本的目的是通过分区和格式化SD卡来创建可引导SD卡,以便目标可以使用引导映像和文件系统进行引导。
注意
您将需要一个大于8GB的SD卡和一个SD卡读卡器
注意
如果使用SD卡引导时遇到问题,可能需要运行以下命令来清除默认环境。然后需要重新启动主板,命令才能生效。
env default –a –f
saveenv
1.1.3.2. 选择SD卡设备
运行脚本之前的第一步是选择代表要格式化的SD卡的驱动器。在大多数情况下,主机根文件系统驱动器已被屏蔽,以防止损坏主机系统。您可以运行sudo fdisk -l来查找要格式化的SD卡的设备名。示例输出如下所示:
Disk /dev/sda: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x2addf736
Device Boot Start End Sectors Size Id Type
/dev/sda1 2048 614402047 614400000 293G 83 Linux
/dev/sda2 614402048 1228802047 614400000 293G 83 Linux
/dev/sda3 1228802048 1953523711 724721664 345.6G 83 Linux
Disk /dev/sdd: 14.9 GiB, 15931539456 bytes, 31116288 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xda7cb208
Device Boot Start End Sectors Size Id Type
/dev/sdd1 * 2048 129023 126976 62M c W95 FAT32 (LBA)
/dev/sdd2 129024 8517631 8388608 4G 83 Linux
/dev/sdd3 8517632 31116287 22598656 10.8G 83 Linux
您应该选择分区大小与您想要分区的SD卡匹配的设备.
1.1.3.3 SD卡分区
无论上面哪个用例创建SD卡,下面的步骤都是相同的。
可以从任何位置运行mksdboot.sh脚本,但必须以root权限运行。这通常意味着使用sudo命令开始执行脚本。例如::
sudo <SDK INSTALL DIR>/bin/mksdboot.sh --device /dev/sdX --sdk <SDK INSTALL DIR>
#用合适的设备名替换/dev/sdX
如果您在没有根权限的情况下执行脚本失败,您将收到一条消息,说明需要根权限,并且脚本将退出。
要安装包含最小文件系统的tisdk-tiny-image,可以修改mksdboot.sh脚本以指向SDK中包含的这个映像。请修改以下一行:
root_fs="$sdkdir/filesystem/tisdk-default-image-<platform>.tar.xz"
请将此行修改为以下内容,将替换为机器名称:
root_fs="$sdkdir/filesystem/tisdk-tiny-image-<platform>.tar.xz"
1.1.4. 顶级Makefile
概述
在Processor SDK Linux J721e包中,有一个顶级Makefile,可以用来构建SDK中的一些子组件。这个Makefile使用Rules.make并给出了如何构建各种组件以及要使用的参数的示例。
注意:您不应该在环境设置脚本源代码的情况下调用这个makefile。子组件makefile将在适当的情况下处理这个脚本的源代码,但是一些make目标(如Linux内核make target)在这个脚本已经源代码时不能正常工作。
Rules.make
以下各节介绍Rules.make在处理器SDK Linux J721e包的顶层中找到的文件。
目的
这个Rules.make文件在处理器SDK Linux J721e包的顶层中的文件不仅被顶层Makefile使用,而且被许多子组件Makefiles用来访问公共的共享变量和设置。下一节将介绍Rules.make文件。
定义的变量
•平台-表示SDK支持的设备的机器名。此机器名与Arago项目生成系统中的机器定义直接相关。平台变量可由组件Makefiles用于根据每台机器做出决策。
•ARCH—表示机器的体系结构系列。组件Makefiles可以根据平台的体系结构来更改设置,例如CFLAGS中的mtune值。
•UBOOT_MACHINE -在构建u-boot时使用该机器为正确的设备配置u-boot源。
•TI_SDK_PATH -指向SDK的顶层。这与Rules.make文件本身所在的目录位置相同。
•DESTDIR——指向应用程序/驱动程序应该安装到的基本安装目录。这通常是目标文件系统的根,但可以更改为指向任何地方。默认情况下,初始值是__DESTDIR__的唯一键值,作为SDK安装的一部分,它会被目标NFS文件系统的位置替换。
•LINUX_DEVKIT_PATH——指向linux-devkit目录。这个目录是包含交叉编译器和交叉库的基本目录,以及许多组件makefile用于获取额外变量设置的环境设置脚本。
•CROSS_COMPILE -这个设置表示调用交叉编译器时使用的CROSS_COMPILE前缀。许多组件(如Linux内核)使用变量CROSS_COMPILE在命令(如gcc)前添加适当的前缀来调用ARM交叉编译器。
•ENV_SETUP——这指向linux-devkit目录下的environment-setup脚本,许多组件都使用它来配置交叉编译构建。
•LINUXKERNEL_INSTALL_DIR -这指向Linux内核源代码的位置,它被组件使用,比如树外内核驱动程序来查找Linux内核makefiles和头文件。
Makefile
下面几节介绍处理器SDK Linux J721e包顶层中的Makefile。
需要主机包
请运行以下命令安装makefile目标所需的所有包。
host# sudo apt-get install build-essential autoconf automake bison flex libssl-dev bc u-boot-tools
编译器工具链
在下载页面上,您将找到指向推荐的编译器工具链的链接。下载并将它们解压缩到您的主目录中。注意,必须同时下载用于ARMv8和ARMv7的工具链。确保更新路径以包含到工具链的路径。
GCC92PATH=$HOME/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin:$HOME/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf/bin
export PATH=$GCC92PATH:$PATH
目标类型
对于下面讨论的每个目标,定义了以下目标类型
•-这是编译组件发布版本的构建目标。
•_install -这个目标将把组件安装到DESTDIR所指向的位置。
•clean -这个目标将清除组件。
顶级的目标
Processor SDK Linux J721e包默认提供以下目标,它将调用相应的组件目标:
•all -这将调用Makefile中定义的每个组件的构建目标。
•install——这将调用Makefile中定义的每个组件的安装目标。
•clean -这将为Makefile中定义的每个组件调用clean目标。
共同的目标
以下目标是处理器SDK Linux J721e包中所有平台的通用目标:
•Linux—使用默认的tisdk_defconfig配置编译Linux内核。
•linux-dtbs -编译并创建设备树blobs。
•am-benchmark——为Rules.make中定义的ARCH构建ARM基准。
•am-sysinfo -在矩阵中构建系统设置演示所使用的助手应用程序。
额外的目标
根据给定设备可用的功能和软件,还可以定义其它的目标。您可以通过查看上面顶级目标部分中描述的所有目标来找到所有目标的列表。一些设备会有以下额外的目标:
•sysfw-image -构建系统固件的itb文件,这是一个单独的二进制文件,用于系统固件的发布以及不同的板配置。
•jailhouse -构建所需的内核模块、hypervisor固件、jailhouse工具和cell config。仅适用于启用了管理程序支持的平台。
除了这些目标之外,可能还有针对不同外部内核模块的其他目标。这个列表对于每个平台都是不同的。
用法示例
下面的示例演示如何在一些常见任务中使用顶级Makefile。下面的所有示例都假定您正在从SDK的顶层调用Makefile。
```bash
•编译所有
```bash
host# make
•清除所有
host# make clean
•安装所有
host# make install
• Build the Linux kernel
host# make linux
• Install the Linux kernel modules
host# make linux_install
•构建ARM基准
host# make am-benchmarks
•清理ARM基准
host# make am-benchmarks_clean
•安装ARM基准
host# make am-benchmarks_install
•构建sysfw.
host# make sysfw-image
•清除sysfw
host# make sysfw-image_clean
• Install the sysfw
host# make sysfw-image_install
• Build u-boot
host# make u-boot
• Clean u-boot
host# make u-boot_clean
安装到SD卡的根目录
所有安装目标都复制DESTDIR变量指向的rootfs中的文件。默认情况下, Rules.make指向文件系统的NFS路径的DESTDIR。如果您想要将这些文件安装到SD卡,您应该能够在命令行上指定不同的路径到DESTDIR。例如,执行以下命令安装SD卡根目录中的所有东西。
host# sudo DESTDIR=/media/$USER/rootfs make install
#根据需要替换到SD卡rootfs分区的路径
安装引导二进制文件
所有安装目标都复制DESTDIR变量指向的rootfs中的文件。makeinstall命令只复制rootfs中的文件。如果您构建了系统固件或u-boot,您应该在SD卡的引导分区中复制这些二进制文件。e、 g.运行以下命令在SD卡引导分区中复制引导二进制文件。
host# sudo cp board-support/u-boot_build/a72/u-boot.img board-support/u-boot_build/a72/tispl.bin board-support/u-boot_build/r5/tiboot3.bin /media/$USER/boot
#替换SD卡引导分区的路径
关于树外内核模块的说明
有些驱动程序,比如GPU驱动程序,是作为内核树之外的模块交付的。如果您重新构建内核并使用“make linux_install”目标安装它,那么还需要重新构建out of树模块并安装它们。linux_install目标使用的modules_install命令将在安装新的驱动程序之前删除所有现有的驱动程序。这意味着这些驱动程序在针对内核重新构建并重新安装之前是不可用的。
Linux内核版本说明
为了简化和加速linux内核的重建和安装,内核源代码树中包含了.scmversion文件,以确定SDK中提供的内核版本。如果升级内核源代码或添加新的提交,则应该删除该文件,以便在内核映像中构建适当的版本。
1.1.5 GCC工具链
概述
Processor SDK Linux J721e包包含一个基于arm的用于Cortex A设备的工具链。ARM工具链还支持硬件浮点(hardfp)。旧的工具链,包括arm-arago-linux-gnueabi,都使用软件浮点(softfp)。这导致使用硬fp工具链构建的软件与使用softfp工具链构建的软件不兼容。
ARM工具链
Processor SDK Linux J721e包使用基于arm的工具链。除了使用GCC的新版本,ARM工具链还支持硬浮点,也称为Hard-FP。Hard-FP使用ARM上的FPU,而不是模拟它。旧的工具链包括Arago工具链使用软浮点(Soft-FP)。使用Soft-FP工具链构建的二进制文件与使用hard-fp构建的二进制文件不兼容。因此,您必须重新构建所有二进制文件来使用hard-fp 或 soft-fp,因为您不能混合和匹配。默认情况下,处理器SDK Linux J721e包中包含的所有二进制文件都将为hard-fp构建。
工具链二进制文件的名称也从旧版本的SDK中更新。以前的版本可能使用了“arm-arago-linux-gnueabi-”的前缀。当前SDK ARMv7工具链的前缀为“arm-linux-gnueabihf-”例如,新工具链的gcc编译器名为arm-linux-gnueabihf-gcc。
Linux-Devkit结构
下面是SDK中的Linux-devkit目录的结构。
Element Location
Toolchain Location linux-devkit/sysroots/x86_64-arago-linux/usr/bin
Cross Compile Libraries Location linux-devkit/sysroots/<device specific string>-vfp-neon-linux-gnueabi/usr/lib
Headers for Cross Compiled Libraries Location linux-devkit/sysroots/<device specific string>-vfp-neon-linux-gnueabi/usr/include
SDK中的位置
该工具链位于Linux SDK的/linux-devkit目录中。以下部分将介绍工具链的关键组件。
交叉编译器/工具
交叉编译器和qmake2等工具可以在/linux-devkit/sysroots/x86_64-arago-linux/usr/bin目录中找到。将此目录添加到您的路径将允许使用这些工具。例如:
host# export PATH="<SDK INSTALL DIR>/linux-devkit/sysroots/x86\_64-arago-linux/usr/bin:$PATH"
这里还有Qt使用的qmake2、rcc、uic等工具,还有Qt creator等工具可以使用的qt.conf文件来使用Linux SDK中预先构建的库。
工具链前缀
交叉编译工具的前缀是唯一的目标三元组,它指示输出可执行代码的体系结构和操作系统。例如,前缀“arm-linux-gnueabihf-”表示运行Linux操作系统的ARMv7架构,因此对应的GCC交叉编译器称为“arm-linux-gnueabihf-gcc”。
关于Processor SDK中所有的工具链前缀和它们对应的架构,请参考下表。
Toolchain Prefix Architecture Processor SDK Device
aarch64-linux-gnu- ARMv8 j7-evm j7200-evm am65xx-evm
为了成功,在下面的示例中,特定的工具链前缀将被${TOOLCHAIN_PREFIX}替换。实际上,下面描述的环境设置脚本将在您的环境中设置此变量。
交叉编译库
Linux SDK中的工具链不仅包含交叉编译器,还包含可以在应用程序中使用的预构建库,而不需要您自己交叉编译它们。这些库包括从alsa到zlib的包。这些库位于/linux-devkit/sysroots/-vfp-neon-linux-gnueabi/目录中。有关库的列表,您可以参考/docs目录中的软件清单,或查看/linux-devkit/sysroots/-vfp-neon-linux-gnueabi/usr/lib目录中的可用库列表。您还可以在/linux-devkit/sysroots/-vfp-neon-linux-gnueabi/usr/include目录中找到与这些库对应的头文件。这些库的用法将在下一节中详细介绍,但是作为一个示例,如果您的应用程序希望访问alsa asound库,那么您现在可以执行以下命令(假设您已将交叉编译器添加到您的路径中):
host# ${TOOLCHAIN_PREFIX}gcc -lasound app.c -o app.out
环境设置脚本
交叉编译使用配置工具和自动工具的包时,需要进行许多设置,以确保使用正确的交叉编译库。位于/linux-devkit目录中的环境安装脚本可以为您处理这个问题。此脚本导出变量以执行以下操作:
•将工具链添加到路径
•设置CPATH
•设置PKG_CONFIG_*路径
•将标准变量(如CC、CPP、AR)设置为交叉编译值
要使用环境设置脚本,只需对其进行源代码设置。这很简单:
host# source linux-devkit/environment-setup
要知道环境设置脚本是否源于当前shell,shell提示符将更改为在命令提示符前缀中包含[linux devkit]:
下面的用法部分将介绍使用环境设置脚本非常有用的一些情况。
编译Linux内核时
因为环境设置会更改标准变量(如CC),所以在编译生成主机端和目标端工具的项目时不应使用此脚本。Linux内核就是一个很好的例子,它构建了一些主机端工具来帮助构建内核。如果已经为环境设置脚本提供了源代码,那么CC值将为主机端工具构建指定交叉编译器。这意味着在内核构建期间编译和使用的工具将针对ARM平台进行编译,而内核构建将尝试在Intel平台上运行这些工具。这将导致工具无法运行,内核无法编译。
用法
下面的部分给出了一些示例,说明如何使用包含的工具链编译一个简单的HelloWorld应用程序。
简单交叉编译
在最简单的情况下,交叉编译器可以用来编译只需要访问标准库的简单应用程序。下面的两个示例介绍了一个仅使用标准libgcc库的应用程序和另一个使用pthreads线程库的示例。
HelloWorld
像HelloWorld这样的简单应用程序可以通过调用交叉编译器来编译,因为交叉编译器可以找到构建它时使用的库,而不会产生任何问题。下面的步骤将展示如何创建一个简单的helloworld应用程序并交叉编译该应用程序。
创建一个helloworld.c文件
#include <stdio.h>
int main() {
printf ("Hello World from TI!!!\n");
return 0;
}
使用交叉编译工具链交叉编译helloworld.c文件。在本例中,我们将在没有添加到路径的情况下调用工具链.
host# <SDK INSTALL DIR>/linux-devkit/sysroots/x86_64-arago-linux/usr/bin/${TOOLCHAIN_PREFIX}gcc helloworld.c -o helloworld
在执行了上述步骤之后,现在你的目录中应该有一个helloworld可执行文件了,这个可执行文件已经为ARM编译过了。一个简单的检查方法是运行以下命令:
host# file helloworld
这应该会产生如下输出:
helloworld: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 3.2.0, with debug_info, not stripped
1.2. 构建SDK
1.2.1. 介绍
此页提供从源代码构建处理器SDK和各个组件的步骤。ProcessorSDK构建基于Arago项目,Arago项目为OpenEmbedded和Yocto项目提供了一组面向TI平台的层。
本页将提供重新创建处理器SDK所需的基本步骤,以及处理器SDK特定配置、构建目标和目标设备的参考。此外,还提供了提示和建议以及更深入信息的链接。
1.2.2. 快速启动
1.2.2.1. 先决条件(一次性设置)
主机设置-Ubuntu(推荐)
推荐的Linux发行版是ubuntu16.04或ubuntu18.04。
Ubuntu需要以下构建主机包。下面的命令将在ubuntulinux发行版上安装所需的工具。
对于Ubuntu 16.04和18.04,请运行以下命令:
$ sudo apt-get install build-essential autoconf automake bison flex libssl-dev bc u-boot-tools python diffstat texinfo gawk chrpath dos2unix wget unzip socat doxygen libc6:i386 libncurses5:i386 libstdc++6:i386 libz1:i386 g++-multilib
Ubuntu默认使用“dash”作为/bin/sh的默认shell。您必须通过运行以下命令重新配置才能使用
bash:
sudo dpkg-reconfigure dash
当被要求使用dash作为默认系统shell时,请确保选择“No”。
代理设置
如果使用代理,请参阅使用网络代理。
交叉编译工具链
从SDK发行版页面中提供的链接下载工具链编译器。将提取的工具链保存在主机Linux机器的
H
O
M
E
目
录
中
。
在
下
面
的
命
令
中
,
使
用
HOME目录中。在下面的命令中,使用
HOME目录中。在下面的命令中,使用HOME目录作为PATH_TO_TOOLCHAIN的路径。
注意
要构建所有SDK组件,需要两个编译器。对于在A72上运行的软件,请使用ARMv8;对于在R5F上运行的软件,使用ARMv7,请确保在开始yocto构建之前下载这两个工具链。
1.2.2.2 构建步骤
关于处理器SDK Linux特定版本的层配置,请参阅这里。有关其他目标的列表,请参阅构建选项。本机可设置为j7-evm。
cd yocto-build
./oe-layertool-setup.sh -f configs/psdkla/psdkla-<version>.txt
cd build
echo "INHERIT += \"own-mirrors\"" >> conf/local.conf
echo "SOURCE_MIRROR_URL = \"http://software-dl.ti.com/processor-sdk-mirror/sources/\"" >> conf/local.conf
echo "ARAGO_BRAND = \"psdkla\"" >> conf/local.conf
echo "DISTRO_FEATURES_append = \" virtualization\"" >> conf/local.conf
echo "IMAGE_INSTALL_append = \" docker\"">> conf/local.conf
. conf/setenv
TOOLCHAIN_BASE=<PATH_TO_TOOLCHAIN> MACHINE=<machine> bitbake -k tisdk-default-image
1.2.3 处理器SDK构建参考
下面几节提供有关Processor SDK的配置、构建选项和支持平台的信息。
1.2.3.1 层配置
关于处理器SDK Linux特定版本的层配置,请参阅这里。
1.2.3.2 构建选项
Images
除了单个组件包外,下表还提供了受支持的生成目标的列表。以下是命令中使用的:
MACHINE=<machine> bitbake <target>
“Build Output” 是相对于arago-tmp-[toolchain]/deploy目录给出的。
Target Build Output Description
arago-core-psdkla-bundle images/<machine>/processor-sdk-linux-image-<machine>.tar.xz Full SDK
tisdk-default-image images/<machine>/tisdk-default-image-<machine>.tar.xz Target Filesystem
1.2.3.3. 食谱
配方基础知识
可以为指定一个或多个配方,以提高配方开发和调试的粒度。指定一个配方名称,minus版本(如果名称后面附加了版本),将生成配方及其所有依赖项。
例如,下面的命令仅构建jailhouse配方及其定义的所有依赖项。
MACHINE= bitbake jailhouse
成功完成上面的bitbake命令后,arago-tmp-[toolchain]/work/-linux/jailhouse目录将可用,包括git文件夹下的原始源代码、packages split文件夹下的独立共享对象(.so文件)和deploy IPKs文件夹下的IPKs。
注意
请注意,配方的输出可以位于“arago-tmp-[toolchain]/work”目录下的另一个文件夹中,具体取决于配方的定义。
强制重新编译
如果需要,可以修改工作目录下的源代码(例如,arago-tmp-[toolchain]/work/-linux/jailhouse/git)。修改完成后,运行以下命令以强制重新编译新代码并重新生成配方,例如.,
MACHINE=<machine> bitbake jailhouse --force -c compile
MACHINE=<machine> bitbake jailhouse
安装软件包
要安装经过修改和重建的软件包,请将新IPK从deploy IPKs文件夹(例如,rago-tmp-[toolchain]/work/-linux/jailhouse/[version]/deploy-ipks)复制到目标系统,然后运行以下命令安装IPK:
opkg install [package_ipk].ipk
清理构建的配方
可以使用以下方法清理已构建的配方:
MACHINE=<machine> bitbake <target> -c cleansstate
cleansstate任务将清理配方的工作目录,并从编译期间其他配方使用的依赖树中删除配方的输出.
1.2.4 常见的变化
N/A
1.2.5 另请参阅
使用Arago项目构建TI SDKs的一般信息可以在Arago项目:设置构建环境中找到。此页面包含有关构建主机先决条件的信息,例如安装工具链、所需的主机包和配置,以及完全从源代码创建SDK所需的基本步骤。一旦熟悉了Arago项目信息,请阅读下一节,以获取ProcessorSDK支持的层配置、构建目标和平台的参考。
•Yocto项目
•开放式嵌入
•Arago项目
1.3. 目录结构概述
Processor SDK for Linux包含以下顶级目录和文件
这些目录包含用于为处理器SDK设备开发的代码和工具。
•bin -包含用于配置主机系统和目标设备的帮助程序脚本。大多数脚本都由setup.sh脚本设置。
•board-support - 包含SDK组件,当移植到自定义平台时需要修改。这包括内核和引导加载程序以及任何树外驱动程序。
•docs -包含各种SDK文档,如软件清单和额外的用户指南。您也可以在这里找到包含设备培训材料的培训目录。
•example-applications -包含TI在开箱即用演示期间提供的示例应用程序的源代码。
•filesystem -包含参考文件系统。这包括更小的基本文件系统以及全功能的SDK文件系统。
•linux-devkit -包含交叉编译工具链和库,以加速目标设备的开发。
•makefile -从SDK的顶层为许多SDK组件提供构建目标。
•Rules.make -设置顶级Makefile以及子组件Makefile使用的默认值。
•setup.sh -配置用户主机系统以及开发的目标系统。
•configs -包含Yocto配置,以描述不同的Yocto配方源和层,用于构建sdk。
•yocto-build -这个目录允许使用yocto bitbake重建SDK组件和文件系统。关于运行yocto构建的更多细节,请参阅构建SDK一节。
1.4 处理器SDK RTOS
处理器SDK RTOS是Jacinto 7系列设备上处理器SDK Linux的配套SDK。为了使用运行Linux内核的一些SoC特性,需要下载并安装PSDKRA包。
请在线或在${PSDKRA_PATH}/index.html下载安装程序后,参阅PSDK RTOS顶级用户指南。以获取更多细节。
PSDKRA提供的功能,可以从Linux A72 core上的Jacinto 7系列设备访问如下:
• TIDL on C7x
• Vision pre/post processing functions on C6x
• Vision HW accelerators (VPAC/DMPAC) on R5F
• CSI2RX on R5F
• Remote display on R5F
• Ethernet switch on R5F
• MCU/AutoSAR MCAL on R5F
• OpenVX on Linux A72 and RTOS C6x, C7x, R5F
• Deep learning demos on Linux A72
• Surround view demos on Linux A72
重要的
这个包不包含在PSDKLA安装程序中,需要单独下载.
1.5. 处理器SDK技术支持
技术支持是一个宽泛的术语。我们的愿望是提供一个可靠的产品、良好的文档和有用的培训,为开发基于Linux/RTOS/Android SDKs的产品定义一条清晰的道路。然而,我们知道我们永远不会涵盖所有可以做的事情,有时我们甚至会犯错误。所以,当你似乎找不到你需要的东西时,有一个好地方可以搜索以前回答过的问题并问一个新的问题——E2E支持论坛。
在这些论坛上,有一个活跃的分层社区和像您这样已经在使用TI处理器的其他客户。你可能会发现你的问题已经得到了快速搜索论坛的答案。如果没有,一个快速的帖子可能会提供你需要的答案。
•E2E处理器支持
1.5.1. 开源软件支持免责声明
处理器SDK Linux Automotive集成了各种免费和开源软件(FOSS),以演示jacino设备的硬件功能。自由/开源软件为客户提供了许多优势,如灵活性、互操作性、健壮性、缩短开发时间以及来自各自自由/开源软件社区的支持。
TI利用Yocto项目集成各种软件组件,构建处理器SDK Linux J721e。Yocto项目每年在4月和10月有两个版本。TI明年的长期支持(LTS)是基于今年10月发布的Yocto项目。在给定的一年里,TI的LTS版本迁移每年只发生一次,并且发生在第二季度末。LTS迁移通常意味着内核、U-boot、工具链、Yocto项目等的更新版本。有关当前版本的更多信息,
请参考发布特定部分的发布说明。因此,处理器SDK Linux J721e中包含的各种开源组件每年只更新一次。
尽管TI在处理器SDK Linux J721e中集成了自由/开源软件,但TI并不拥有、维护和支持整个自由/开源软件。如果用户有学习需求、特性增强请求或发现任何组件上的bug, TI鼓励用户向相关的自由/开源软件社区寻求任何额外的支持。下面是一些有用的资源,可以帮助你在一些独立的自由/开源软件组件上寻求支持。请记住,我们只展示了下面的几个组件,但是相同的概念适用于处理器SDK Linux J721e中集成的所有自由/开源软件。
Gstreamer Framework
• https://gstreamer.freedesktop.org/documentation/
• Gstreamer application tutorials: https://gstreamer.freedesktop.org/documentation/tutorials/
QT Framework
• https://www.qt.io
• https://doc.qt.io
• https://forum.qt.io
Wayland Weston
• https://wayland.freedesktop.org
Robot Operating System (ROS)
• http://www.ROS.org
• For meta-ros (embedded version of ROS, that runs on our ARM): https://github.com/bmwcarit/meta-ros
V4L2
对于编程外部视频设备,需要与V4L2驱动程序一起使用V4L2子设备驱动程序。它还使用一些辅助内核库videobuf2 (VB2)来进行常见的缓冲区操作、队列管理和内存管理。
• https://linuxtv.org/downloads/v4l-dvb-apis/
• https://linuxtv.org/downloads/v4l-dvb-apis-new/uapi/v4l/v4l2.html
• https://linuxtv.org/downloads/v4l-dvb-apis/kapi/v4l2-videobuf2.html
• https://linuxtv.org/downloads/v4l-dvb-apis-new/kapi/v4l2-subdev.html
Graphics
• Direct Rendering Infrastructure (DRI): https://dri.freedesktop.org/wiki/Documentation/
• Direct Rendering Manager (DRM): http://dri.freedesktop.org/wiki/DRM/
• Kernel Mode Setting (KMS): https://www.kernel.org/doc/html/v4.14/gpu/drm-kms.html
• Graphics Execution Manager (GEM): https://www.kernel.org/doc/html/v4.14/gpu/drm-mm.html#the-graphics-execution-manager-gem
Example applications:
• https://github.com/tomba/kmsxx
• https://git.ti.com/glsdk/example-applications/trees/master/drm-tests
• http://git.ti.com/sitara-linux/dual-camera-demo/trees/master
• The modetest tool is available inside git://anongit.freedesktop.org/git/mesa/drm
OpenCV
• OpenCV: https://opencv.org/
• Documentation, tutorials and examples of how to use OpenCV 3.1: https://docs.opencv.org/3.1.0/#gsc.tab=0
• OpenCL offload through OpenCV 3.1 transparent API: https://opencv.org/platforms/opencl.html
Hypervisor
• Jailhouse: https://github.com/siemens/jailhouse
• IVshmem based UIO driver: https://github.com/henning-schild-work/ivshmem-guest-code
1.6. GPLv3 免责声明
在目标和主机上,用于Linux的处理器SDK中都包含GPLv3许可的软件组件。Linux SDK的软件清单(software_manifest.htm)位于所安装SDK的docs/目录中。所有用于目标和主机的GPLv3组件都包含在SDK目录中。
警告
这些GPLv3组件仅用于开发目的,在生产解决方案中可以删除它们。
如何识别GPLv3组件
要识别安装在目标文件系统上的GPLv3组件,请运行位于目标文件系统上的gplv3-notice脚本,该文件系统位于/etc/init.d/gplv3-notice
gplv3-notice脚本将列出所有附带的处理器SDK Linux安装包。如果您安装了额外的GPLv3组件,此脚本可能要等到下一次目标重新引导时才能识别它们。
如何移除目标端GPLv3组件
gplv3-notice脚本还输出如何删除包。要从目标开发文件系统中删除单个包,使用opkg remove命令:
opkg remove <package>