交叉开发-------1.1交叉开发基础

本文详细介绍了如何在Linux环境下安装和使用交叉编译器,包括工具链的获取、安装步骤以及如何将程序通过串口、U盘和网络传输到嵌入式开发板上运行。重点涵盖了交叉编译的概念,以及不同方式下程序的下载和执行过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1.交叉编译

1.1.交叉编译器的安装

        1.把交叉编译器工具链的压缩包,放到自己Linux下面(家目录)

        2.解压到一个合适的目录

        3.找到你解压之后的编译器目录

        4.修改环境编译

1.2.将程序下载到嵌入式开发板上面运行

1.2.1  通过串口和PC通信传输程序方式

    1.2.2   通过U盘传输程序:

        1.给自己的U盘建立文件系统分区

        2.格式化(mkfs)

        3.挂载(mount)  

        4.卸载 

1.2.3通过网络方式传输:开发板有一个有线网卡,可以直接联网

        a.连接网线

        b.设置网络信息(IP地址)

c.在虚拟机中搭建一个文件传输服务器(tftp/ftp)


交叉开发
    也是一种开发方式,也是用来开发软件的
    编写代码------->编译代码(gcc)--------->运行代码

1.交叉编译


    交叉编译,也是一种编译方式,也是把一种程序语言翻译为一种机器语言
        交叉?(corss-compiling)
        编译环境:一般指的是编写代码和编译代码的环境(主机的信息:x86-64,windows/x86-64,Linux-ubuntu)
        运行环境:一般指的是你运行程序的那一个主机的信息(x86-64,Linux-ubuntu/ARM/linux)
        
        在实际开发中,编译环境和运行环境一般是不相同的(产品一般是不具备写代码和编译代码的条件的,没有编辑器和编译器)

        我们只能在自己的PC上面写完代码(keil/ubuntu),编译好,再下载(烧写)到具体的产品上面运行,这个过程就是我们所说的交叉开发
            如:
                在PC机上去写一个代码,编译好,下载带51单片机上运行
                在PC机上去写一个代码,编译好,下载带ARM开发板上运行
                ....

        查资料:ARM和x86是什么?
        
        ARM开发板的程序如何编译呢?
            gcc ------>编译器(生成的可执行文件,可以放到x86上面运行)
            arm-linux-gcc ----->交叉编译器(生成的可执行文件,可以放到ARM上面运行)

            PC机(编写)--->PC机上进行交叉编译--->可执行程序--->下载到目标板上运行

1.1.交叉编译器的安装


    sudo apt-get install gcc  安装普通的编译器(前提:联网)
    sudo apt-get install arm-linux-gcc  新版本的Ubuntu可以下载,但是下载之后,可能用不了

    一般来说,交叉编译器都是芯片厂商做好的,编译好的(我们也可以自己做),直接拿过来使用就可以了

    交叉编译器的安装:


        1.把交叉编译器工具链的压缩包,放到自己Linux下面(家目录)
            cp  arm-linux-gnueabi-5.4.0.tar.xz /home/china/
            把交叉编译器复制到家目录
            cd /home/china

        2.解压到一个合适的目录
            sudo mkdir /usr/local/arm    //自己新建一个目录
            解压到指定的目录
            sudo tar -xvf arm-linux-gnueabi-5.4.0.tar.xz -C / 
            cd /usr/local/arm   里面就有你需要的编译器
        3.找到你解压之后的编译器目录
            /usr/local/arm/5.4.0/usr/bin
            这个目录里面就有常用的交叉编译器工具

            就可以使用这个工具去编译我们的可执行程序
            /usr/local/arm/5.4.0/usr/bin/arm-linux-gcc 1.c -o 1
            使用编译器的时候需要加路径?
            因为编译器所在的路径不是系统的默认路径,把这个路径加入到默认的
            路径中(环境变量PATH)
        4.修改环境编译


            把我们编译器所在的路径变成默认路径的一部分
            ====>参考shell中的环境变量

1.2.将程序下载到嵌入式开发板上面运行


