搜索
bottom↓
回复: 7

ARM Notes:

[复制链接]

出0入0汤圆

发表于 2011-1-7 22:14:48 | 显示全部楼层 |阅读模式
1--  Using the Jlink in Linux Operating System:

         =1= Install the libusb library:
                sudo apt-get install libusb-dev
         
         =2= Download The Jlink Driver for Linux
            
             Unzip the Driver,Enter the Directory:
            
             Run the Command below in the terminate with root Right to Copy the shared libraries to /usr/lib directory:
                   mv libjlinkarm.so.4  /usr/lib/
                   mv libjlinkarm.so.4.22.0  /usr/lib/
        
         =3=  Now We Can Run the JlinkExe or Start file to Run the software:
                    sudo ./start  
                 or
                    sudo ./JlinkExe

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

 楼主| 发表于 2011-1-9 20:11:35 | 显示全部楼层
2--  Use the PUTTY instead of SecureCRT in Ubuntu Linux
   
      =1=  Install ssh protocol :
                sudo apt-get install ssh
      
      =2=  Install the FTP Server vsftp
                sudo apt-get install vsftp
           After installed , it must be configured and restart
      
      =3=  Use the FileZilla replace the CuteFTP.

      Before use the putty to visit the other linux OS , you must make sure the firewall has been closed or properly configured .

出0入0汤圆

 楼主| 发表于 2011-4-25 12:32:16 | 显示全部楼层
3--    Install the Serial Soft And Export the linux-arm-gcc to the PATH


       ========== Vedio:  (please change the suffix to .tar.7z)================

点击此处下载 ourdev_633406I5XS1E.rar(文件大小:20.61M) (原文件名:Ubuntu_ARM_1Step__.mpeg.tar.7z.rar)

出0入0汤圆

 楼主| 发表于 2011-4-25 22:25:29 | 显示全部楼层
4--Use the DNW or usb2ram download the user progrom to the ARM
==========from:  http://apps.hi.baidu.com/share/detail/22264303==========
      ubuntu下ARM开发环境的配置

以下配置是个人总结,在自己的电脑上测试通过,按此方法配置请根据自身情况修改

一般C语言开发环境的安装:

sudo apt-get install build-essential

Minicom的安装:

#lsmod | grep usbserial

#sudo apt-get install minicom

#minicom -s /配置minicom

A-Serial Device:/dev/ttyUSB0 因为我是USB转串口

E-Bps/Par/Bits:115200 8N1

F和G均用NO

然后保存为dfl

tftp的安装:

sudo apt-get install tftp-hpa tftpd-hpa

sudo apt-get install xinetd

建立tftp服务的目录

cd /

sudo mkdir /tftpboot

sudo chmod 777 /tftpboot

sudo gedit /etc/xinetd.d/tftp

文件内容如下:

service tftp

{

    disable = no

    socket_type     = dgram

    protocol            = udp

    wait                    = yes

    user             = root

    server          = /usr/sbin/in.tftpd

    server_args     = -s /tftpboot -c

    per_source      = 11

    cps         = 100 2

}

然后sudo /etc/init.d/xinetd restart

sudo in.tftpd -l /tftpboot

用网线连接计算机和开发板后,设置好计算机的IP地址,然后打开tftp服务,进入开发板终端,输入tftp -gr filename 计算机IP 便可下载程序,程序必须位于/tftpboot下

将有线网卡的IP地址设为静态:

sudo gedit /etc/network/interfaces

加入以下几行

auto eth0
iface eth0 inet static
address 192.168.1.88
gateway 192.168.1.1
netmask 255.255.255.0

arm-linux-gcc的安装:

下载包后,在/usr/local/下建立名为arm的文件夹,然后解压缩,将里面的bin文件夹添加到环境变量,方法如下

sudo gedit /etc/profile

在后面加入export PATH="$PATH:/usr/local/arm/2.95.3/bin",根据版本不同文件夹名字也不一样,bin目录下有arm-linux-***一些文件就是我们要找的,然后注销使环境变量生效

