也谈谈搭建一套arm入门级的开发环境。

内核编译和嵌入式产品的设计与开发
回复
steventree
帖子: 133
注册时间: 2007-11-05 21:58
来自: CH

也谈谈搭建一套arm入门级的开发环境。

#1

帖子 steventree » 2009-09-06 22:14

ARM-Linux开发环境搭建


其实写这个贴子是因为重装系统了, 发现有些事情之前没有记录,不得不重新搞一遍。
所以动了这个念头。
目标:
在Ubuntu上搭建一套包括编译器,代码编辑,版本管理,下载,源码级调试的环境。用纯开源软件的组合。
尽量多图形化界面,尽量少的命令行操作。

需要的软件:
编译套件 ELDK. --从官网上下个ISO。注意有很多版本,
代码编辑软件, K-scope, Source Navigator, Eclipse CDT, ---这些都可以从源里面装较旧版的。也可以自己从源码编最新版的。
调试工具 GDB , insight. --这个可以下源码自己编译,一般不会出问题。
远程调试 OCD commander. Open OCD
版本管理软件 服务器端 subversion, 客户端 esvn , Eclipse 上装subverise.

1. 安装ELDK, 这个最简单一步,
先mount上iso,
/media/cdrom/install -d /home/yourpath 即可。选其他的安装路径也可以,但你一定要有权限访问。
如果用sudo来安装后面用的时候是需要修改权限的,会比较麻烦。 然后添加路径到 /etc/profile文件
export PATH=$PATH:/yourpath/eldk/usr/bin:/yourpath/eldk/bin
这两步完成后,可以实验一下,重起一下, 然后打开命令行窗口, 运行一下arm-linux-gcc -v 命令。
看到能输出版本号就对了。

2. 配置SVN server.
先在新立得里面安装esvn, 貌似默认的源里面类似没有, 需要先添加几个源。
cn.archive.ubuntu.com/universe 这个源有。
subversion 好像是默认安装的。
安装好这两个软件, 会发现有两个问题:
a. esvn需要在菜单中建一个启动项。
系统/首选项/主菜单, 左边栏里选中 编程, 右变点新建项目。
命令这里选/usr/bin/esvn 找到这个文件, 其他的随便填下就好了。
b. 需要启动subversion服务
先在你的用户权限可以访问到的地方创建一个目录作为你的SVNROOT. 修改好这个目录的权限。
(svn其实是需要做一个用户组权限管理的。因为是个人电脑,在此省去)
如果有现成的SVN 的Repository的话, 现在就可以cp进这个目录了。
系统/首选项/启动程序, 创建一个新的启动项。 命令这里先选
/usr/bin/svnserve -d -r YOU_PATH_OF_SVNROOT
(-r后面是你创建的SVNROOT的路径)
其他的可以随便填。

再实验一下,开esvn , File/Browse Repository ,URL输入
svn://host电脑的IP/Repository的名字, 看看是否可以访问了。
如果家里有局域网,可以从其他的电脑也试试。

3. 装K-scope的问题在于8.10以后好似从源里装回不能用, 这个问题,论坛里已经有解决方法,不罗嗦了。
K-scope个人感觉最致命的问题是如果工程较大, 则如果你有些一行就保存一下的良好习惯,就会遭遇类似死机般的等待。

Source Nav的问题在于源里的版本太旧, 这个问题我另外的帖子有记下了。
编译SourceNav的时候很简单的就可以搞定: 解压后,在源码目录里面./configure;make;sudo make install.
就可以了,如果碰到Xlib.h的问题, 就用新立德装个libX11-dev.