1.2.1  通过串口和PC通信传输程序方式


        windows中先要安装串口线的驱动
        设备管理器中显示:
            usb2.0-ser!   表示没有安装驱动(不识别此设备)

        右击设备名称---->更新驱动程序软件--->浏览计算机以查找驱动---->找到解压之后的usb_com文件夹(包含子目录)----->下一步

        设备名称
        USB-SERIAL CH340(COMX)
        ch340表示的是设备名称
        COMx表示设备连接到计算机的哪一个端口


    使用串口软件去读写串口的数据
        secureCRT(windows)
        putty(windows)
        xshell(windows)
        minicom(linux)      
            Linux中常用的命令行串口工具
            sudo apt install minicom
            设置串口通信协议:
                sudo minicom -s 
                ....

        打开secureCRT,点击快速连接
            协议:serial         串口协议
            端口:COMX           连接到你计算机的哪一个USB口
            波特率: 115200      没秒发送的bit数
            把流控去掉
            确定,出现绿色的小√就可以了

            Ctrl+C 会出现一个虚拟终端,这个终端就是控制开发板的

        进入开发板之后,建议设置一个自己的工作文件夹(可以修改/etc/profile)
            自己的数据都放到自己的工作文件夹
            cd ~ 
            mkdir HMW 
            cd HMW 


    通过串口下载文件到开发板上面运行
        开发板没有编译器,所以我们需要先在PC上编译好,再下载到开发板上面运行
            a.串口下载文件(Xmodem/Ymodem/Zmodem)

            rx    recive  Xmodem
                在开发板上面使用xmodem协议去接收数据
                开发板已经做好了接收准备,在PC上面发送文件即可

            开发板:
                rx hello
                    开发板使用xmodem的协议接受一个名字叫做hello的文件
                CRT上发送:
                    传输--->发送xmodem--->选择你要发送的文件

            b.运行开发板上面的文件
                ./hello 
                -/bin/sh: ./hello: Permission denied
                权限不够
                ======>
                chmod +x hello


                ./hello 
                ./hello: line 1: syntax error: unexpected "("
                放到开发板上面运行的程序都需要使用arm-linux-gcc编译器编译


    1.2.2   通过U盘传输程序:


        1.给自己的U盘建立文件系统分区


            Linux中的分区命令(fdisk)
                sudo fdisk -l  列举当前系统中所有存储设备的信息   
                fdisk   /dev/sda1  
                    需要操作/dev/sda1这个设备


        2.格式化(mkfs)


            Linux系统有可能不认识你U盘的数据
            U盘中的数据有自己的文件系统(由自己的存储格式) 
            也可以把U盘格式化为指定的文件系统(把文件系统的元数据写入到分区的最前面)

        3.挂载(mount)  


            把指定的存储设备(U盘的分区文件系统),加载到操作系统的文件系统的某一个路径下面(一般都是自动挂载的,windows)
                在Linux下面,也可能会自动挂载,一般在如下的位置
                    /mnt/media
                    or 
                    /media 
                    or 
                    /mnt/udisk  <------------ 我们的开发板
                U盘的内容就出现在了这个目录下面,U盘自动挂载到/mnt/udisk

            如果没有自动挂载,可以尝试使用mount命令手动挂载
            mount  /dev/sdb1  /mnt    
                /dev/sdb1       你要挂载的分区的名称
                /mnt            你要把设备挂载带操作系统的哪一个目录下面去
                挂载成功,/dev/sdb1磁盘中的内容就会出现在/mnt目录下面

        4.卸载 


            umount  /mnt 


1.2.3通过网络方式传输:开发板有一个有线网卡,可以直接联网

    虚拟机联网:参考Linux基础的内容

    开发板连接步骤:


        a.连接网线


            可以直接用一根网线连接PC机和开发板(开发板和PC机两台机器构成了一个局域网),这样做的话,PC就不要连wifi

        b.设置网络信息(IP地址)

            主要是利于自己后序使用方便。
            如果使用局域网,可以使用命令自动获取IP地址 
                udhcpc

            可以通过命令设置IP地址(但是是临时的---关闭命令界面就会失效)

                ifconfig eth0 172.11.0.4 netmask 255.255.254.0 up 
                route add default gw 172.11.1.1

            需要开机就设置,可以使用配置文件(把上面的语句中的一种写入/etc/profile)
            或者还有一种方式:
            在开发板的 /etc/init.d目录下面建立一个简单的脚本文件
            名称必须是 Start.sh 
            系统每一次重启都会执行这个脚本
            内容为:

                #!/bin/sh

                #关闭eth0的网卡
                ifconfig eth0 down

                #设置eth0网卡的物理地址(最后两位建议不相同)
                ifconfig eth0 hw ether 08:90:00:A0:35:88    

                #设置网卡的IP和子网掩码
                ifconfig eth0 172.11.0.4 netmask 255.255.254.0 up

                #设置网关
                route add default gw 172.11.1.1

                #打开telnetd服务
                telnetd &

            注意:
                脚本必须有可执行权限
                手动运行一次脚本或者重启开发板才可以生效
                IP地址不能和Windows相同
                同一个局域网中网关和子网掩码必须相同

            如果开发板需要访问外网网址,还需要添加域名解析服务器地址
            设置DNS服务区
            vi /etc/resolv.conf  
            增加一行:
            nameserver 114.114.114.114
            开发板就可以ping通百度了
        
        经过上面的操作,你的开发板,虚拟机和windows应该处于同一个局域网
        可以相互ping通

    例如
        windows:
            地址        172.11.0.1
            子网掩码    255.255.254.0
            网关        172.11.1.1
            DNS         114.114.114.114

        Ubuntu:
            地址        172.11.0.3
            子网掩码    255.255.254.0
            网关        172.11.1.1
            DNS         114.114.114.114      

        开发板:
            地址        172.11.0.4
            子网掩码    255.255.254.0
            网关        172.11.1.1
            DNS         114.114.114.114   

