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 <username>
注销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步时如果开发板晶振有改动,则需要改动以下部分
home\jim\2_Works\u-boot-2017.01\arch\arm\mach-davinci\Kconfig  16和17行屏蔽掉
# select SYS_DA850_PLL_INIT
# select SYS_DA850_DDR_INIT
或者在menuconfig菜单中屏蔽
将\home\jim\2_Works\u-boot-2017.01\include\configs\da850evm.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、以上只是已验证过的步骤,具体实施时每个人绝对都会遇到各自不同的问题,按照问题在网上一个个搜索解决才是正途。

03 TI OMAPL138E Linux移植 (Davinci) (资源获取+从串口启动UBoot+从网络启动Linux与文件系统)相关推荐

  1. linux内核根据skb获取目的mac地址

    linux内核根据skb获取目的mac地址 工作笔记 工作笔记 linux编程 直接通过skb里面的信息获取mac,如下 1.struct ethhdr *eth_hdr = (struct ethh ...

  2. linux移植嵌入式系统,嵌入式系统学习——S3C2451之Linux移植步骤

    Linux内核裁剪.根文件系统制作.系统烧录 环境: Redhat5 Mini2451开发板 linux-3.6内核 这几天学习了linux在mini2451开发板上的移植,以及后续的简单字符设备.混 ...

  3. uboot加载linux内核加载那些内容,几个地址参数及uboot加载启动内核过程的理解

    关于uBoot和Linux内核中几个地址参数及uboot加载启动内核过程的理解 uboot一般使用mkimage工具先制作一个启动映象文件来引导识别内核的,uboot源代码的tools/目录下有mki ...

  4. TI Davinci DM6441嵌入式Linux移植攻略——UBL移植篇

    目录(?)[+] 一DM6441的Boot过程简介 二DM6441的UBL移植 CCS文件夹 Common文件夹 GNU文件夹 移植DDR2 移植Nand Flash 其它 声明:本文参考网友zjb_ ...

  5. omapl138移植uboot系列之启动TI官方移植的Linux内核(启动内核第一篇)

    启动TI官方移植的Linux内核 和编译uboot一样,Linux内核的编译也是三板斧,首先修改Makefile中的ARCH和CROSS_COMPILE,然后找到你要编译的板卡执行make xx_de ...

  6. 将 Linux 移植到 M1 Mac 真的太难了!

    ????????关注后回复 "进群" ,拉你进程序员交流群???????? [CSDN 编者按]自去年苹果自研 M1 芯片发布之后,激发了无数用户的体验热情,与此同时,也吸引大批开 ...

  7. zedboard移植linux内核,[干货]手把手教你用Zedboard学习Linux移植和驱动开发

    作者:殷建飞 本文是昨天发的文章<龙芯杯CPU设计竞赛与ZYNQ设计流程介绍>接续部分.重点介绍传统方式的Linux移植和Xilinx的Petalinux的快速移植开发两种. 部分硬件设计 ...

  8. linux can总线接收数据串口打包上传_「干货」手把手教你用Zedboard学习Linux移植和驱动开发...

    本文是昨天发的文章<龙芯杯CPU设计竞赛与ZYNQ设计流程介绍>接续部分.重点介绍传统方式的Linux移植和Xilinx的Petalinux的快速移植开发两种. 部分硬件设计中需要CPU完 ...

  9. Linux 移植流水账

    Linux 移植流水账 首先,要看芯片的核Linux是否支持,如果不支持,那么工作量极其大,放弃吧. 如果cpu核linux支持的话,移植linux,主要是根据SOC所集成的外围模块,将驱动完成. 下 ...

最新文章

  1. JavaScript数据运算
  2. 23种设计模式C++源码与UML实现--模板模式
  3. sklearn下的ROC与AUC原理详解
  4. 阿里云RDS vs 自建MySQL,这篇评测终结你的选择困难症!
  5. Gentoo man手册指南
  6. django国际化与html语言,Django 国际化
  7. html5中figure怎么用,figure 和 figcaption 元素的正确使用方式
  8. C++中时间相关函数的使用
  9. 删除mysql主键语句_MySQL主键添加/删除
  10. mysql Split函数
  11. 如果NATv6 是个笑话,那么 IPv6 是什么?
  12. 剑指offer之【把数组排成最小的数】☆
  13. PL/SQL Developer使用笔记
  14. Windows10下安装linux(Utunbu)双系统
  15. 卡内基梅隆 计算机音乐,卡内基梅隆大学音乐技术专业申请要求
  16. js+ajax编码三级联动
  17. 《基于深度学习的加密流量识别研究》-2022毕设笔记
  18. 用余弦算法做相似度匹配
  19. Java中if条件语句举例详解
  20. AirSim学习(1)-介绍,安装,unity测试

热门文章

  1. 封条格式用word怎么打_怎么用word制作封条
  2. 数据结构28——高精度计算PI值
  3. 找回忘记的ADSL拨号密码
  4. UG 二次开发中文帮助文档,UFun在线帮助文档, NX API 中文帮助文档
  5. python名字的来历_你知道Python的由来吗
  6. python高效识别验证码 极简 dddd
  7. 写一个函数,使给定的一个3 × 3的二维整型数组转置,即行列互换。
  8. 2003服务器文件自动只读,您不能查看或更改只读或文件夹在 Windows Server 2003、 Windows XP、 Windows Vista 中或在 Windows 7 中的系统属性...
  9. VirtualBox网络连接方式学习笔记
  10. 计算机辅助测试普通话考试流程,必看!普通话考试全流程详解!