前言
嵌入式开发,特别是针对老旧芯片,老旧开发板的开发工作是十分艰难的,因为现有版本的工具已经很难做到对老旧版本软件,老旧芯片的支持,存在大量的兼容性错误。所以本文旨在探索一条现阶段可行的针对powerpc 440的嵌入式开发方法。希望有看到这篇文章的人能学习到我的失败经验,少走一些弯路。
这篇文章写的挺多,其实更偏向于笔记。主要的原因就是失败了太多次,每次都得重新安装,而安装的时间又太长,只能写写笔记消磨点时间,也为日后重装的时候累积经验。
开始
本次使用的硬件平台为XILINX Virtex-5 ML507开发板,对上面的powerpc440硬核进行开发。
系统为Fedora 33
就后续开发经验来看,这个版本显然太高了,可能造成很多的兼容性问题。
最好在fedora 20以下或者ubuntu 18以下
果然fedora 33上失败了,转到了CentOS5上进行。
编译环境搭建使用crosstool-ng-1.24.0
http://crosstool-ng.org/download/crosstool-ng/
u-boot使用2015.4
https://ftp.denx.de/pub/u-boot/
kermit
kermit是连接串口和网络的通信软件,使用此软件来设置linux主机的串口和与目标的网络通信。
对于fedora 33,可也直接使用
kermit的安装
sudo yum install ckermit
来进行安装。
或者访问
http://www.columbia.edu/kermit/
下载kermit这个软件时,你会发现有两个kermit包。你只需要安装ckermit。其中gkermit仅仅是实现kermit传输协议的一个命令行工具。
如果是手动下载的话,解压后输入make linux
进行安装,成功后会生成一个wermit。
按照官网的意思wermit是用来测试的,运行正常即可改名为kermit放到/usr/bin里
进行串口配置
CH340串口驱动
https://blog.csdn.net/bingyu9875/article/details/80651778
不知道什么原因,linux串口驱动无法安装。
fedora 33好像是kernel太新目录结构改了,导致驱动无法编译。不过新版本的linux自带驱动了。
CentOS 5感觉像是编译器版本不对,编译.c大面积报错。
但是CentOS最起码能识别到usb,但是fedora好像一点反应都没有
暂时用win上的串口显示吧
kermit串口配置
主要看看这个
https://blog.csdn.net/u013029731/article/details/88877350
u-boot的ml507板的设置。
波特率9600。
kermit在执行其它命令之前,会执行你的用户目录下的初始文件.kermrc,所以可以非常简单的通过初始化命令来定制kermit。
~/.kermrc:
set line /dev/ttyS0
set speed 9600
set carrier-watch off
set handshake none
set flow-control none
robust
set file type bin
set file name lit
set rec pack 1000
set send pack 1000
set window 5
这个设置假定你使用的是主机第一个串口(/dev/ttyS0),以115200这个波特率与目标板的串口连接。
然后你可以连接目标板了:
$ kermit -c
Connecting to /dev/ttyS0, speed 115200.
The escape character is Ctrl-/ (ASCII 28, FS)
Type the escape character followed by C to get back,
or followed by ? to see other options.
配置TFTP服务器
使用U-Boot下载Linux内核或者应用程序的最快捷的方法是通过网络传输。为了这一目的,U-Boot实现了TFTP协议(参见U-Boot中的tftpboot命令)。为了使主机支持TFTP,你必须确保TFTP后台程序/usr/sbin/in.tftpd已经安装。
在RedHat系统中,你可以运行下面的命令来确认:
$ rpm -q tftp-server
如果没有安装,请从你的Linux安装盘或者其它媒介安装。
在fedora 33中,也可以直接使用yum来安装
$ sudo yum install tftp-server
大多数的Linux发行版都默认关闭TFTP服务。以RedHat系统为例,如果要使能TFTP服务,编辑文件/etc/xinetd.d/tftp,移除这一行:
disable = yes
或者注释掉它,或者修改disable = no
此外,确保/tftpboot目录存在,而且有访问权限(至少应该"dr-xr-xr-x")。
对于新版的linux,比方说我用到的fedora 33,使用指令即可开启服务
$ sudo systemctl start tftp
$ sudo systemctl enable tftp
$ sudo firewall-cmd --permanent --add-service tftp
$ sudo firewall-cmd --reload
使用crosstool-ng搭建交叉编译环境
crosstool-ng,全称是crosstool Next Generation,即下一代crosstool。
对于CentOS 5的配置
因为centos5已经停更,原来的yum源已经失效,需要更改yum源来使用yum。
gedit /etc/yum.repos.d/CentOS-Base.repo
将以下内容替换原来的内容
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#
[base]
name=CentOS-$releasever - Base
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
baseurl=http://vault.centos.org/5.11/os/$basearch/
gpgcheck=1
gpgkey