ARM-LINUX学习笔记

发布者:会飞的笨鱼最新更新时间:2017-01-07 来源: eefocus关键字:ARM  LINUX  学习笔记 手机看文章 扫描二维码
随时随地手机看文章

    昨天安装了ssh服务之后今天在windows上用xshell登陆发现登录不上,原因是使用了virtualbox的NAT模式,在NAT模式下,客户机可以很方便地上网,但是想要链接宿主机就需要打开网络地址映射

    首先要知道ssh服务使用的是22端口,然后打开windows主机上的适配器,virtualbox安装了一张虚拟网卡,如下

虚拟地址为192.168.56.1,接下来在虚拟机的设置界面设置网络地址映射,首先还要知道虚拟机的IP地址,如下

地址为10.0.2.15,就可以去做端口转发了,位置如下

按照步骤来,设置名称随意,主机IP设置为虚拟机网卡的IP,端口可以写一个未被占用的任意端口,子系统IP为linux宿主机ip,端口为ssh服务端口,相当于说我们连接ssh的时候连接192.168.56.1的2222端口的时候,wirtualbox将数据转发到宿主机的22端口上,经过这一次中转就可以登录ssh了,接下来新建ssh连接如下

注意主机和端口号的设置,和我之前说的一样,这样就可在输入用户名密码之后连接上了,如下

 

 

共享文件夹的设置

virtualbox提供共享文件夹的功能,虽然写着自动挂载,但是通常ubuntu是不会自动挂载的,如下

这个时候就需要我们手动在系统中挂在共享文件夹了,首先你需要安装增强功能包,一般都会安装,安装了之后虚拟机用着才爽嘛

然后建立一个文件夹用于挂载共享文件夹

mkdir /mnt/linuxshare

可以建立在别的位置,但是我习惯在这里,建立之后就可以挂载了

mount -t vboxsf linuxshare /mnt/linuxshare

第一个linuxshare是你创建共享文件夹的时候自己制定的名称

第二个/mnt/linuxshare是你创建的挂载文件夹的目录

命令执行完没有错误信息挂载就成功了,然后关闭终端,重新打开终端

vim /mnt/linuxshare/text.c保存之后查看,应该在windows下的共享文件夹出现text.c文件了

 

 

有时候命令不太记得,看英文文档比较麻烦的时候我们可以选择安装中文的帮助包使用命令

sudo apt-get update 更新源

sudo apt-get install manpages-zh 安装中文manual

安装完成之后man ls应该就是中文提示了

 

接下来是串口的共享问题,我使用的是usb转串口的芯片ft232,这个芯片ubuntu14.02自带了驱动,不需要额外安装,但是我们要将这个物理usb转串口切换到虚拟机里面,首先要安装一个包,是wirtualbox的usb2.0增强包,名字叫做Oracle_VM_VirtualBox_Extension_Pack-4.3.26-98988.vbox-extpack,百度搜索一下在oracle的官方网站下载,下载之后安装就能启动usb2.0的支持了,接下来如下设置

按照设置添加这个usb,然后重启系统,重启完成之后应该就能看到usb转串口设备,这样查看

如果没有这个设备看看是不是自己弹出了,可以在这里弹出

串口设备安装好了之后打开设备,我们知道设备在linux上对应的都是文件,串口设备对应文件在这里

/dev/ttyUSB0

 

接下来是串口通讯,我们安装两个串口通讯软件,一个命令行一个图形化的,使用命令

sudo apt-get install minicom //命令行调试助手

sudo apt-get install cutecom //图形化调试助手

 

安装好minicom之后需要进行设置,命令为

sudo minicom -s

设置截图如下

设置完成之后保存为默认配置文件,退出界面,再次输入

minicom,自动打开串口(要是打开失败,屏幕右下角显示offline的)

然后将我手上的TQ2440开发板打到norflash启动(nor中已经有了bootloader),显示界面如下

好,到这里串口通讯完成,接下里为了摆脱windows我们还需要把usb完成

 

首先第一步是下载安装libusb-dev,如下

sudo apt-get install libusb-dev

安装完成之后,记得将TQ2440的USB端口导入linux,如下

到这里快成功啦,下载程序我们需要一个工具,windows有一个dnw,有人做了dnw2,源代码如下


