Showing posts with label Embedded. Show all posts
Showing posts with label Embedded. Show all posts

Wednesday, September 2, 2009

关于搭建ARM工具链 (ARM Toolchain)

以前写过一篇[怎样搭建ARM交叉编译环境?]的文章, 那时的我还以为arm-linux-gcc编译器是一个独立的软件, 可以直接获得. 但在Google搜索的结果里怎么也找不到一个独立的正式的页面, 只有些零散的下载点. 于是我有点怀疑自己的理解是否正确, 隐约记得有人通过编译的方式得到arm-linux-gcc, 这是不是和GCC有着某种联系呢? 接着又换了几个关键词进行查找, 发现原来平时使用的arm-linux-gcc就是由特定的编译参数编译GCC而得到的. 原来这一切没有现成的, 而是需要自己手动去编译呢. 不过这个编译过程实在是有点繁琐, 有兴趣的可以参考这两篇文章: Building a GNU/Linux ARM Toolchain, The GNU Toolchain for ARM targets HOWTO.

2010.5.26更新:
在uClinux的网站上也发现了搭建ARM工具链的详细步骤 ("build-arm-linux-*"文件), 并且提供了搭建过程中所需的各种源码包, 算是比较齐全的吧, 推荐一下.

对于一般使用者来说, 实在是没有必要去自己编译, 我把3.4.1和4.3.2两个版本的ARM工具链放到了网上, 方便以后的使用.

Tuesday, September 1, 2009

ARM板烧写文件系统失败的总结

这几天一直被一个很恼火的问题纠结着, 需要给块板子烧写文件系统, 但使用我前段时间介绍过的Linux下的DNW试了很多次都失败了, 又试了一个老外写的s3c2410_boot_usb (这个传输速度比DNW慢很多) 还是不行, 在SHE电脑上的XP下用Win版的DNW依旧不行, 可用某师兄的电脑烧的时候又每次都可以, 囧. 另一个师兄笑说这是人品问题, 呵呵~ 不过我就是不相信有那么离奇, 没道理只能在别人的电脑上才能成功, 一定会有解决办法的. 终于让我发现了一个传输上的小细节: 地址, 这时我才想到每次烧的时候我都没有指定地址, 而是使用的程序内部的默认地址. 于是试着修改了一下dnw2的源码, 把地址替换了, 结果, 嘿嘿, 肯定是成功了三, 哇哈哈~~~ 不过困扰了几天的问题居然是这么一个小细节...

为了以后的使用方便, 我又进一步完善了dnw2的源码, 使得可以通过命令行参数来指定地址, 最新打包好的程序: dnw2_linux_fixed_20090901.tar.gz. 同时我的修改版也得到了原作者Fox的认可, 并放到了他的SVN仓库里. 最后需要特别感谢Fox的贡献.

Sunday, August 23, 2009

在Linux下使用DNW

2009.9.1更新: 请下载dnw2_linux_fixed_20090901.tar.gz, 详情请参见[ARM板烧写文件系统失败的总结].

DNW是通过USB烧写软件到ARM板的工具, 由三星公司开发, 可是这个软件只有Window$版本. 那天想把Linux内核烧进去, 就在网上找了很久看有没有Linux下的替代品. 最后在ARM9之家论坛上发现有人重写了个简单的命令行版本, 源代码可以从Google Code上下载: dnw2_linux_latest.tgz, 或者下载我的修正版本: dnw2_linux_fixed.tar.gz, 主要修正了一些编译警告. 编译的时候要依赖libusb-dev, Ubuntu用户可以直接安装:
$ sudo apt-get install libusb-dev

Saturday, July 25, 2009

通过Minicom接收文件的临时解决方法

前段时间我写了一篇[Minicom传送文件问题], 解决了通过minicom把文件传送到ARM板的问题. 前天SHE同学需要一些数据, 因此我要把ARM板上的文件传到我的电脑上. 本来以为在有了以前的设置之后, 接收文件 (receive file) 应该是顺理成章的事, 结果我把zmodem, ymodem, xmodem, kermit, ascii全部试完都不行. 真是恼火, 在网上搜了很久也没有发现什么好的方法可以解决. 暂时用的这个邮件列表里的方法:
$ cat < /dev/ttyUSB0 > data
不过这只对于纯文本有效, 要是想传二进制的就不行了. 不过也有人提出了使用uuencode将二进制文件先转化为纯文本文件的方法:
$ uuencode binary_file /dev/stdout > uu_file
$ uudecode -o binary_file uu_file
这样就能用刚才的方法传送二进制文件了. 不过还是没有直接通过minicom传送方便快捷, 希望以后能找到好的解决方法.

注: Ubuntu使用uuencode和uudecode需要安装sharutils软件包.

2009.9.1 更新:
如果板子上有网线接口的话可以选择通过FTP的方式传输, 这种方法既满足了传, 也满足了接, 还是很不错的. 不过我一般比较懒, 不想把我的网线拔来拔去的, 不到万不得已是不会用这招的, 呵呵~ 还有, U盘、SD卡也行, 只要板子满足条件.

Saturday, July 18, 2009

怎样搭建ARM交叉编译环境?

2009.9.12 更新:
请转到[关于搭建ARM工具链 (ARM Toolchain)]查看.

今天师兄叫我再传一份当初我搭好的交叉编译环境时, 才发现以前都没记下来, 害的今天又去网上找了好久才找到原来的方法. 这里简记之.

我搭的这个ARM交叉编译环境很简单, 可以支持C和C++的编译. 先在这里下载以arm-linux-gcc开头的压缩包, 然后解压放到对应的目录就行了.

然后你可以选择修改PATH变量的方式把bin目录添加进去, 或者像我一样在现有的PATH里面放上符号链接. 这样就算搭建完毕了.

Minicom传送文件问题

好了, 有了上一篇文章的方法, 现在可以好好来调试程序了. 该怎么把PC上的文件放到板上去呢? 方法倒是很多啦, 由于板上自带了USB和SD卡接口, 所以可以通过U盘和SD卡拷过去. 板上还有一个网线接口, 通过网络也行, 挂载PC的NFS. 但是... 最简单的方法当然是通过minicom直接传送啦! (我以前怎么没想到...)

可我在选定好文件, 确定传送之后, 画面就一直卡在那了, 看来是不能传送. 这次又是LinuxSir.Org帮助了我, 请看: minicom无法上传文件,需要做什么设置吗?, 荣耀属于话语精简的3楼:
$ sudo apt-get install lrzsz
原来是缺少了一个软件, 这下好了, 障碍基本上扫清了, enjoy coding!

USB转串口线在Linux下的使用问题

由于这台台式电脑上神奇般的没有串口接口, 导致我调试ARM板那是相当得麻烦, 昨天从师兄那借了跟USB转串口的线, 就方便多了, 哇哈哈~ 不过这线很贵的说...

师兄跟我说在Win下需要先安装驱动, 我就在想了, 就这么一根线居然还要驱动... 于是有点担心没有Linux下的, 到官网上去看了看, 还挺不错的, Win、Linux、Mac都提供有. 下了几个试试 (因为不知道这根线的具体型号), 结果都出现了严重的编译错误, 在试着修正了一番后, 还是没有安上, 囧.

抱着试一试的心态去Google了下, 发现还真的有. 来自LinuxSir.Org的帖子: 在linux下如何驱动usb转串口线?, 6楼的回复道出了真谛啊~ Linux根本就不需要再额外安装驱动了! 当你把USB线插上时, 请输入以下命令:
$ dmesg | grep 'usb'
...
[14364.501032] usb 6-2: new full speed USB device using ohci_hcd and address 3
[14364.672886] usb 6-2: configuration #1 chosen from 1 choice
[14364.673609] usb 6-2: Detected FT232BM
[14364.673667] usb 6-2: FTDI USB Serial Device converter now attached to ttyUSB0
看到最后一句没? 现在就找到了设备名了, 然后再设置一下minicom就行了.

从这个故事我们了解到, 有时候看看内核的输出还是很有好处的, :)

Tuesday, June 9, 2009

使用Minicom的几个问题

Minicom是Linux下调试嵌入式板的利器, 和Window$下的超级终端属于同一类软件.

刚开始用的时候遇到了两个问题, 一个是中文问题. 如果你的默认环境是中文的话, 安装好的minicom会自动使用中文界面, 但是用中文显示会有一些比较严重的问题, 还是用英文好点. 我起先把环境变量LANG设置成en_US.UTF-8, 结果还是显示的中文, 在看过一篇文章后有了解决方法:
$ env LANG=en_US minicom
不知道这个为啥就行... 做成alias最好, 免得每次都输这么多.

第二个问题是键盘输入问题, 默认情况下minicom是不会响应键盘的, 在另一篇文章中知道了原因, 原来需要修改一个配置, 将Serial port setup下的Hardware Flow Control改成No就行了.