echo $PATH可以看看设置是否成功

像一般的C一样写个hello.c

然后arm-linux-gcc hello.c -o hello

编译好的hello在ubuntu下运行不了,可以./hello试下

用上面的tftp把hello弄到开发板的/tmp目录下,然后chmod 777 hello后就可以运行了

出0入0汤圆

 楼主| 发表于 2011-4-25 22:29:55 | 显示全部楼层
/*usb2ram.c  GNU License*/

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <math.h>

#include <sys/types.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include <fcntl.h>

#include <usb.h>

const char *
hexdump(const void *data, unsigned int len)
{
        static char string[65535];
        unsigned char *d = (unsigned char *) data;
        unsigned int i, left;

        string[0] = '\0';
        left = sizeof(string);
        for (i = 0; len--; i += 3) {
                if (i >= sizeof(string) -4)
                        break;
                snprintf(string+i, 4, " %02x", *d++);
        }
        return string;
}

#define QT2410_VENDOR_ID        0x5345
#define QT2410_PRODUCT_ID        0x1234
#define QT2410_OUT_EP        0x03
#define QT2410_IN_EP        0x81

static struct usb_dev_handle *hdl;
static struct usb_device *find_qt2410_device(void)
{
        struct usb_bus *bus;

        for (bus = usb_busses; bus; bus = bus->next) {
                struct usb_device *dev;
                for (dev = bus->devices; dev; dev = dev->next) {
                        if (dev->descriptor.idVendor == QT2410_VENDOR_ID
                            && dev->descriptor.idProduct == QT2410_PRODUCT_ID
                            && dev->descriptor.iManufacturer == 1
                            && dev->descriptor.iProduct == 2
                            && dev->descriptor.bNumConfigurations == 1
                            && dev->config->bNumInterfaces == 1
                            && dev->config->iConfiguration == 0)
                                return dev;
                }
        }
        return NULL;
}


static u_int16_t qt2410_csum(const unsigned char *data, u_int32_t len)
{
        u_int16_t csum = 0;
        int j;

        for (j = 0; j < len; j ++) {
                csum += data[j];
        }

        return csum;
}

#define CHUNK_SIZE 100
static int qt2410_send_file(u_int32_t addr, void *data, u_int32_t len)
{
        int ret = 0;
        unsigned char *buf, *cur;
        u_int16_t csum = qt2410_csum(data, len);
        u_int32_t len_total = len + 10;

        printf("csum = 0x%4x\n", csum);

        /* 4 bytes address, 4 bytes length, data, 2 bytes csum */

        buf = malloc(len_total);
        if (!buf)
                return -ENOMEM;

        /* FIXME: endian safeness !!! */
        buf[0] = addr & 0xff;
        buf[1] = (addr >> 8) & 0xff;
        buf[2] = (addr >> 16) & 0xff;
        buf[3] = (addr >> 24) & 0xff;

        buf[4] = len_total & 0xff;
        buf[5] = (len_total >> 8) & 0xff;
        buf[6] = (len_total >> 16) & 0xff;
        buf[7] = (len_total >> 24) & 0xff;

        memcpy(buf+8, data, len);

        buf[len+8] = csum & 0xff;
        buf[len+9] = (csum >> 8) & 0xff;

        printf("send_file: addr = 0x%08x, len = 0x%08x\n", addr, len);

        for (cur = buf; cur < buf+len_total; cur += CHUNK_SIZE) {
                int remain = (buf + len_total) - cur;
                if (remain > CHUNK_SIZE)
                        remain = CHUNK_SIZE;

#if 0
                printf("sending urb(0x%08x): %s\n",
                        addr + (cur - buf), hexdump(cur, remain));
#endif
                if((cur-buf)%(500*CHUNK_SIZE)==0){               
                        printf("+\n");
                }

                ret = usb_bulk_write(hdl, QT2410_OUT_EP, cur, remain, 0);
                if (ret < 0)
                        break;
        }

        free(buf);

        return ret;
}

#if 0
static int qt2410_send_file(u_int32_t addr, void *data, u_int32_t len)
{
        int i, ret;
        u_int32_t cur_addr;
        void *cur_data;

        for (cur_addr = addr, cur_data = data;
             cur_addr < addr + len;
             cur_addr += CHUNK_SIZE, cur_data += CHUNK_SIZE) {
                     int remain = (data + len) - cur_data;
                if (remain > CHUNK_SIZE)
                        remain = CHUNK_SIZE;
       
                ret = qt2410_send_chunk(cur_addr, cur_data, remain);
                if (ret < 0)
                        return ret;
        }

        return 0;
}
#endif

#define KERNEL_RAM_BASE        0x30008000
//#define KERNEL_RAM_BASE        0x33F80000

u_int32_t str2hex(char *str)
{
        u_int32_t tmp[8];
        u_int32_t hex=0;
        int i;
        for(i=0;i<strlen(str);i++)
        {
                tmp=str-'0';
                hex+=pow(16,7-i)*tmp;
        }
        return hex;
}

int main(int argc, char **argv)
{
        struct usb_device *dev;
        char *filename, *prog;
        struct stat st;
        int fd;
        u_int32_t word = 0x7c7c7c7c;
        u_int32_t ram_base;
       
        if(argc==2){
                ram_base=KERNEL_RAM_BASE;
                filename = argv[1];        }

        else if(argc==3){
                ram_base=str2hex(argv[1]);
                //printf("\nram_base=%x\n",ram_base);
                filename = argv[2];        }
        else{
                printf("Usage:  usb2ram  addr  filename\n");
                printf("i.e: usb2ram  30008000  led.bin\n");
                exit(1);
        }       

        usb_init();
        if (!usb_find_busses())
                exit(1);
        if (!usb_find_devices())
                exit(1);

        dev = find_qt2410_device();
        if (!dev) {
                printf("Cannot find MY-2410 device in waiting download mode\n");
                exit(1);
        }

        hdl = usb_open(dev);
        if (!hdl) {
                printf("Unable to open usb device: %s\n", usb_strerror());
                exit(1);
        }

        if (usb_claim_interface(hdl, 0) < 0) {
                printf("Unable to claim usb interface 1 of device: %s\n", usb_strerror());
                exit(1);
        }

        if (!filename) {
                printf("You have to specify the file you want to flash\n");
                exit(2);
        }

        fd = open(filename, O_RDONLY);
        if (fd < 0){
                printf("Can not open %s",filename);
                exit(2);
        }

        if (fstat(fd, &st) < 0) {
                printf("Error to access file `%s': %s\n", filename, strerror(errno));
                exit(2);
        }

        /* mmap kernel image passed as parameter */
        prog = mmap(NULL, st.st_size, PROT_READ, MAP_SHARED, fd, 0);
        if (!prog)
                exit(1);

        if (qt2410_send_file(ram_base, prog, st.st_size)) {
                printf("\nEnd of downloading program\n");
                exit(1);
        }
        exit(0);
}

出0入0汤圆

 楼主| 发表于 2011-4-25 22:31:08 | 显示全部楼层
/*Makeflie of usb2ram*/


#!/usr/bin/make
cc=gcc
LDFLAGS=-lusb -lm

all: usb2ram

clean:
        -rm -f *.o usb2ram

usb2ram: usb2ram.o
        $(CC) $(LDFLAGS) -o $@ $<

boot_usb.o: boot_usb.c
        $(CC) $(CFLAGS) -o $@ -c $<

.PHONEY: all clean


============(orignal)from:   http://blog.csdn.net/dengchendeng/archive/2010/11/24/6033533.aspx  ===============
usb2ram软件下载地址:

http://forum.ubuntu.org.cn/viewtopic.php?f=97&t=107504

下载下来的压缩包中解压后是有一个可执行文件的,但是这个可执行文件一般不能执行,需要在自己的系统上重新编译才能用

首先要修改Makefile文件,在第一行之后添加如下这行,用以设定编译器:

CC=gcc

修改之后的Makefile文件如下:

#!/usr/bin/make
CC=gcc
LDFLAGS=-lusb -lm

all: usb2ram

clean:
    -rm -f *.o usb2ram

usb2ram: usb2ram.o
    $(CC) $(LDFLAGS) -o $@ $<

boot_usb.o: boot_usb.c
    $(CC) $(CFLAGS) -o $@ -c $<

.PHONEY: all clean

编译前先清除无用的文件,以确保后面能够正常编译,这时执行一下命令:

make clean

再次编译前要确保有libusb 和libusb-dev两个库,我是看的网上文章的提示。若是没有,编译时就会提示:

cc -lusb -lm -o usb2ram usb2ram.o
/usr/bin/ld: cannot find -lusb
collect2: ld returned 1 exit status
make: *** [usb2ram] 错误 1

于是我就输入命令: sudo apt-get install libusb libusb-dev  进行两个库的安装

这时又有提示:

正在读取软件包列表... 完成
正在分析软件包的依赖关系树      
正在读取状态信息... 完成      
E: 无法找到软件包 libusb

说是找不到libusb,这时我就输入如下命令:

sudo apt-get install libusb-dev

只安装libusb-dev这个库,这个库可以找的到,安装好之后再make,就成功生成了usb2ram可执行文件

下面讲讲它的用法:

我用的是TQ2440的开发板,首先确保norflash里面有bootloader,这时选择从norflash启动,

出现如下菜单界面:

#####    Boot for Nand Flash Main Menu  #####                                 
[1] Download u-boot to Nand Flash                                             
[2] Download Eboot                                                            
[3] Download Linux Kernel                                                      
[4] Download WinCE NK.bin                                                      
[5] Download CRAMFS image                                                      
[6] Download YAFFS image                                                      
[7] Download to SDRAM & Run                                                   
[8] Boot the system                                                            
[9] Format the Nand Flash                                                      
[0] Set the boot parameters                                                   
[a] Download User Program                                                      
Download LOGO Picture (.bmp) to Nand  Flash                                
[l] Set LCD Parameters                                                         
[r] Reboot u-boot                                                              
[q] quit from menu                                                            
Enter your selection:1

在这里我选择的是1:下载uboot到nandflash

这时终端提示:

USB host is connected. Waiting a download.

表示你现在可以使用usb2ram软件下载镜像文件了

这时启动另外一个终端,进入usb2ram可执行文件所在的目录,输入一下命令:

sudo ./usb2ram 30000000 /home/deng/ARM/images/u-boot_W35.bin

这个命令的形式是:sudo ./usb2ram  地址  文件

一开始在命令之前没有加sudo,提示如下错误:

Unable to claim usb interface 1 of device: could not claim interface 0: Operation not permitted
加上之后就好了

现在切换到由nandflash启动,启动时按住空格建进入下载模式,这时跟norflash启动效果一样,说明uboot已经下载到了nandflash中

也可以用同样的方法将其他的镜像下载只开发板

出0入0汤圆

 楼主| 发表于 2011-5-14 11:25:58 | 显示全部楼层
CH340 CH341 , USBToRS232 Driver for Windows 7 X64:

(验证可用的CH340,CH241的USB转RS232 在windows 7 64位系统下的驱动):


点击此处下载 ourdev_639722FX7BGG.ZIP(文件大小:159K) (原文件名:CH341SER.ZIP)

出0入0汤圆

 楼主| 发表于 2011-5-20 10:50:15 | 显示全部楼层
7 --  Install the VMWare in Ubuntu:

     <1> Copy the Installer to the Ubuntu Filesystem : eg copy to the home directory
     
     <2> sudo chomd 777 VWware****.bundle  
     
     <3> sudo ./VMware***.bundle  
   
      then follow the direction click the next button to the finish .
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 15:12

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表