mini2440开发之完全摆脱windows环境(未验证)

news/2024/7/7 12:35:18

我们进行mini2440的linux开发,如果能只在linux下工作,工作效率会提高不少,也少了很多麻烦,省得来回切换,另外,linux下的工具可能比windows下还好用些。

我们为什么离不开windows呢?因为我们要用超级终端,和dnw工具。
友善之臂的手册上把linux下的串口工具描述得很难用的似的。实际上并非如此,而具简单得很。

一、串口工具。
windows下的是超级终端,那个东西,我说,太不好用了,一屏的东西只能看见几行,想看见多的东西还得要记入一个记事本文件里,可以说,这更像是linux下的工作风格,不知windows为什么不改善,实在是不好用。
Linux下有minicom,这个的配置也不难,网上有很多讲的,几步搞定,主要要注意的问题是----回车的时候好像我的只有大键盘区的回车好用,数字区的不好用。不知为什么。
而实际上,在linux下用minicom只是一般做法而己,并非唯一,也绝非最好。我们还有更好用的工具----kermit.这个比windows下的超级终端好用啊,最起码显示的文字有滚动条,可以查看多屏。
我的red hat上直接就有,不用安装的,大家可以试试,在终端输入kermit回车,有反应的话就恭喜你,你也不用安装了。
没有的话安装一个,网上找教程吧,也不难的,我不讲了。
只讲kermit的配置方法。很简单。kermit回车,进入后。
输入c回车,进入串口模式。
把下面代码放在终端里一一执行就行了。 set line /dev/ttyS0

 

set speed 115200

 

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
复制代码打开开发板,OK!显示出来了吧?
uboot里有个loadb命令是要用kermit传输的哦,这就方便了。
loadb 0x330000000
然后按ctrl+/,在按c.进入kermit模式,
send ./image.bin
go 0x33000000
是不是就可以直接运行了?

现在还不行,因为我们可能有些操作还依赖于dnw,linux下有吗?有!
前不久一直因为mini2440提供的usb下载驱动有毛病老是导致我的机死机或是重启,有时候还关不了机。一气之下决定到linux下去做,反正编译也是要在linux下做再拿到windows做下载的。找了很久终于让我找了个。跟大家分享一下。
(谢谢[url=space-uid-123.html]peimichael[/url]提醒,已经上传了附件,可直接下载用了.)
首先要安装libusb-dev这个库。我是在ubuntu下做的。
那么就:sudo apt-get install libusb-dev
这里帖子上讲的,网址在这里:http://www.usr.cc/bbs/thread-1531-1-1.html
我的red hat里libusb-dev也幸运的存在。所有只在编译一下就OK了。一个gcc命令解决。再来一个cp dnw2 /usr/bin这样就可以直接用了。
本文来自: USR组织官方网站(www.usr.cc) 详细出处参考:http://www.usr.cc/bbs/viewthread.php?tid=1625

 

 

 

 

 

 

 

 

 

 

 

前不久一直因为mini2440提供的usb下载驱动有毛病老是导致我的机死机或是重启,有时候还关不了机。一气之下决定到linux下去做,反正编译也是要在linux下做再拿到windows做下载的。找了很久终于让我找了个。跟大家分享一下。
(谢谢peimichael提醒,已经上传了附件,可直接下载用了.)
首先要安装libusb-dev这个库。我是在ubuntu下做的。
那么就:sudo apt-get install libusb-dev
装完之后就编译一个下载工具,网上有个牛人提供了一个。代码如下: /* dnw2 linux main file. This depends on libusb.

*

* Author:         Fox <hulifox008@163.com>

* License:        GPL

*

*/

 

 

 

#include <stdio.h>

#include <usb.h>

#include <errno.h>

#include <sys/stat.h>

#include <fcntl.h>

#include <unistd.h>

 

#define                 QQ2440_SECBULK_IDVENDOR                0x5345

#define                QQ2440_SECBULK_IDPRODUCT        0x1234

 

 

struct usb_dev_handle * open_port()

{

        struct usb_bus *busses, *bus;

 

        usb_init();

        usb_find_busses();

        usb_find_devices();

 

        busses = usb_get_busses();

        for(bus=busses;bus;bus=bus->next)

        {

                 struct usb_device *dev;

                for(dev=bus->devices;dev;dev=dev->next)

                {

                printf("idVendor:0x%x/t,ipProduct:0x%x/n",dev->descriptor.idVendor,dev->descriptor.idProduct);

                        if( QQ2440_SECBULK_IDVENDOR==dev->descriptor.idVendor

                        &&  QQ2440_SECBULK_IDPRODUCT==dev->descriptor.idProduct)

                        {

                                printf("Target usb device found!/n");

                                struct usb_dev_handle *hdev = usb_open(dev);

                                if(!hdev)

                                {

                                        perror("Cannot open device");       

                                }

                                else

                                {

                                        if(0!=usb_claim_interface(hdev, 0))

                                        {

                                                perror("Cannot claim interface");

                                                usb_close(hdev);

                                                hdev = NULL;

                                        }

                                }

                                return hdev;

                        }

                }

        }

       

        printf("Target usb device not found!/n");

 

        return NULL;

}

 

void usage()

{

        printf("Usage: dnw2 <file>/n/n");

}

 

unsigned char* prepare_write_buf(char *filename, unsigned int *len)

