嵌入式开发通常使用主机-开发板的开发模式,在裸板开发中,我们通常使用串口调试工具传递文件,比如windows平台的超级终端,SecuCRT以及Linux平台的ckermit(题外话:ckermit比windows的那两个快多了)。但在OS的开发环境中,由于程序复杂,规模巨大,串口的低速和易错就不再适合我们开发了,而在这种环境下,基于网络的开发环境由于高速和准确受到了大家的青睐。

结构说明

在有OS的嵌入式系统中,SoC的启动过程有3个加载。

  1. 上电的第一个程序就是片上固化的启动代码,它负责把bootloader从Flash中加载到内存中并执行
  2. bootloader会从Flash中加载Linux内核以及设备树文件到内存,并对两者进行相关的配置。完成所有工作后跳转到内核的首地址
  3. 内核接管bootloader配置好的硬件资源,内核启动过程中非常重要的一件事就是挂载文件系统。

在开发过程中,由于bootloader通常都具有网络功能,而linux内核,设备树dts和文件系统fs都是不断迭代的,所以我们自然希望通过配置bootloader的网络功能使其直接通过服务器(开发主机)下载内核并进一步下载设备树文件(tftp),甚至直接挂接网络上的文件系统(nfs)。整个开发环境的结构框图如下:

tftp的安装和配置

tftp即tiny ftp,是一种轻型的ftp协议,ubuntu下可以使用下面这个小脚本安装并配置。

#!/bin/bash
echo "Please input tftpdir"
read tftpdir
sudo mkdir $tftpdir        #创建用于传输文件的目录
sudo chmod 0777 $tftpdir
sudo apt-get install tftp-hpa tftpd-hpa xinetd -y
#sudo vi /etc/default/tftp-hpa
sudo touch /etc/default/tftpd-hpa
sudo chmod 0777 /etc/default/tftpd-hpa
sudo echo "TFTP_USERNAME=\"tftp\"" > /etc/default/tftpd-hpa
sudo echo "TFTP_DIRECTORY=\"$tftpdir\"" >> /etc/default/tftpd-hpa   #tftpd-hpa的服务目录,这个想建立在哪里都行
sudo echo "TFTP_ADDRESS=\"0.0.0.0:69\""     >> /etc/default/tftpd-hpa   #指定开发板地址,需要和主机的ip在同一个网段
sudo echo "TFTP_OPTIONS=\"-l -c -s\""       >> /etc/default/tftpd-hpa   #-c是可以上传文件的参数,-s是指定tftpd-hpa服务目录,上面已指定

sudo service tftpd-hpa restart
echo -e '\n'

nfs的安装和配置

nfs即network filesystem,可以使客户端直接从服务器挂接文件系统,方便开发板直接访问我们的程序或文件。nfs的安装和配置脚本

#!/bin/bash
echo "nfs service"
echo "Please input nfs dir"
read nfsdir
sudo mkdir $nfsdir
sudo apt-get install nfs-kernel-server nfs-common portmap -y
#sudo vi /etc/exports
sudo touch /etc/exports
sudo chmod 0777 /etc/exports
sudo echo "$nfsdir  *(rw,sync,no_subtree_check,no_root_squash)" > /etc/exports
sudo service nfs-kernel-server restart
echo -e '\n'

export文件的属性选项

ro      只读访问
rw      读写访问
sync    所有数据在请求时写入共享
async   nfs在写入数据前可以响应请求
secure  nfs通过1024以下的安全TCP/IP端口发送
insecure    nfs通过1024以上的端口发送
wdelay      如果多个用户要写入nfs目录,则归组写入(默认)
no_wdelay   如果多个用户要写入nfs目录,则立即写入,当使用async时,无需此设置
hide        在nfs共享目录中不共享其子目录
no_hide     共享nfs目录的子目录
subtree_check   如果共享/usr/bin之类的子目录时,强制nfs检查父目录的权限(默认)
no_subtree_check    不检查父目录权限
all_squash      共享文件的UID和GID映射匿名用户anonymous,适合公用目录
no_all_squash   保留共享文件的UID和GID(默认)
root_squash     用户的所有请求映射成如anonymous用户一样的权限(默认)
no_root_squash  root用户具有根目录的完全管理访问权限
anonuid=xxx     指定nfs服务器/etc/passwd文件中匿名用户的UID
anongid=xxx     指定nfs服务器/etc/passwd文件中匿名用户的GID

安装完毕可以使用下面的命令测试一下

$sudo mount -t nfs localhost:/home/jiang/nfs /mnt/  #localhost后面接的是nfs共享目录
$ls /mnt/
1.txt       #如果能看到nfs里面的1.txt就表示挂接成功了,nfs服务器没有问题
$sudo umount /mnt/

搭建开发环境的细节很多,如有纰漏欢迎批评^-^交流

