Date: 2018-02-08
【1、从实际硬件上获取主芯片型号为TI的OMAPL138E 】,所属系列为OMAPL1,编译默认配置为davinci或者da850。
《以下内容失效》《《《2、登陆TI官方WiKi网站wiki.ti.com,在网页下方找到General Information主条目,在其中找到Getting Started Guides一项。
3、在2步骤中找到Before the Getting Started Guide一项,点击进去,此篇文档讲述了建立虚拟机和安装GNU/Linux操作系统及配置部分环境。
4、在2步骤中找到Getting Started Guide for OMAP-L1一项,点击进去,此篇文档讲述了开发板和SDK软件的一些知识,具体的网址如下:http://processors.wiki.ti.com/index.php/Getting_Started_Guide_for_OMAP-L1。
5、在4步骤中找到Running PSP Components一项,点击进去,此篇文档讲述了编译U-Boot、Linux内核和文件系统的相关知识,PSP是Linux Platform Support Package的简称。
6、在5步骤中可以下载DaVinci-PSP-SDK-03.20.00.08.tgz压缩包,下载地址是http://software-dl.ti.com/dsps/dsps_public_sw/sdo_tii/psp/LinuxPSP/DaVinci_03_20/index.html,该压缩包包含了DaVinci发行版的Linux内核、U-Boot、User Boot Loader (UBL)和Flash writers;CodeSourcery的Sourcery G++ Lite 2009q1-203 for ARM GNU/Linux交叉编译工具需要单独下载。
7、下载交叉编译工具,可以去官网https://sourcery.mentor.com/sgpp/lite/arm/portal/release858注册之后再下载arm-2009q1-203-arm-none-linux-gnueabi.bin(非常麻烦),安装步骤如文档http://processors.wiki.ti.com/index.php/GSG:_Installing_the_Software_for_OMAP-L1#Downloading_and_installing_the_Code_Sourcery_tools所示;或者直接百度下载arm-2009q1-203-arm-none-linux-gnueabi.bin;或者去TI官网http://software-dl.ti.com/processor-sdk-linux/esd/OMAPL138/latest/index_FDS.html下载最新版的ti-processor-sdk-linux-omapl138-lcdk-04.02.00.09-Linux-x86-Install.bin。
》》》《以上内容失效》
【8、下载交叉编译工具 】ti-processor-sdk-linux-omapl138-lcdk-04.02.00.09-Linux-x86-Install.bin,包含了6步骤中的所有东西外加交叉编译工具,http://www.ti.com/tools-software/processor-sw.html中介绍了最新开发工具和源码,该文档中的内容与6、7步骤中内容目的相同,但是是最新版本,我们工作中以8步骤的工具与源码为准。
【9、8步骤的内容 】可以从TI官网进入,一步一步找到:进入http://www.ti.com/,点击中间的Tools&software,点击下面的Software&development tools,点击左侧的Processors,跳转到Processor SDK界面,标题为Scalable Linux, TI-RTOS and Android solutions for TI processors,点击Downloads and technical details by platform中的OMAP-L138,跳转到Processor SDK for OMAPL138 Processors for Linux and TI-RTOS Support页面,在PROCESSOR-SDK-LINUX-OMAPL138后面点击Get Software,进入到PROCESSOR-SDK-LINUX-OMAPL138 04_02_00_09界面,下载ti-processor-sdk-linux-omapl138-lcdk-04.02.00.09-Linux-x86-Install.bin即可;下载包的种类为TI Software Development Kits (SDK) ,文件系统使用的是Yocto,交叉编译工具使用Linano GNU compiler collection(GCC),还包含实时Linux操作系统RT-Linux。
10、下载ti-processor-sdk-linux-omapl138-lcdk-04.02.00.09-Linux-x86-Install.bin后,加执行权限
chmod +x ti-processor-sdk-linux-omapl138-lcdk-04.02.00.09-Linux-x86-Install.bin
运行(安装该软件)
./ti-processor-sdk-linux-omapl138-lcdk-04.02.00.09-Linux-x86-Install.bin
【11、配置编译器 】
gedit /etc/profile
增加arm-gcc路径,
增加一行:export PATH=$PATH:YOUR_PATH.
例如:
export PATH=$PATH:/home/jim/Ti/ti-processor-sdk-linux-omapl138-lcdk-04.02.00.09/linux-devkit/sysroots/x86_64-arago-linux/usr/bin
【12、测试 arm-gcc 安装是否成功 】
终端输入:arm-linux-gnueabi-gcc -v
输出以下为成功(如果不成功source /etc/profile,还不行就重起电脑):
Using built-in specs.
COLLECT_GCC=arm-linux-gnueabi-gcc
COLLECT_LTO_WRAPPER=/home/a/Ti/ti-processor-sdk-linux-omapl138-lcdk-04.02.00.09/linux-devkit/sysroots/x86_64-arago-linux/usr/bin/../libexec/gcc/arm-linux-gnueabi/6.2.1/lto-wrapper
Target: arm-linux-gnueabi
Configured with: /OE/linaro-toolchain/_build/snapshots/gcc-linaro-6.2-2016.11/configure SHELL=/bin/sh --with-mpc=/OE/linaro-toolchain/_build/builds/destdir/x86_64-unknown-linux-gnu --with-mpfr=/OE/linaro-toolchain/_build/builds/destdir/x86_64-unknown-linux-gnu --with-gmp=/OE/linaro-toolchain/_build/builds/destdir/x86_64-unknown-linux-gnu --with-gnu-as --with-gnu-ld --disable-libstdcxx-pch --disable-libmudflap --with-cloog=no --with-ppl=no --with-isl=no --disable-nls --enable-c99 --enable-gnu-indirect-function --disable-multilib --with-arch=armv5te --with-float=soft --enable-multiarch --with-build-sysroot=/OE/linaro-toolchain/_build/sysroots/arm-linux-gnueabi --enable-lto --enable-linker-build-id --enable-long-long --enable-shared --with-sysroot=/OE/linaro-toolchain/_build/builds/destdir/x86_64-unknown-linux-gnu/arm-linux-gnueabi/libc --enable-languages=c,c++,fortran,lto --enable-checking=release --disable-bootstrap --build=x86_64-unknown-linux-gnu --host=x86_64-unknown-linux-gnu --target=arm-linux-gnueabi --prefix=/OE/linaro-toolchain/_build/builds/destdir/x86_64-unknown-linux-gnu
Thread model: posix
gcc version 6.2.1 20161016 (Linaro GCC 6.2-2016.11)
【13、使用SDK的两篇用户指引 】:http://processors.wiki.ti.com/index.php/Processor_SDK_Linux_Getting_Started_Guide
http://processors.wiki.ti.com/index.php/Processor_SDK_Linux_Software_Developer%E2%80%99s_Guide
14、安装好SDK后,~/ti-processor-sdk-linux-omapl138-lcdk-04.02.00.09/board-support/u-boot-2017.01+gitAUTOINC+340fb36f04-g340fb36f04/下即为UBoot源码
【15、编译UBoot 】
将~/ti-processor-sdk-linux-omapl138-lcdk-04.02.00.09/board-support/u-boot-2017.01+gitAUTOINC+340fb36f04-g340fb36f04/复制到~/2_Work/下改名为u-boot-2017.01,并进入到该目录
执行命令
make distclean CROSS_COMPILE=arm-linux-gnueabi-
make da850evm_defconfig
使用da850官方开发版的默认UBoot配置(备注DA850片子和OMAPL138片子硬件上一模一样,但是ROM里多了Aaudio codec算法,专供OEM大客户在数字音频方面的应用)
编译(没配全局环境变量的话要自带交叉编译参数)
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
16、UBoot烧录相关的文档和软件获取
先找到UBoot参考文档Using the OMAP-L132/L138 Bootloader
http://www.ti.com/ --> 列表第一项Products --> Embedded Processors 下的 Digital Signal Processors(DSP) --> 在跳转后的页面中选Products下面的OMAP-L1x:low-power DSP+ARM@ --> 在跳转后的页面中点击Tools&software --> 滚动到最下方在 Technical Documents中点击OMAP-L138 --> 跳转后页面目录级别为
TI Home > Semiconductors > Processors > Digital Signal Processors > C6000 DSP + ARM Processors > OMAP-L1x >
在Application notes中找到文档《Using the OMAP-L132/L138 Bootloader Application Report (Rev. E)》,地址为http://www.ti.com/lit/an/sprab41e/sprab41e.pdf,文档中第一页有UBoot格式更改、烧录时会用到的软件AISgen_d800k008_Install_v1.13.exe的下载地址URL:http://www.ti.com/lit/zip/sprab41
17、在Windows下或Ubuntu wine虚拟环境中安装AISgen_d800k008_Install_v1.13.exe软件
18、另外UBoot启动方式有多种,比如我们前期先从串口启动进行验证,官网上有介绍使用跳线来选择不同的启动介质)。
【19、安装AISgen 】(用于制作执行文件)(所需要的源文件,配置文件,UBoot文件都需要从同事熊文处获取)
映射Ubuntu串口到wine的Windows平台
cd ~/.wine/dosdevices
ln -s /dev/ttyUSB0 com1
ln -s /dev/ttyUSB0 COM1
ln -s /dev/ttyUSB1 COM2
ln -s /dev/ttyUSB1 com2
右击AISgen_d800k008_Install_v1.13.exe,打开方式,使用wine打开,一步步安装,安装完成之后生成两个应用程序AISgen_d800k008和UartHost.exe。
打开AISgen_d800k008.exe,File-->Load Configuration-->打开angelfish.cfg-->输入u-boot,生成uboot.bin。
【20、设置UBoot mkimage程序的环境变量 】,否则Linux内核只能编译出zImage,编译不出uImage
找到编译完的UBoot目录,将u-boot/tools这个目录记下来,Linux内核编译会用到,
临时生效环境变量
export PATH=/home/jim/2_Works/u-boot-2017.01/tools:$PATH
当前用户永久生效环境变量
gedit ~/.profile
然后添加
export PATH=/home/jim/2_Works/u-boot-2017.01/tools:$PATH
保存后
source ~/.bashrc
所有用户永久生效环境变量
gedit /etc/profile 步骤同上
《貌似安装SDK工具ti-processor-sdk-linux-omapl138-lcdk-04.02.00.09时该工具已经配置好了,
包括export PATH=~/ti-processor-sdk-linux-omapl138-lcdk-04.02.00.09/bin:$PATH》
【21、编译Linux内核 】,将~/ti-processor-sdk-linux-omapl138-lcdk-04.02.00.09/board-support/linux-4.9.59+gitAUTOINC+a75d8e9305-ga75d8e9305/复制到~/2_Work/下并改名为linux-4.9.59,并进入到该目录
使用davinci的默认配置
make davinci_all_defconfig ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
编译内核,设置内核加载地址
make uImage ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- LOADADDR=0xc0700000 -j8
其他命令:修改参数:make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- menuconfig
其他命令:清除上次编译内容:make distclean ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
其他命令:编译arch/arm/boot/dts/da850-lcdk.dts设备树:make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- da850-lcdk.dtb 编译后dtb文件在arch/arm/boot/dts/da850-lcdk.dtb
22、Ubuntu主机开启tftp服务,用于直接向UBoot传输内核
安装 sudo apt-get install tftpd-hpa
启动 sudo /etc/init.d/tftpd-hpa start 或者 sudo service tftpd-hpa start
要传输的内核文件 cp ~/2_Works/linux-4.9.59/arch/arm/boot/uImage /var/lib/tftpboot/
(稍后在UBoot中使用命令tftp c0700000 uImage即可将内核加载到板子内存)
23、Ubuntu主机开启nfs服务,用于内核启动时通过nfs直接加载nfs文件系统
安装 apt-get install nfs-kernel-server
建立共享目录
mkdir ~/nfsrootfs
chmod 777 ~/nfsrootfs
修改配置文件,允许nfsrootfs文件夹共享
sudo gedit /etc/exports
在里面加入/home/jim/nfsrootfs *(rw,sync,no_root_squash)
或者/home/jim/nfsrootfs 192.168.1.*(rw,sync,no_root_squash)
重启nfs服务
sudo /etc/init.d/nfs-kernel-server restart
//sudo exportfs –r
查看服务器目录和权限
showmount -e
判断是否成功
//sudo mount –tnfs localhost:/home/jim/nfsrootfs /mnt
24、使用一个USB转串口线,在PC主机上安装该款USB转串口的驱动,并获取到该串口的串口号,如COM1
25、从串口启动UBoot
打开UartHost.exe,选好没有中文路径的UBoot文件,波特率选为230400,断开板子电源,点击Start,再接上板子电源,板子上的UBoot即可从串口正常启动。
26、安装串口工具(Windows下可以安装SSCOM32)
sudo apt-get install cutecom
ls /dev/ttyUSB0
sudo usermod -aG dialout
注销Ubuntu并重新登陆或重启系统
打开cutecom
选择ttyUSB0串口,选择波特率为115200,输入回车,则会显示
U-Boot >
表示已经进入UBoot命令行
27、通过UBoot从网络启动Kernel
在Ubuntu主机中将网络IP改为手动,IP地址192.168.1.9,子网掩码255.255.255.0,默认网关192.168.1.1,通过网线连接板子,将Ubuntu主机网络断开,再重新连上
(可以在第15步时,在UBoot的make menuconfig中将delay时间由3秒改为300秒后再重新编译出uboot执行文件,便于UBoot启动后能来得及从串口进入UBoot命令行,不改动也不影响使用)
(如果不是从公司git仓库获取的源码,而是从TI官网获取的源码,第15步时如果开发板晶振有改动,则需要改动以下部分
homejim2_Worksu-boot-2017.01archarmmach-davinciKconfig 16和17行屏蔽掉
# select SYS_DA850_PLL_INIT
# select SYS_DA850_DDR_INIT
或者在menuconfig菜单中屏蔽
将homejim2_Worksu-boot-2017.01includeconfigsda850evm.h 31行
#define CONFIG_SYS_OSCIN_FREQ 24000000改为
#define CONFIG_SYS_OSCIN_FREQ 48000000
因为我们板子的晶振从24M改为了48M
)
27、配置UBoot环境
UBoot启动后的3秒内如果在串口终端输入了任意健,则会进入到UBoot命令行模式
在命令行中输入以下命令
设置板子IP | 标明Ubuntu主机IP | 设置默认网关IP(不会使用到) | 设置子网掩码 | 设置板子MAC地址
setenv ipaddr 192.168.1.88
setenv serverip 192.168.1.9
setenv gatewayip 192.168.1.1
setenv netmask 255.255.255.0
setenv ethaddr 32:34:46:78:9A:DC
ping 192.168.1.9 判断网络是否联通
setenv bootargs console=ttyO0,115200n8 initrd=0xc0700000,0x800000 设置最简单的内核启动方式
printenv 查看UBoot已经配置过的环境
28、只是单独加载内核
(如果是官方的源码,第21步时应该将~/2_Works/linux-4.9.59/arch/arm/mach-davinci/da850.c第41行的
#define DA850_REF_FREQ 24000000 改为
#define DA850_REF_FREQ 48000000 之后再进行编译Linux内核
)
UBoot命令中输入
tftp c0700000 uImage 将Ubuntu主机tftp中共享的uImage加载到板子RAM 0xc0700000地址处
bootm c0700000 从该内存地址处启动内核
此时可以从串口中看见内核被正常启动
29、制作nfs文件系统
将~/ti-processor-sdk-linux-omapl138-lcdk-04.02.00.09/filesystem/tisdk-server-extra-rootfs-image-omapl138-lcdk.tar.xz解压,
将解压后的文件夹内的所有文件拷贝到第23步中的~/nfsrootfs
重新再修改一下权限
chmod 777 ~/nfsrootfs
(如果是ramdisk或者其他文件系统需要做额外的制作工作,然后可以通过UBoot命令直接将该文件系统的压缩文件像内核一样通过tftp加载到内存,而无需用到nfs共享,命令类似于
tftp c1700000 ramdis.gz ////tftp $loadramdaddr $tftp_path/rootfs.ext2.gz.uboot ## 下载文件系统镜像到ram
bootm c0700000 c1700000 ////bootm $loadkernaddr $loadramdaddr ## 启动ram中内核和文件系统镜像
)
30、加载内核与文件系统
在Linux内核的menuconfig中配置nfs启动选项(我们下载的内核源码中已经配好了,可以不管)
使用路由器和自动IP配置的情况下:
setenv ethaddr 32:34:46:78:9A:DC 设置板子MAC地址
板子的网线连接路由器,电脑的网线也连接路由器,将电脑的ip查看一下,记下来,如192.168.0.169
setenv ethaddr 32:34:46:78:9A:DC
setenv bootargs mem=64M console=ttyS2,115200n8 noinitrd rw ip=dhcp root=/dev/nfs nfsroot=192.168.0.169:/home/jim/nfsrootfs,nolock rootwait
setenv bootcmd 'dhcp;setenv serverip 192.168.0.169;tftpboot;bootm'
boot
//setenv bootcmd 'dhcp;setenv serverip 192.168.0.169;bootm'
//saveenv
Linux引导成功之后,按一下回车,进入命令行
sh-3.2#
cd / 之后 ls,可以看到根目录下的文件夹。
在不使用路由器,电脑直接和板子用网线相连的情况下
在第27步的
setenv ipaddr 192.168.1.88 设置板子IP
setenv serverip 192.168.1.9 标明Ubuntu主机IP
setenv gatewayip 192.168.1.1 设置默认网关IP(不会使用到)
setenv netmask 255.255.255.0 设置子网掩码
setenv ethaddr 32:34:46:78:9A:DC 设置板子MAC地址
ping 192.168.1.9 判断网络是否联通
基础上输入再输入以下命令
setenv hostname jim 将jim改成自己Ubuntu主机的用户名
setenv rootpath /home/jim/nfsrootfs
setenv netdev eth0
setenv bootargs mem=64M console=ttyS2,115200n8 noinitrd rw root=/dev/nfs nfsroot=192.168.1.9:/home/jim/nfsrootfs ip=192.168.1.88:192.168.1.9:192.168.1.1:255.255.255.0:jim:eth0:off initrd=0xc0700000,0x800000
tftp c0700000 uImage 将Ubuntu主机tftp中共享的uImage加载v到板子RAM 0xc0700000地址处
bootm c0700000 从该内存地址处启动内核
此时可以从串口中看见内核和文件系统一起被正常启动
31、如果MAC地址有冲突,Kernel下载不成功,需要修改MAC地址(前提是Uboot中 flash驱动已存在,不过一般你不需要操作到这一步)
sf probe
sf erase 0x0 0x200000
setenv ethaddr 32:34:46:78:9A:DC
saveenv
printenv
32、以上只是已验证过的步骤,具体实施时每个人绝对都会遇到各自不同的问题,按照问题在网上一个个搜索解决才是正途。