/* dnw2 linux main file. This depends on libusb.
 *
 * Author:     Fox 
 * License:    GPL
 * */#include #include #include #include #include #include #define         QQ2440_SECBULK_IDVENDOR        0x5345#define        QQ2440_SECBULK_IDPRODUCT    0x1234struct 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)
        {            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 \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;
}


拷贝到linux中并建立文件dnw2.c,然后进入其目录,编译该文件

gcc dnw2.c -o dnw2 -lusb

编译的的时候有两个小警告,不要紧,查看目录下,生成了dnw文件如下

将该文件的路径加入到环境变量中,路径取决于你放在哪里,比如我放在/home/work/dnw2里面,那么我修改/etc/environment文件为这个样子

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/work/gcc-arm-none-eabi-4_9-2015q1/bin:/home/work/dnw2"

最后一个就是我的路径

做完之后记得

source /etc/environment

此时环境变量就加载成功了,接下来可以直接下载,找一个以前做好的bin文件,烧写命令如下

dnw2 文件名

如果说dnw2找不到看看是不是环境变量没有加进去,这个命令必须在root模式运行

sudo -i

source /etc/environment

dnw2 文件名

这样应该没问题了,还有问题,看

echo $PATH 看看环境变量对不对

 

到这里我们就可以快乐的在linux下烧写内核,镜像,裸机程序了

 

另外,每次烧写的时候都需要在USB中手动的插入tq2440USB设备,也可以直接设置过滤器,主要原因是烧写完成之后2440就把USB设备拔出了

 

前面说了cutecom,使用起来是这样的

 

恩,今天的笔记基本结束,开发环境基本OK了


关键字:ARM  LINUX  学习笔记 引用地址:ARM-LINUX学习笔记

上一篇:STM32单片机图片解码
下一篇:S3C2440 TFTLCD驱动详解

推荐阅读最新更新时间:2024-03-16 15:29

ARM处理器的节能优势
许多嵌入式ARM处理器的系统都是基于电池供电的能量供应方式,而处理器的功耗对于整个SoC芯片至关重要,因此ARM处理器的低功耗优势可以充分节省能量消耗。总之,当前的典型功耗的电流图并不依赖于标准过程、标准集或工作负载。 EnergyBench提供若干工具,这些工具可容易低与经济实用的硬件结合使用,以便使用E EM B C开发的标准方法测量典型功耗。不过,除了处理器之外,具体芯片设计和集成到芯片内部的外围模块也是影响芯片功耗的重要因素。虽然许多芯片供应商都会在产品的datasheet中提供功耗参数,但是这些参数往往是不具可比性的。当设计者试图对集成到SoC中的不同处理器进行对比时,如果想要弄清楚处理器的真实功耗是怎样
[单片机]
<font color='red'>ARM</font>处理器的节能优势
基于ARM的中英文翻译器设计
  为了改进某焊接设备只能输出打印英文单据的情况,设计了由高性能ARM7控制器——LPC2214为核心的英文转中文翻译器,详细论述了具体的硬件电路和优化的软件算法的设计原理,实验结果表明,翻译器对输入的英文数据量的大小无任何限制,能够显著降低系统硬件资源需求且能大大提升打印速度。大体概念外观如下图所示。   基于某焊接设备存储大量数据需要通过打印机输出,但由于该设备及其配套的微型热敏打印机只能英文打印,不能中文打印的问题,从而影响用户阅读。另外,原有的配套英文打印机具有打印速度缓慢、每一组数据间隔过大,浪费纸张等缺点。因此,为了解决上述问题,根据实际工程项目应用需要,提出一种基于ARM的英文转中文的翻译器设计方案,该设计是在原