Eclipse是依赖于Java的, 需要先安装JRE,如果你还要玩Android, 那么就需要装JDK6而不是JRE.
从源里装JRE会有很多乱码。
Eclipse 从官网下最新版的直接解出来cp进你的home目录就能用(前提是装好了JRE,这个装也很简单)。缺点是慢。 源里面的版本比较旧。
Eclipse装好以后还需要装一些其他的包。 如Subversive 之类的, 这样可以直接在Eclipse上update/commit.
还有许多的gdb 和调试的工具。配置Eclipse的事等以后再慢慢补充。
安装 Subversive
help/software update/Availiable software/Add site 里面添加下面两个路径。
1. http://community.polarion.com/projects/ ... ileo-site/
2. http://download.eclipse.org/technology/ ... date-site/
然后刷新一下, 勾上这两个site里面的全部可以安装的部件, 点install。
如果install出问题,可以先装 1.里面的东西, 装完了再装2. 如果装2的时候看到
Cannot find a solution satisfying the following requirements Match[requiredCapability: org.eclipse.equinox.p2.iu/org.eclipse.swt 这样的错误。
去掉Subverise SVN connectors这个子文件夹的勾勾就应该可以了。
GDB hardware debugging. 这个软件包在CDT的可选里面, 不用添加路径。直接输入gdb就可以找到。 refresh一下, install即可。
Zylin Enbedded CDT 这个包比较难安上, 网站经常连不上。
http://www.opensource.zylin.com/zylincdt




4. insight
insight , insight 是一个调试的工具, 它是依赖于GDB的,(下载到的源码中已经包含GDB的源码了).
ubuntu 8.04, 8.10等默认安装是缺少一些库文件的, 比较典型的是libncurses-dev和libc6-dev这两个包。
如果缺少这两个包, 会出现这两个错误: C compiler cannot create executable. 和 no termcap library found. 没什么话好说,点新立德装上就可以好了。
如果碰到X11/Xlib.h No such file 之类的问题, 安装一下libX11-dev这个包。

具体的安装步骤可以参考帖子:viewtopic.php?f=97&t=159051

基本上, 把源码解压到源路径, 建一个目标安装目录,./configure的时候 用--prefix=DestPATH, 用--target=arm-linux 加上一个--enable-sim 的几个参数。
然后make;sudo make install
viewtopic.php?f=97&t=159051
我们在新立德里面把Gcc 4.3卸载, 然后安装4.2版Gcc。 注意这一步需要先检查一下你的依赖关系,如果你安装了比如ATI受限的二进制驱动, 就必须要小心。 因为卸载Gcc将会导致ATI驱动同时被卸载。再开机就花屏了。
Insight的源码下载地址: http://sourceware.org/insight/downloads.php.
下载后先解压, 会用命令行的用命令行, 不会的就用压缩包管理器来解压。
解出来以后, 需要注意, 原代码目录和要安装到的目录注意要分开。
编译insight时候,需要configure 一些选项, 比如安装目标路径(insight编译过程是在目标目录中进行的),
编译的目标类型(我们需要的目标是arm-linux)

5. openocd
openocd 在源里面已经有一个了。但不是很确定它是支持什么JTAG的。
编译过程没有办法用图形界面,Sorry.

所以我们自己编译一个给wiggler(支持SDT或者其他并口的JTAG)。 再编译一个给openJtag.
编译openocd给wiggler比较简单。 下载最新的openocd稳定版本的代码即可。
解压出来。进入到代码目录。
直接./configure --enable=parport --prefix=要安装到的路径。
make;sudo make install


编译openocd给OpenJTAG之类的FT2xx类型的JTAG需要下载Ftdi的linux驱动。
http://www.ftdichip.com/Drivers/D2XX.htm
注意Ubuntu下面需要区分i386和AMD64的。我写文档的时候最新的版本为libftd2xx0.4.16
下好以后在openocd的目录中解开. 会产生一个libftd2xx0.4.16目录, 更名为libftd2xx.
./configure --enable-ft2232_ftd2xx --with-ftd2xx-linux-tardir=/home/yourpath/openocd-0.2.0/libftd2xx --prefix=/usr/local/bin/openocd-ftd2xx;make;sudo make install.
/home/yourpath/openocd-0.2.0/libftd2xx 就是我们解压出来的路径。
注意 --with-ftd2xx-linux-tardir选项是和Cygwin下不一样的选项。
如果提示
./.libs/libopenocd.a(ft2232.o): In function `ft2232_quit':
/home/steven/Code/openocd-0.2.0/src/jtag/ft2232.c:2773: undefined reference to `FT_Close'
./.libs/libopenocd.a(ft2232.o): In function `ft2232_write':
/home/steven/Code/openocd-0.2.0/src/jtag/ft2232.c:347: undefined reference to `FT_Write'
./.libs/libopenocd.a(ft2232.o): In function `ft2232_init_ftd2xx':
/home/steven/Code/openocd-0.2.0/src/jtag/ft2232.c:1809: undefined reference to `FT_SetVIDPID'
/home/steven/Code/openocd-0.2.0/src/jtag/ft2232.c:1839: undefined reference to `FT_OpenEx'
/home/steven/Code/openocd-0.2.0/src/jtag/ft2232.c:1847: undefined reference to `FT_OpenEx'
/home/steven/Code/openocd-0.2.0/src/jtag/ft2232.c:1903: undefined reference to `FT_SetLatencyTimer'
/home/steven/Code/openocd-0.2.0/src/jtag/ft2232.c:1909: undefined reference to `FT_GetLatencyTimer'
/home/steven/Code/openocd-0.2.0/src/jtag/ft2232.c:1919: undefined reference to `FT_SetTimeouts'
/home/steven/Code/openocd-0.2.0/src/jtag/ft2232.c:1925: undefined reference to `FT_SetBitMode'
/home/steven/Code/openocd-0.2.0/src/jtag/ft2232.c:1931: undefined reference to `FT_GetDeviceInfo'
/home/steven/Code/openocd-0.2.0/src/jtag/ft2232.c:1871: undefined reference to `FT_ListDevices'
/home/steven/Code/openocd-0.2.0/src/jtag/ft2232.c:1882: undefined reference to `FT_ListDevices'
./.libs/libopenocd.a(ft2232.o): In function `ft2232_purge_ftd2xx':
/home/steven/Code/openocd-0.2.0/src/jtag/ft2232.c:1960: undefined reference to `FT_Purge'
./.libs/libopenocd.a(ft2232.o): In function `ft2232_read':
/home/steven/Code/openocd-0.2.0/src/jtag/ft2232.c:385: undefined reference to `FT_Read'
collect2: ld returned 1 exit status
make[3]: *** [openocd] 错误 1

这个错误是因为.libs/libopenocd.a 和 libftd2xx.a.0.4.16 这两个库的链接顺序错误, 观察一下出错前的最后一条gcc命令, 它是libftd2xx.a.0.4.16 在前,libopenocd.a 在后。
我们把它掉个各, 前面已经编译完成的就重新编译了。 直接进入到 openocd-0.2.0/src目录下, 用下面的命令。
gcc -std=gnu99 -g -O2 -I/home/yourpath/openocd-0.2.0/libftd2xx -Wall -Wstrict-prototypes -Wformat-security -Wextra -Wno-unused-parameter -Wbad-function-cast -Wcast-align -Wredundant-decls -Werror -o openocd main.o /home/yourpath/openocd-0.2.0/src/.libs/libopenocd.a /home/yourpath/openocd-0.2.0/libftd2xx/static_lib/libftd2xx.a.0.4.16 -lpthread -ldl
yourpath请替换成你机器上的路径。
注意,完成这一步后 openocd文件将会直接在当前src目录下生成。 将会省过make install这一步。需要的话,请自行cp 到你需要的地方去。
(注:这解决办法来自http://forum.sparkfun.com/viewtopic.php?t=16773&sid=d742502993f505cb82917bb677531753, 感谢proze)。

需要文档的话, 加make pdf, 或make html即可。openocd网上也有。

如果你同时有wiggler和openJTAG, 需要分别编译,注意最好安装在不同的路径。或者给他们命不同的名。


6. Windows端的机器设置
安装这两个程序hw-support-6.00和openocd-r1454就可以了。

7.都生成好了, 就可以开始配置你的Eclipse 和openjtag了。 具体步骤可以参考http://www.100ask.net/bbs/attachment.aspx?attachmentid=97的教程
这个文档包括了Windows和ubuntu Linux的操作步骤。 因为太详细,所以不再重复。

8. Vim 编辑器环境的搭建。
Vim也是一个流行的编辑环境, 下面描述一下在WIN和Linux上的一些不同地方。
Ubuntu上安装Vim, 一般在安装/删除软件中选择gvim安装即可, 但在新立德中搜索gvim是没有的,名称应该是vim-gnome, 搜索vim则可以。
Win上是需要下载一个gvim 的exe, 安装即可。

* 对于不少人来说,非常困惑的一点,(文档的大忌) 所有的插件安装说明里面反复提到的一个缩写$VIM. $VIM, 在WIN上一般是指c:\program files\vim这个路径。linux下一般是/usr/share/vim. 对于$VIM, 可以在gvim下,通常模式下(指按了esc键以后的模式),输入:ver指令来查看,可能在第二页。
* $HOME/.vim和$HOME/vimfiles,这两个说法在VIM的插件安装说明反复提到, 注意一个是讲Linux(.vim)一个是讲WIN(vimfiles), WIN下的vimfiles就是c:\program files\vim\vimfiles
* vimrc 文件, 在WIN上是在c:\program files\vim\vimfiles\_vimrc, 而在linux下则是/home/yourname/.vimrc .对于这样的区别, 一般都写成~/.vimrc ,难怪大家都看不懂。好在用vim的多半不会是菜鸟,不会被这点问题难倒。
* 插件安装, Win下面安装时, 安装选项中有一个是否创建plugin目录的选项, 可以选中它。这样比到处瞎找要好的多。Ubuntu下在你的home目录(我是说/home/yourname/)下创建一个.vim目录(以点开始的是隐藏目录).
* 像C-support, taglist这类型的用zip文件压缩过的插件, 需要解压, 解压后的文件夹多半还在一个taglist的文件夹里面, 我们需要的是taglist文件夹里面的plugin目录这些东西。注意一下就好。
* vimcdoc,这个提供了一个中文文档,同时提供了win下面安装用的exe文件,注意这个exe文件,在有些电脑上安装完成以后会出现gvim原本好好的中文菜单变成乱码的问题,注意在exe安装中会提示安装选项,注意把中文文档设置为默认帮助文档设置的这个勾要去掉,根据vimcdoc安装完成后产生INSTALL 文件中的说明, 它会把vimcdoc.vim作为一个全局插件放入vim, 这个插件会把vim的编码改为utf-8, 在WIN2K电脑上安装时需要注意这一点。不过理论上出现乱码, 去掉这个插件应该j就可以,我没有试过。 INSTALL文件中提供了一个方法来手动设置帮助文件默认是中文,即把下面的代码加入到_vimrc中。

if version >= 603
set helplang=cn
endif

* ctags 的vim插件,默认是已经在ubuntu版和win版的gvim中安装包中了。 但需要注意, ctags和cscope这俩个软件却没有安装。ctags 有win版的安装包。其实里面就一个exe文件有用,把他丢进WinNT\system32,确保在windows命令行里面能直接敲ctags这个命令就行了。ubuntu下直接新立德安装之即可。在命令行下,进入代码工程的根目录, 敲 ctags -R ,看看tags文件有没有生成。如果生成了,在vim中用:set tags=/your/Code/Path/tags 的命令让vim找到tags文件, 就可以享受ctrl+]和ctrl+t的乐趣了。
* cscope我还没有玩通,记一下,大致方法和ctags是类似的。不过cscope是用:cs add的方式来加它的数据库的。诸如此类。
上次由 steventree 在 2009-12-06 10:35,总共编辑 7 次。
talqaedak
帖子: 1
注册时间: 2009-09-07 11:29

Re: 也谈谈搭建一套arm入门级的开发环境。

#2

帖子 talqaedak » 2009-09-07 11:31

大侠,怎么不接着写了,我刚入门arm,很需要这方面的指导阿。
steventree
帖子: 133
注册时间: 2007-11-05 21:58
来自: CH

Re: 也谈谈搭建一套arm入门级的开发环境。

#3

帖子 steventree » 2009-09-07 20:09

呵呵,今天来继续。
BTW, 我也是菜鸟。
steventree
帖子: 133
注册时间: 2007-11-05 21:58
来自: CH

Re: 也谈谈搭建一套arm入门级的开发环境。

#4

帖子 steventree » 2009-09-13 21:15

4. insight
insight , insight 是一个调试的工具, 它是依赖于GDB的,(下载到的源码中已经包含GDB的源码了).
编译它需要比较低版本的GCC, 比如4.2版的。Ubuntu8。10 和9。04 用的Gcc版本都比较高(4.3.2或4.3.3),4.3对于语法检查有做比较大的修改,编译的时候会碰到一些错误。
我们在新立德里面把Gcc 4.3卸载, 然后安装4.2版Gcc。 注意这一步需要先检查一下你的依赖关系, 如果你安装了比如ATI受限的二进制驱动, 就必须要小心。 因为卸载Gcc将会导致ATI驱动同时被卸载。 再开机就花屏了。我就是在这里碰到点麻烦。好不容易才绕过去。
Insight的源码下载地址: http://sourceware.org/insight/downloads.php.
下载后先解压, 会用命令行的用命令行, 不会的就用压缩包管理器来解压。
解出来以后, 需要注意, 原代码目录和要安装到的目录注意要分开。
编译insight时候,需要configure 一些选项, 比如安装目标路径(insight编译过程是在目标目录中进行的),
编译的目标类型(我们需要的目标是arm-linux)
回复