嵌入式交叉编译环境搭建

ubuntu和开发板通信

Posted by 咖啡泡泡茶 on June 2, 2018

嵌入式交叉编译环境环境搭建

  • 准备工具安装目录 可以去官网下载对应系统版本的arm-Linux-gcc。将压缩包arm-linux-gcc-4.4.3.tar.gz存放在一个目录下。
  • .tar.gz 和.tgz 解压:tar zxvf FileName.tar.gz 压缩:tar zcvf FileName.tar.gz DirName
  • 配置系统环境变量(可以系统自动识别不需要每次都完整输入,可以自动补全) 可以在系统目录下添加,也可以在当前用户下添加(仅仅对当前目录有效) /etc/bash.bashrc 或者 ~/.bashrc 下添加export PATH=$PATH:/home/aldrich/arm/arm-linux-gcc-4.3.2/bin
  • 使环境变量生效 使用命令:source XXX/.bashrc 使环境变量生效(xxx绝对路径)
  • 检查环境变量是否设置成功 在终端上输入命令 arm-linux 再按Tab键,如果能自动补全,说明环境变量设置成功了
  • 安装32位库兼容包 输入命令后,出现下面的错误提示信息:说是出现这种问题的原因是由于Ubuntu16.04用的是64位的,按以前的解决方法就是使用命令: sudo apt-get install ia32-libs 装一些32位的库 出现上述界面是因为Ubuntu16.04版本已不支持ia32-libs的软件包,而是使用了lib32ncurses5、lib32z1软件包做为替代,所以在Ubuntu16.04版本当中应该安装执行: sudo apt-get install lib32ncurses5 lib32z1

虚拟机网络模式解析

​ 在VMware中,虚拟机的网络连接主要是由VMware创建的虚拟交换机(也叫做虚拟网络)负责实现的,VMware可以根据需要创建多个虚拟网络。在Windows系统的主机上,VMware最多可以创建20个虚拟网络,每个虚拟网络可以连接任意数量的虚拟机网络设备;在Linux系统的主机上,VMware最多可以创建255个虚拟网络,但每个虚拟网络仅能连接32个虚拟机网络设备。

​ VMware的虚拟网络都是以”VMnet+数字”的形式来命名的,例如 VMnet0、VMnet1、VMnet2……以此类推(在Linux系统的主机上,虚拟网络的名称均采用小写形式,例如 vmnet0 )。

​ 当我们安装VMware时,VMware会自动为3种网络连接模式各自创建1个虚拟机网络:VMnet0(桥接模式)、VMnet8(NAT模式)、VMnet1(仅主机模式)。此外,我们也可以根据需要自行创建更多的虚拟网络。

桥接模式

​ VMware桥接模式,也就是将虚拟机的虚拟网络适配器与主机的物理网络适配器进行交接,虚拟机中的虚拟网络适配器可通过主机中的物理网络适配器直接访问到外部网络(例如图中所示的局域网和Internet,下同)。简而言之,这就好像在上图所示的局域网中添加了一台新的、独立的计算机一样。因此,虚拟机也会占用局域网中的一个IP地址,并且可以和其他终端进行相互访问。桥接模式网络连接支持有线和无线主机网络适配器。如果你想把虚拟机当做一台完全独立的计算机看待,并且允许它和其他终端一样的进行网络通信,那么桥接模式通常是虚拟机访问网络的最简单途径。

NAT模式

​ NAT,是Network Address Translation的缩写,意即网络地址转换。NAT模式也是VMware创建虚拟机的默认网络连接模式。使用NAT模式网络连接时,VMware会在主机上建立单独的专用网络,用以在主机和虚拟机之间相互通信。虚拟机向外部网络发送的请求数据”包裹”,都会交由NAT网络适配器加上”特殊标记”并以主机的名义转发出去,外部网络返回的响应数据”包裹”,也是先由主机接收,然后交由NAT网络适配器根据”特殊标记”进行识别并转发给对应的虚拟机,因此,虚拟机在外部网络中不必具有自己的IP地址。从外部网络来看,虚拟机和主机在共享一个IP地址,默认情况下,外部网络终端也无法访问到虚拟机。

​ 此外,在一台主机上只允许有一个NAT模式的虚拟网络。因此,同一台主机上的多个采用NAT模式网络连接的虚拟机也是可以相互访问的。 ​ 前面我们已经提到,默认情况下,外部网络无法访问到虚拟机,不过我们也可以通过手动修改NAT设置实现端口转发功能,将外部网络发送到主机指定端口的数据转发到指定的虚拟机上。比如,我们在虚拟机的80端口上”建立”了一个站点,只要我们设置端口转发,将主机88端口上的数据转发给虚拟机的80端口,就可以让外部网络通过主机的88端口访问到虚拟机80端口上的站点。

仅主机模式