tftp-nfs开发环境搭建的更多相关文章

  1. Beaglebone Back学习三(开发环境搭建)

    开发环境搭建 1 Ubuntu环境搭建 2 Window环境搭建 3 开发板环境搭建 1 Ubuntu环境搭建 (1)安装必要的网络工具 samba nfs tftp vmware-tools sam ...

  2. 【课程分享】深入浅出嵌入式linux系统移植开发 (环境搭建、uboot的移植、嵌入式内核的配置与编译)

    深入浅出嵌入式linux系统移植开发 (环境搭建.uboot的移植.嵌入式内核的配置与编译) 亲爱的网友,我这里有套课程想和大家分享,假设对这个课程有兴趣的,能够加我的QQ2059055336和我联系 ...

  3. TI Davinci DM6446开发攻略——开发环境搭建

    TI DAVINCI DM6446的开发环境搭建不像三星S3C2410,S3C2440,ATMEL的AT91SAM9260之类的单核ARM那么简单,因为DM6446还有DSP端的开发环境,以及双核之间 ...

  4. ubuntu-10.10嵌入式开发环境搭建【转】

    本文转载自:http://blog.csdn.net/zjhsucceed_329/article/details/8036781 版权声明:本文为博主原创文章,未经博主允许不得转载. ubuntu- ...

  5. 基于全志H3芯片的ARM开发环境搭建

    基于全志H3芯片的ARM开发环境搭建 最近买了个友善之臂的NanoPi M1板子,又在网上申请了个NanoPi NEO板子,这两个都是基于全志H3芯片的Crotex-A7四核ARM开发板,两个板子可以 ...

  6. python开发环境搭建

    虽然网上有很多python开发环境搭建的文章,不过重复造轮子还是要的,记录一下过程,方便自己以后配置,也方便正在学习中的同事配置他们的环境. 1.准备好安装包 1)上python官网下载python运 ...

  7. IntelliJ IDEA安装及jsp开发环境搭建

    一.前言 现在.net国内市场不怎么好,公司整个.net组技术转型,就个人来说还是更喜欢.net,毕竟不是什么公司都像微软一样财大气粗开发出VS这样的宇宙级IDE供开发者使用,双击sln即可打开项目, ...

  8. Qt for Android开发环境搭建及测试过程记录

    最近学习了Qt的QML编程技术,感觉相较于以前的QtGUI来说更方便一些,使用QML可以将界面与业务逻辑解耦,便于开发. QML支持跨平台,包括支持Android平台,因此可以使用Qt的QML进行An ...

  9. node.js之开发环境搭建

    一.安装linux系统 (已安装linux可跳此步骤) 虚拟机推荐选择:VirtualBox 或者 Vmware (专业版永久激活码:5A02H-AU243-TZJ49-GTC7K-3C61N) 我这 ...

  10. TODO:小程序开发环境搭建

    TODO:小程序开发环境搭建 1.第一步当然是要先注册小程序了 2.登录到小程序 a)完善小程序信息,如名称,图标,描述 3.绑定开发者 4.获取AppID,并设置服务器信息 5.下载并安装开发者工具 ...

随机推荐

  1. Error connecting to database [Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (13)]

    参照 http://stackoverflow.com/questions/4448467/cant-connect-to-local-mysql-server-through-socket-var- ...

  2. ecshop 模板开发总结

    ecshop 模板开发总结 模板标签 1.{$articleTitle|escape:"html"} 描述:用于html转码,url转码,在没有转码的变量上转换单引号,十六进制转码 ...

  3. Atitit Data Matrix dm码的原理与特点

    Atitit Data Matrix dm码的原理与特点 Datamatrix原名Datacode,由美国国际资料公司(International Data Matrix, 简称ID Matrix)于 ...

  4. Atitit. 破解  拦截 绕过 网站 手机 短信 验证码  方式 v2 attilax 总结

    Atitit. 破解  拦截 绕过 网站 手机 短信 验证码  方式 v2 attilax 总结 1. 验证码的前世今生11.1. 第一代验证码 图片验证码11.2. 第二代验证码  用户操作 ,比如 ...

  5. Java环境变量-Linux环境

    环境变量说明 JAVA_HOME 它指向jdk的安装目录,Eclipse/NetBeans/Tomcat等软件就是通过搜索JAVA_HOME变量来找到并使用安装好的jdk. PATH 作用是指定命令搜 ...

  6. 批量Shink所有日志或数据文件

    近期,因磁盘空间问题,当执行常规性维护如碎片整理等后会报磁盘空间不足警告,因条件又无法及时添加磁盘空间,这时候不得不对LOG文件做收缩,如果遇到库比较多的实例上,一个一个来却是比较麻烦,可通过如下SQ ...

  7. 4.C#WinForm基础图片(显示和隐藏)

    要求: 软件上有一张图片,默认是隐藏的.用户在文本框中输入身份证号(131226198105223452),点击按钮,如果年龄大于18岁,则显示图片. 知识点: 取当前年份,Date Time Now ...

  8. IntelliJ IDEA 内存优化最佳实践

    本文作者在和同事的一次讨论中发现,对 IntelliJ IDEA 内存采用不同的设置方案,会对 IDE 的速度和响应能力产生不同的影响. Don't be a Scrooge and give you ...

  9. HTML5 网络拓扑图性能优化

    HTML5 中的 Canvas 对文本的渲染(fillText,strokeText)性能都不太好,比如设置字体(font).文本旋转(rotation),如果绘制较多的文本时,一些交互操作会手动很大 ...

  10. Quartz.net 开源job调度框架(二)----定点执行

    在上一篇  Quartz.net 开源job调度框架(一) 中讲到了基本的使用以及配置job轮训数据执行 这种做法适用于对数据操作实时性要求不高的场景,在实际场景中还有一种比较常用的场景就是我们需要在 ...