c.在虚拟机中搭建一个文件传输服务器(tftp/ftp)


    目的:使用网络传输文件到开发板
        tftp是一个网络服务程序,是CS架构
            C:client        客户端 
            S:server        服务器

    
        可以在虚拟机中搭建一个tftp的服务器,在开发板上面就可以使用tftp客户端下载文件
            在虚拟机中安装:

            安装: 
            sudo apt-get install tftpd-hpa
            启动:
            sudo service tftpd-hpa start
            停止:
            sudo service tftpd-hpa stop 
            重启:
            sudo service tftpd-hpa restart

            配置tftp的配置文件:(/etc/default/tftpd-hpa )

                # /etc/default/tftpd-hpa   注释

                TFTP_USERNAME="tftp"
                TFTP_DIRECTORY="/home/china/tftpboot"
                //服务器共享到网络上面的目录(必须有可执行权限)

                TFTP_ADDRESS="0.0.0.0:69"
                TFTP_OPTIONS="-l -c -s"

            查看当前虚拟机中的tftp服务器的进程是否正常启动:

            ps -ef | grep tftp

            在同一个局域网中的其他设备(虚拟机/开发板)上就可以使用tftp从服务器上面下载文件,也可以上传文件到服务器(前提是网络正常)

            在开发板上使用tftp命令下载:
                tftp -g(get获取) -r(remote远程)  远程文件名  服务器地址
                如:
                tftp -g -r a.txt  172.11.0.3
                从172.11.0.3这个服务器(虚拟机/home/china/tftpboot)上面下载一个叫做a.txt的文件到本地(开发板)的当前目录

            在开发板上使用tftp命令上传:
                tftp -p -l  本地文件名  服务器地址 
                如:
                tftp -p -l  a.txt 172.11.0.3
                把当前目录下面的b.txt文件推送到服务器172.11.0.3的目录(/home/china/tftpboot)


            Ubuntu中也可以使用tftp服务器(本地下载与上传----不同目录下)

                tftp 172.11.0.3  进入tftp的命令行
                or 
                tftp localhost   表示本地IP地址

                下载: get b.txt 
                上传: put n.txt
                quit 退出tftp 

   ps.     计算机中如何比较两个文件是否相同(大小/内容)?
        一般使用md5sum 
        md5sum  a.txt   计算这个文件的md5值
        如果两个文件的md5值相同,那么我们认为这两个文件是相同的!!!!


    刷机:(最好不要实验)
        USB线连接到OTG(注意安装OTG的驱动)
        步骤:
            让开发板进入boot命令行(类似于BIOS)
            开机启动的时候,在5S内按任意键,进入boot命令行
            如果需要继续启动:
                输入命令boot 
            如果需要刷机:
                a.在boot命令行输入fastboot
                b.打开windows中的刷机包,刷机auto.bat  (windows中的脚步)
                等待完成即可

ps:
1.查资料了解telnetd服务怎么搭建并且搭建一个telnet服务(搭建到虚拟机)
    可以使用CRT连接虚拟机或者开发板
        安装telnetd 服务
        sudo apt-get install telnetd 
        sudo apt-get install xinetd
        sudo apt-get install telnetd-ssl
        查看telnet运行状态
        sudo netstat -a | grep telnet
        

        telnet localhost
        telnet 172.11.0.3
        输入用户名(china)和密码(123456)即可
        exit退出
        
        https://www.cnblogs.com/smartmsl/p/10878287.html

    也可以使用超级终端工具(CRT)连接
        快速连接--->协议:telnet
        主机名:IP地址
        
        
2.在ubuntu中搭建一个ftp服务器
   

//注意:Ubuntu18.04配置文件不需要修改,ftp的共享目录默认为家目录下面的ftpboot

1.虚拟机联网
    可以使用wifi,能ping通baidu即可。
    ping www.baidu.com
    
2.下载ftp服务器
    sudo apt-get install vsftpd
    
3.修改ftp服务器配置文件
    sudo vim  /etc/vsftpd.conf
    修改大概第23行,把
    anonymous_enable=NO
    修改为
    anonymous_enable=YES
    添加一句,指定共享目录(此处我修改了共享目录)
    anon_root=/home/china/ftpboot
    保存退出。
    
4.重启ftp服务
    sudo service vsftpd restart
    
5.下载至开发板
    a.把要下载的文件放入(默认情况)
       /srv/ftp 目录下面(/home/china/ftpboot)
    b.在开发板终端使用 wget 下载
        如:我要下载的文件名叫做hello
            1.把hello文件放入 /srv/ftp   (/home/china/ftpboot)
            2.wget ftp://ftp服务器IP/hello
                我的服务器IP为172.11.0.3
                wget ftp://172.11.0.3/hello


    
    
3.学习一下scp这条牛逼的命令(跨主机复制)
    只有能够ping通,就可以自由的复制文件

例如:
    scp 1.c china@172.11.0.1:/home/china/123
    把当前目录下面的1.c文件复制到IP地址为172.11.0.1上面的china用户的/home/china/123目录下面
    前提是安装ssh服务
    
4.ssh协议,搭建一个ssh服务器,可以实现远程登录
    https://blog.youkuaiyun.com/gymaisyl/article/details/86570426/
    
上面三个都是建立在网络连通的情况下。
        


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值