{

        unsigned char *write_buf = NULL;

        struct stat fs;

 

        int fd = open(filename, O_RDONLY);

        if(-1==fd)

        {

                perror("Cannot open file");

                return NULL;

        }

        if(-1==fstat(fd, &fs))

        {

                perror("Cannot get file size");

                goto error;

        }

        write_buf = (unsigned char*)malloc(fs.st_size+10);

        if(NULL==write_buf)

        {

                perror("malloc failed");

                goto error;

        }

 

        if(fs.st_size != read(fd, write_buf+8, fs.st_size))

        {

                perror("Reading file failed");

                goto error;

        }

 

        printf("Filename : %s/n", filename);

        printf("Filesize : %d bytes/n", fs.st_size);

 

        *((u_int32_t*)write_buf) = 0x30000000;                //download address

        *((u_int32_t*)write_buf+1) = fs.st_size + 10;        //download size;

 

        *len = fs.st_size + 10;

        return write_buf;

 

error:

        if(fd!=-1) close(fd);

        if(NULL!=write_buf) free(write_buf);

        fs.st_size = 0;

        return NULL;

       

}

 

int main(int argc, char *argv[])

{

        if(2!=argc)

        {

                usage();

                return 1;

        }

 

        struct usb_dev_handle *hdev = open_port();

        if(!hdev)

        {

                return 1;

        }

 

        unsigned int len = 0;

        unsigned char* write_buf = prepare_write_buf(argv[1], &len);

        if(NULL==write_buf) return 1;

 

        unsigned int remain = len;

        unsigned int towrite;

        printf("Writing data .../n");

        while(remain)

        {

                towrite = remain>512 ? 512 : remain;

                if(towrite != usb_bulk_write(hdev, 0x03, write_buf+(len-remain), towrite, 3000))

                {

                        perror("usb_bulk_write failed");

                        break;

                }

                remain-=towrite;

                printf("/r%d%/t %d bytes     ", (len-remain)*100/len, len-remain);

                fflush(stdout);

        }

        if(0==remain) printf("Done!/n");

        return 0;

}
复制代码把它保存为文件如:dnw2.c
接着编译: gcc dnw2.c -o dnw2 -lusb
编译完得到的dnw2就是usb下载的PC端了。
下载时用:dnw2 <filename>下载你的文件到板上。速度还不错哦。
干脆再生成的链接文件sudo ln -s ./dnw2 /usr/sbin/dnw2
这样在我们每编译完要下载的文件就可以直接下载了。
本文来自: USR组织官方网站(www.usr.cc) 详细出处参考:http://www.usr.cc/bbs/thread-1531-1-1.html


http://www.niftyadmin.cn/n/4464354.html

相关文章

matlab学习笔记(五)---空域变换增强-直接灰度调整

1、像素选择 &#xff08;1&#xff09;函数pixval(matlab7.8中此函数已过时)&#xff0c;改用impixelinfo&#xff0c;用来测试像素的值。 imshow canoe.tif;impixelinfo效果图如下&#xff1a;&#xff08;2&#xff09;函数impixel&#xff0c;用来得到像素的值。 语法格式…

带USB下载功能的uboot,支持mini2440(未验证)

带USB下载功能的uboot&#xff0c;支持mini2440(百问网原创) 文章发表于&#xff1a;2008-11-17 15:34 能做出这个uboot的人也就是论坛的坛主 thisway.diy&#xff0c;《嵌入式linux应用开发板完全手册》的作者韦东山&#xff0c;人称南山大哥。感谢他的开源代码&#xff0c;我…

matlab学习笔记(六)---空域变换增强-直方图处理

1、直方图均衡化 函数histeq&#xff0c;实现对输入图像的直方图均衡化 语法格式&#xff1a;略 I imread(tire.tif);J histeq(I);subplot(221),imshow(I),title(原始图像);subplot(222),imshow(J),title(直方图均衡图像);subplot(223),imhist(I),title(原始图像直方图);su…

kthread_create与kernel_thread的区别

kernel thread可以用kernel_thread创建&#xff0c;但是在执行函数里面必须用daemonize释放资源并挂到init下&#xff0c;还需要用completion等待这一过程的完成。 kthread_create是比较正牌的创建函数&#xff0c;这个不必要调用daemonize&#xff0c;用这个创建的kernel thre…

matlab学习笔记(七)---空域变换增强-图像间的代数运算

1、图像相加运算 1.1增强图像的亮度 I imread(rice.png);J imadd(I,50);subplot(1,2,1), imshow(I),title(原图像);subplot(1,2,2), imshow(J), title(增强图像的亮度);效果图如下&#xff1a;1.2图像叠加 I imread(rice.png);J imread(cameraman.tif);K imadd(I,J,uint1…

matlab学习笔记(八)---空域滤波增强

1、平滑滤波器 1.1线性平滑滤波器 1.1.1给图像加入椒盐噪声 Iimread(eight.tif); Jimnoise(I,salt & pepper,0.02); subplot(121),imshow(I),title(原始图像); subplot(122),imshow(J),title(加入椒盐噪声的图像);效果图如下&#xff1a;1.1.2对一个图像进行不同大小模板…

va_start va_end

C语言中可变参数的用法 我们在C语言编程中会遇到一些参数个数可变的函数,例如printf() 这个函数,它的定义是这样的: int printf( const char* format, ...); 它除了有一个参数format固定以外,后面跟的参数的个数和类型是 可变的,例…

添加系统调用 http://docs.huihoo.com/joyfire.net/6-1.html

第一步:1.找到linux 内核代码所在地,一般在你的系统这个位置(你下载代码放其他地方我不反对) /usr/src/linux/ 但是也可能是这个位置 /usr/src/linux-2.4/或者其他 找到后cd /usr/src/linux*/ 转到该目录下. linux*表示代码所在的文件夹2.修改内核代码 a.添加源文件 假设新加…