​ 仅主机模式,是一种比NAT模式更加封闭的的网络连接模式,它将创建完全包含在主机中的专用网络。仅主机模式的虚拟网络适配器仅对主机可见,并在虚拟机和主机系统之间提供网络连接。相对于NAT模式而言,仅主机模式不具备NAT功能,因此在默认情况下,使用仅主机模式网络连接的虚拟机无法连接到Internet(在主机上安装合适的路由或代理软件,或者在Windows系统的主机上使用Internet连接共享功能,仍然可以让虚拟机连接到Internet或其他网络)。

​ 在同一台主机上可以创建多个仅主机模式的虚拟网络,如果多个虚拟机处于同一个仅主机模式网络中,那么它们之间是可以相互通信的;如果它们处于不同的仅主机模式网络,则默认情况下无法进行相互通信(可通过在它们之间设置路由器来实现相互通信)。

Ubuntu 16.04中安装tftp

  1. 安装 $ apt-get install tftp-hpa tftpd-hpa

  2. 建立目录 $ mkdir /tftpboot # 这是建立tftp传输目录。 $ sudo chmod 0777 /tftpboot $ sudo touch test.txt # test.txt文件最好输入内容以便区分

  3. 配置
    vi /etc/default/tftpd-hpa
    TFTP_USERNAME="tftp"
    TFTP_DIRECTORY="/tftpboot" # 这里是你的tftpd-hpa的服务目录,这个想建立在哪里都行
    TFTP_ADDRESS="0.0.0.0:69"
    TFTP_OPTIONS="-l -c -s" # 这里是选项,-c是可以上传文件的参数,-s是指定tftpd-hpa服务目录,上面已经指定
    
  4. 重启服务 $ sudo service tftpd-hpa restart # 启动服务,这里要注意,采用的独立服务形式。

  5. 测试
    cd /home
    tftp localhost  #localhost 表示本机
    tftp>get test.txt  //test.txt 是之前在 /tftpboot 目录下新建的文件
    tftp>put test1.txt //test1.txt 是在 /home 目录下新建的文件
    tftp>q
    

​ 退出后,在/home目录下会有一个test.txt文件,在/tftpboot 目录下有test1.txt,表示tftp服务器安装成功!

ubuntu16.04 安装nfs server

ubuntu16.04 默认是不包含nfs 服务的,以下是常用的安装步骤:

(1) sudo apt-get install nfs-kernel-server
(2) 修改配置文件 /etc/exports, 在文件末尾添加准备共享的目录

如:/nfs/rootfs  *(rw,sync,no_root_squash)
*:允许所有的网段访问,也可以使用具体的IP
rw:挂接此目录的客户端对该共享目录具有读写权限
sync:资料同步写入内存和硬盘
no_root_squash:root用户具有对根目录的完全管理访问权限。
no_subtree_check:不检查父目录的权限。
详细的配置参数可以查看 man 5 exports

(3)配置完毕后,重启nfs服务 sudo service nfs-kernel-server restart

(4) 测试nfs服务是否安装成功 sudo mount -t nfs localhost:/nfs/rootfs/(配置的目录) /mnt/(同步的目录) ls /mnt/ 如果其中的内容和/nfs/rootfs中一致。 表示有挂载成功 $ sudo umount /mnt 关闭服务

Ubuntu和windows上网的一个问题

​ 在Windows上网中,虚拟机也需要上网这时候就需要将虚拟机的网卡桥接到主机上,一般来说都是用有线网卡来上网的,在虚拟机中默认的是自动配置网卡,(这和之后开发板能不能ping通很有关系),对于之后开发板和虚拟机通信,则是需要用到有线连接,但是电脑一般就一个网孔所以,利用只能利用电脑的无线网卡来上网,但是如果要Ping 通开发板和虚拟机 ,则是需要将虚拟机中网络网卡设置 设置为PICE有线网卡来启动,(此时虚拟机应该上不了网)因为电脑没有用有线来链接网络。

通过ubuntu中ifconfig命令来查看网络参数

​ windows: 无线网卡;ubuntu 设置有线网卡(此时上不了网,如果要上网则是将网络桥接改成WiFi)开发板和主机电脑利用网线相链接。 ​ 同一时间(二选一): ​ 1-板子能ping通Ubuntu ​ 2-如果Ubuntu需要上网,桥接到无线网卡上(保证网段和windows),或者桥接到外网有线上 通过TFTP来加载Linux内核 和设备树 : ​ uImage === 内核 | 设备树=== exynos4412-fs4412.dtb exynos4412-origen.dtb ​ uImage、设备树文件都可以通过tftp从Ubuntu所在的tftp服务器端来加载。 在启动TFTP和NFS 服务中一定要注意更改服务文件的权限。chmod 777 XXX(文件目录)

板子启动加载内核的时候经常遇到TTTTTTT…..

​ 判断:网络不通

  • ping不通,网络配置有关 (虚拟机和开发板要在同一个网段当中,启动uboot后来设置环境变量)
  • tftp服务器没有启动 通过NFS来挂载根文件系统:rootfs.tar.gz .(放入NFS目录后解压) tar xvf rootfs.tar.gz 得到 rootfs这个文件夹 ,在开发板加载完Linux内核后 则会通过NFS服务来挂载根文件系统,之后再开发板环境中通过串口就能直接操作开发板的Linux环境了。