[单片机]
基于<font color='red'>ARM</font>的中英文翻译器设计
MSP430F5529 DriverLib 库函数学习笔记(十四)看门狗定时器 (WDT)
平台:Code Composer Studio 10.3.1 MSP430F5529 LaunchPad™ Development Kit (MSP‑EXP430F5529LP) 硬知识 在工业控制现场,往往会由于供电电源、空间电磁干扰或其他的原因引起强烈的干扰噪声。这些干扰作用于数字器件,极易使其产生误动作,引起单片机程序跑飞,若不进行有效的处理,程序就不能回到正常的运行状态。为了保证系统的正常工作,一方面要尽量减少干扰源对系统的影响;另一方面,在系统受到影响之后要能尽快地恢复,看门狗就起到了这个作用。看门狗的用法:在正常工作期间,一次看门狗定时时间将产生一次系统复位。如果通过编程使看门狗定时时间稍大于程序中主循环执
[单片机]
MSP430F5529 DriverLib 库函数<font color='red'>学习</font><font color='red'>笔记</font>(十四)看门狗定时器 (WDT)
嵌入式系统启动流程(学习笔记)
Bootloader启动阶段 3个2 两个阶段:汇编语言阶段,C语言阶段 两次硬件初始化:基本硬件初始化,初始化时钟串口flash等 大部分硬件初始化 两次搬移:自搬移到内存,搬移内核到内存 linux内核启动阶段 自解压内核 运行内核汇编部分,检测合法性(CPU类型等) 运行内核C部分 挂载rootfs 运行第一个应用程序init(一般是linuxrc) 根文件系统阶段(可运行应用程序)
[单片机]
嵌入式系统启动流程(<font color='red'>学习</font><font color='red'>笔记</font>)
ARM2210的智能移动机器人人机界面设计
引言   嵌入式系统以其高性能、低功耗、低成本的优点,已经在很大程度上改变了人们的生活。如,MP3播放器、智能手机、数码相机产品等已经渗入人们生活的各个方面。随着液晶显示技术的不断进步,以及图形用户界面GUI (Graphical User Interface)技术的广泛应用,人机界面也越来越友好。它能为移动机器人的运动控制提供直观的路径图形、数据参数等。本文介绍了一种以嵌入式微处理器LPC2210为基础,应用ZLG/GUI软件包设计移动机器人人机界面的方法。   我们设计开发的智能移动机器人是一个以PC104嵌入式微机为中心处理器, TMS320F2812为运动控制器,超声波传感器作为避障的集合环境感知、动态决策与规划、行为控
[嵌入式]
STM32学习笔记:USART串口的使用
1. 串口的基本概念 在STM32的参考手册中,串口被描述成通用同步异步收发器(USART),它提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换。USART利用分数波特率发生器提供宽范围的波特率选择。它支持同步单向通信和半双工单线通信,也支持LIN(局部互联网),智能卡协议和IrDA(红外数据组织)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作。它还允许多处理器通信。还可以使用DMA方式,实现高速数据通信。 USART通过3个引脚与其他设备连接在一起,任何USART双向通信至少需要2个引脚:接受数据输入(RX)和发送数据输出(TX)。 RX: 接受数据串行输入。通过过采样技
[单片机]
基于ARM的嵌入式多路信号数据采集系统
由于人们对数字形式信息的需求量越来越大,数据采集及其应用技术受到了越来越广泛的关注和应用。随着技术的发展,数据采集系统正向着高精度、高速度、稳定可靠和集成化的方向发展。目前,大多数的数据采集监控系统都是独立的系统,只能进行数据的现场采集或存储,已不能满足应用的需要,迫切要求接入网络实现远程监控。现代数据采集技术的发展是建立在新型采集系统软硬件平台性能提高的基础之上的。具有强大功能的32位微控制器在一些高端仪器仪表中得到了广泛的应用,而将GPRS无线传输模块嵌入其中,将采集到的数据以无线的方式接入Internet,实现远程监控,非常适合工作人员在比较恶劣的环境下或者需要对多种参量进行采集时使用。而高性能微处理器的应用也极大提高了数据
[单片机]
基于<font color='red'>ARM</font>的嵌入式多路信号数据采集系统
ARM/DSP多机I2C通信方案
引言 在很多嵌入式控制系统中,系统既要完成大量的信息采集和复杂的算法,又要实现精确的控制功能。采用运行有嵌入式Linux操作系统的ARM9微控制器完成信号采集及实现上层控制算法,并向DSP芯片发送上层算法得到控制参数,DSP芯片根据获得的参数和下层控制算法实现精确、可靠的闭环控制。 本文以Samsung公司的ARM9芯片S3C2440和TI公司的DSP芯片TMS320F28015为例,分析了I2C通信接口的原理及特点,提出了基于I2C总线的多机通信接口设计方法。测试结果验证了该系统的可行性及可靠性,对嵌入式系统设计具有一定的借鉴价值。 1 多机系统组成 该多机控制系统以ARM9微控制器s3c2440为核心,采用I2
[单片机]
<font color='red'>ARM</font>/DSP多机I2C通信方案
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved