Ubuntu-ARM FL2440 交叉编译及dnw下载环境搭建成功

来源:互联网 发布:预算软件破解 编辑:程序博客网 时间:2024/06/06 10:03

 环境搭建分为以下几个部分:

一、Ubuntu 安装:在windows下用磁盘管理工具从某个剩余空间较大的盘分出20G空间,用以安装Ubuntu,设置为主分区;直接光盘安装Ubuntu,安装完后,PC默认进入ubuntu系统,在ubuntu的启动项中也有windows的启动项。如果没有windows启动项,用win7安装光盘启动PC,修复windows启动,进入win7后,用EasyBCD添加Ubuntu的启动项即可。


二、arm-linux-gcc 3.4.1 安装:

1.下载arm-linux-gcc 3.4.1

2.在终端内将其压到某个目录,例如“/usr/local/arm”

   解压命令“tar  -jxvf  arm-linux-gcc 3.4.1.tar.bz2”

3.添加交叉编译器环境变量,命令“sudo vim /etc/bash.bashrc”,编辑根目录下etc中的bash.bashrc文件,在最后的一行fi上面添加路径如下:

export PATH=$PATH:/usr/local/arm/3.4.1/bin
fi

另启一个终端,命令“#arm-linux-gcc-V”,会提示有编译器的版本,安装完毕。

我们也可以解压多个版本的编译器,只要在 /etc/bash.bashrc添加所用编译器的路径即可。


arm-linux-gcc  hello.c  -o  hello

会生成hello.c的可执行文件,用“./hello”是不能执行该程序的,因为编译出来的bin程序,是针对ARM架构的,而非X86。


三、minicom 安装:

关于minicom,我直接给出链接  https://help.ubuntu.com/community/Minicom,这是ubuntu关于minicom的使用说明。

当安装完毕后,Ctrl+Alt+T,打开一个终端,并插上串口线(不然会打不开),在终端中输入minicom,出现如下内容,表明安装成功:

Welcome to minicom 2.5

OPTIONS: I18n
Compiled on May  2 2011, 00:39:27.
Port /dev/ttyUSB0

Press CTRL-A Z for help on special keys

如果你的开发板在linux系统下,还可通过minicom于开发板进行命令交互。


四、dnw 安装:

a.下载dnw压缩包dnw_linux.tar.gz于Home目录。

b.在终端中解压压缩包  命令是 tar xzvf dnw_linux.tar.gz

c.此时会在解压文件下看到dnw和secbulk两个文件夹。secbulk中的secbulk.c是PC对USB的驱动;

          dnw中的dnw.c是用于下载程序的源文件,要用gcc编译。

d.在secbulk.c可能需要改动或添加,用vi或vim编辑secbulk中的secbulk.c,可在文中找到下面的代码

           static struct usb_device_id secbulk_table[]= {
                   { USB_DEVICE(0x04e8, 0x1234)},
                   { }
            };

这个是USB的设备驱动ID,要给开发版下载程序,就要有开发板的ID。开发板的ID可以这样找:

不插开发板,输入命令    lsusb   会出现类似下面的东西

                   Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
                   Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
                   Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
                   Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
                   Bus 001 Device 003: ID 0bda:0139 Realtek Semiconductor Corp.
                   Bus 002 Device 003: ID 04f2:b272 Chicony Electronics Co., Ltd

                   Bus 002 Device 004: ID 192f:0416 Avago Technologies, Pte.

插上开发板,停在bootloader,然后在   lsusb,会有类似下面 内容

                   Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
                   Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
                   Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
                   Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
                   Bus 001 Device 003: ID 0bda:0139 Realtek Semiconductor Corp.
                   Bus 002 Device 003: ID 04f2:b272 Chicony Electronics Co., Ltd
                   Bus 002 Device 004: ID 192f:0416 Avago Technologies, Pte.
                   Bus 002 Device 005: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter
                   Bus 002 Device 006: ID 5345:1234 Owon PDS6062T Oscilloscope

可以看到多出两行,第一行是USB转串口的ID,第二行是开发版USB的ID,那么可将上面的内容修改为

                 static struct usb_device_id secbulk_table[ ]= {
                            { USB_DEVICE(0x5345, 0x1234)},
                            { }
                    };

如果还有其他添加的,可以在数组里添加,如下面的例子
                static struct usb_device_id secbulk_table[ ]= {
                            { USB_DEVICE(0x5345, 0x1234)},
                            { USB_DEVICE(0x2376, 0x1234)},
                           { }
            };
内容修改好以后,就进行编译,命令如下:
cd secbulk
make -C /lib/modules/`uname -r`/build M=`pwd` modules
如果权限允许和输入命令正确,应该可以正确编译,尤其是第二个命令,要注意空格和符号
编译好以后,会生成secbulk.ko,接下来要加载驱动,命令如下:
sudo insmod ./secbulk.ko   //有root权限,可不加sudo,如果一开始直接以"su root" 命令切换到root,以后均不用写sudo

          有时候内核更新,会导致驱动不能用,使用时还会出现“can not open secbulk”,这时要重新加载驱动。

如果以后修改了secbulk.c,再次编译和加载时,首先要用“rmmod secbulk.ko”命令卸载原来的secbulk.ko,否则会出现如下内容:
error inserting '/secbulk.ko'  -1 file exits
以上是关于secbulk的内容
此外,我还将secbulk.ko
放到了“/opt”文件夹,并在“/etc/rc.local”中添加了加载secbulk.ko的语句:
.

sudo insmod /opt/secbulk.ko
exit 0


这样开机就可以加载 secbulk.ko,不需要每次用都sudo insmod ./secbulk.ko ,如果不加载,还会出现

“can not open secbulk”之类的提示。    

对于dnw中dnw.c,也可能有修改的必要,vim编辑dnw中dnw.c,可以找到如下代码:
*((unsigned long*)file_buffer) = 0x30800000;    //load address
*((unsigned long*)file_buffer+1) = file_stat.st_size+8;

其中的下载地址视自己开发板的情况而定。
编译dnw.c命令是“gcc dnw.c -o dnw”
会生成dnw可执行文件,将dnw复制到“/usr/bin”即“根目录/usr目录/bin目录”,命令可用“cp dnw  /usr/bin/”
这时在终端直接输入dnw,出现“Usage: dwn <filename>”,表明dnw可用,

如果出现“can not open /dev/secbulk0”,则可能是权限的问题,用“sudo  dwn /xxx/xxx ”下载程序。

完成了上面的部分,按说可以结合minicom烧程序,但是,你会惊奇的发现,传输小的程序是会出现如下一幕:

file size :40 bytes
Writing data ...

0% 0 bytes

这是我传40byte程序的情况,百思不得其解,查了半天,csdn博客有一位叫girlkoo的大侠,他将dnw的源码改了一番,解救了我,使得dnw可以传送小程序,在此表示感谢,也许对阅读此文的你有帮助。以下是他的博客和dnw修改后源码的下载地址:

http://blog.csdn.net/girlkoo/article/details/6878897       博客地址
http://download.csdn.net/detail/girlkoo/3689525           修改后源码的下载地址


下载了修改后的dnw,按上面的方法操作,应该可以实现大小程序的下载。

以上是我建立环境时收集各种资料和结合自己的实际所记录的一篇文章,希望对来者有帮助。

完...





0 0
原创粉丝点击