本身新手,想记录一下协和上学的长河笔记,希望有情侣能够联手学习指正。

把linux在arm开垦板上海展览中心开定制,并在arm开荒板上运营起来。
更加好地精晓linux的构架进度。

arm交叉编写翻译器的常用工具集简要介绍,七Linux内核如何装载和运营2个可实践程序。使得开拓是在系统运营起来后,在根本中追加部分驱动子功效而已。

安徽大学大 + 原创小说转发请表明出处 + 《Linux操作系统一分配析》MOOC课程

Android 从 伍.0 起始接纳新的相机 API Camera二来顶替以前的旧版本,从而帮衬越多的特征。

  多数arm芯片厂家都提供自身的交叉编写翻译器。像arm-none-linux-gnueabi-xxx之类的,在那之中arm自然不用解释就是arm公司嘛,要是厂商开源的话前面则是none,若不是的话大概会是任何的。linux是指该编译器提供linux接口调用,gnueabi意思是开源嵌入式的意思,上面就比较常用的工具集进行简易介绍一下:



在上学新的 API 调用之外,也依旧要询问一下 Android
底层产生了哪些变化,从而能够让大家对 API
的调用流程进一步的清晰,知其所以然。

  arm-none-linux-gnueabi-readelf(以下就直接简写xxx的内容):不管是在windows下或然linux下各种文件都有协和的头,在linux下定义了目标文件之中国国投息如何结合和集体的文件格式。内核会遵照这么些消息加载可实施文件,内核依据那么些音信方可领略从文件哪个地方获得代码,从什么地方得到初叶化数据,在何地应该加载共享库,等音信。 

一、概述

知识要点

由 上层应用 到 底层驱动 的 调用流程

当我们展开相机应用时,会张开录像头,通过油画头来搜聚数据,并将数据表现在Android 软件分界面上。

那类似轻巧的一个流程,实际上就带有了从我们上层软件到底层硬件驱动的壹类别调用流程。

大致的敞亮能够依据如下的流水生产线:

澳门金沙国际 1

调用流程

图片来源于于 老罗的 Android
之旅
中关于
硬件抽象层(HAL)概要介绍和学习安插。

大家的调用流程:

应用程序框架层 –> 运营时库 –> 硬件抽象层 –> 硬件驱动层 。

至于硬件抽象层 HAL 是什么?

HAL
是对硬件器物的充饥画饼和包裹,它定义了三个标准接口以供硬件供应商达成,那可让
Android 忽略非常低档别的驱动程序落成,为 Android
在差异硬件装置上提供统1的拜访接口。

简短说来正是,大家决定硬件配备时,调用的是硬件抽象层,由硬件抽象层去调用驱动程序操控硬件装备。就好比在此以前学过的
OpenGL 同样,
它也是壹套接口标准,具体的落到实处交给商家去做到了,我们只是调用接口方法。

HAL 是以动态链接库的款型提供的。

诸如此类的补益在于把 HAL
的切实落到实处交给硬件厂商去做到,同时由于开源研究的由来,硬件厂家的 HAL
达成部分并非开源出来,把厂商的主旨内容,如算法等足以隐藏起来。

小结一下老罗写的 HAL 类别小说会对 HAL 有1个越来越深的认知:

  • 在 Android
    内核源代码工程中编辑硬件驱动程序

在就学这篇博客此前,依然得有一些预备知识,不然便是一只雾水。

首先要精晓,在 Linux
中有着设施都以以文件的方式存在的,不管是惯常文书也许硬件配备。

了解 Linux 的驱动

Linux 内核中行使可加载的模块化设计(LKMs,Loadable Kernel Modules)。

貌似景色下编译的 Linux
内核是永葆可插入式模块的,也正是将最焦点的宗旨代码编写翻译在基本中,其余的代码能够选取是在基础中,也许编写翻译为水源的模块文件。

在基础的配置进度中,有多数配备驱动程序和别的内核成分都被编写翻译成了模块。

大家广大的驱动程序就是用作内核模块动态加载的,举例声卡驱动和网卡驱动等,而
Linux 最基础的驱动,如 CPU、PCI 总线 等驱动程序则编写翻译在基本文件中。

比如五个驱动程序被直接编写翻译到了基石中,那么即便那几个驱动程序未有运转,它的代码和静态数据也会攻下壹部分空间。

但1旦这些驱动程序被编写翻译成贰个模块,就唯有在急需内存并将其加载到根本时才会真的占领内部存款和储蓄器空间。

对于 LKM 来讲,能够依附硬件和三番五次的设施来加载对应的模块。

模块

模块是在基本空间运营的先后,实际上是一种目的对象文件(.o
文件)未有链接,不能够独立运行,可是能够装载到系统中作为根本的一片段运营,从而得以扩大内核的成效,模块最要害的用处正是用来兑现设备驱动程序。

Linux 下对于2个硬件的驱动,能够有二种艺术:

  • 直接加载到基本代码中,运维水源时就会使得此硬件程序
  • 以模块的措施运行,编写翻译生成2个 .o
    文件,当应用程序须要时再加载到基本空间运营。

因而咱们所说的3个硬件的驱动程序,平常指的正是一个驱动模块。

配备文件

Linux 中的设备文件分为二种:

  • Block(块)型道具文件
  • Character(字符)型设备文件
  • Socket(互联网)型道具文件

对此二个设施,它能够在 /dev
上面存在一个一见钟情的逻辑设备节点,那些节点以文件的款型存在,但它不是平日意义上的文书,它是设备文件,更确切的说,它是设备节点。这么些节点是由此mknod 命令建立的,在那之中指定了主设备号和次设备号。

  • 主设备号注解了某一类设备,一般对应着分明的驱动程序,用于基础把公文和它的驱动链接在一起。

  • 次设备号一般是分别差别属性,比如差别的利用方法,分裂的岗位,差异的操作。

其一装置号是从 /proc/devices
文件中得到的,所以一般是先有驱动程序在基本中,才有设施节点在目录中。那几个装置号(特指主设备号)的第一职能,就是声称设备所运用的驱动程序。驱动程序和道具号是各类对应的,当你展开四个配备文件时,操作系统就已经清楚那几个装置所对应的驱动程序

proc 文件系统

1种用户程序和基础通讯最简便易行和流行的格局是因此采纳 /proc
下文件系统举办广播发表。

/proc
是二个伪文件系统,从那里的文件读取的数量是由基础重临的数量,并且写入到那在这之中的数目将会被基本读取和管理。

使用 /proc
目录中的文件监视驱动程序的景色。访问设备文件时,操作系统日常会由此查找
/proc/devices
目录下的值,也等于依据主设备号,明确由什么驱动模块来成功职务。如若
proc 文件系统未有加载,访问设备文件就会油不过生错误。

计算一下方面包车型大巴大摞文字:

澳门金沙国际 2

先是,内核加载大家的驱动程序,会扭转对应的模块和主设备号。

附带,插入设备文件时,会依赖文件类型分配叁个东施效颦的主设备号,标志用哪类驱动展开。

终极,展开设备文件,实质上正是经过驱动程序来开垦设备文件,在
/proc/devices 中找到驱动。

有了上面包车型客车知识储备,再来精晓看罗永浩的博客,就清楚一些了。

锤子科学技术开创者罗永浩是把驱动编写翻译成了内核模块,动态加载,并且在模块加载函数内部去实行了装备注册和初叶化操作,重要有四个函数
device_createhello_create_proc

那样壹来,在模块加载时,就创办了对应配备文件,打开设备文件时,也会去加载对应的驱动。

并且,还足以对设施文件执行相应的操作了,读和写变量的值,这么些操作都是付出了驱动程序去做到读写的。

对于驱动程序,就先掌握到那里了,有时光再去商量。

  • 在Ubuntu上为Android系统内置C可推行程序测试Linux内核驱动程序

那篇作品的主要性操作便是通过 C 程序的可实施文件来读写设备文件中的值。

只要实践成功了,则象征 C
可实施程序通过走访驱动程序来拜会硬件寄存器的值了。

  • 在Ubuntu上为Android扩展硬件抽象层(HAL)模块访问Linux内核驱动程序

在此间就涉及到根本 硬件抽象层 HAL 了,通过配备文件来一而再硬件抽象层和
Linux 内核驱动模块。

硬件抽象层有五个至关心注重要的数据结构:硬件模块结构体 hw_module_t
硬件接口结构体 hw_device_t

Android HAL 将每一种硬件道具抽象为硬件模块,使用 hw_module_t
来描述那一模块,各类硬件抽象模块都对应1个动态链接库,这一般是由商家提供的。

而每1类硬件抽象模块又带有四个单身的硬件配备,使用 hw_device_t
结构体描述硬件模块中的独立硬件设备。

HAL 规定每一个硬件模块必须含有1个 HAL_MODULE_INFO_SYM
的结构体,那一个结构体的第1个成分必须为
hw_module_t,然后后面能够追加模块相关的任何消息。当中,tag属性也必须为
HARDWARE_MODULE_TAG 常量。

对应罗永浩博客中的:

/*硬件模块结构体*/  
struct hello_module_t {  
    struct hw_module_t common;  
};  

HAL 规定每一个硬件设备都必须定义1个硬件设备描述结构体,该结构体必须以
hw_device_t 作为第二个分子变量,后跟设备相关的明白函数和总体性。

对应罗永浩博客中的:

/*硬件接口结构体*/  
struct hello_device_t {  
    struct hw_device_t common;  
    int fd;  
    int (*set_val)(struct hello_device_t* dev, int val);  
    int (*get_val)(struct hello_device_t* dev, int* val);  
};  

此处关于硬件模块和硬件设备有点绕,大致正是壹类硬件模块包罗众多硬件装置,多个硬件配备属于某一类硬件模块。

Android 对于硬件抽象层有局地规定,那里就不去深远了,包涵 HAL
命名标准、怎么样加载 HAL 等等。

除了,还须求在 HAL
中定义一些亟待的法子函数来奉行操作。这几个点子函数就象是于接口,能够供外部调用,而温馨要落成在那之中间贯彻。

在锤子科技(science and technology)开创者罗永浩的博客中定义了之类的措施:

  • hello_device_open 展开设备
  • hello_device_close 关闭设备
  • hello_set_val 写入值
  • hello_get_val 读取值

其中,hello_device_open 函数中有贰个 open
方法正是在实践打开文件操作,约等于开荒 /dev/hello
设备文件,那就和地方用 C 程序验证测试 Linux 内核程序同样了。

而 hello_set_val 和 hello_get_val
函数正是设备的拜会函数,对应于硬件接口结构体中的 *set_val
*get_val 函数指针。它们的读写也是因而 hello_device_open
函数张开设备之后来试行的。

末尾将硬件抽象层编写翻译成模块,也便是一个 so 动态链接库。

那样就马到成功了一个粗略的硬件抽象层,对外有提供函数举行艺术调用,对内则和硬件驱动打交道。

接下去正是在应用层通过 JNI
方法来调用硬件抽象层的接口函数,使得上层应用访问硬件装置。

  • 在Ubuntu为Android硬件抽象层(HAL)模块编写JNI方法提供Java访问硬件服务接口
  • 在Ubuntu上为Android系统的Application
    Frameworks层扩大硬件访问服务
  • 在Ubuntu上为Android系统内置Java应用程序测试Application
    Frameworks层的硬件服务

因而 JNI 方法来走访硬件抽象层,首先要去通过 Android 硬件抽象层提供的
hw_get_module 方法来加载模块 ID 为钦命的 HELLO_HARDWARE_MODULE_ID
的硬件抽象层,Android 硬件抽象层会基于 ID
值在系统中找到相应的模块,然后加载起来,并重回 hw_module_t
接口给调用者使用,通过 hw_module_tcommon 变量的 methods
方法最终收获了 hello_device_t 硬件接口结构体。

有了 hello_device_t 那个变量就足以执行在此之前定义的相关读写操作了。

有了 JNI
方法之后,还索要提供三个独门的硬件访问服务来为运用提供劳务。应用要求通过
Binder 代理来拜访硬件服务。由于是跨进度通讯,仍旧要求 AIDL
来定义接口了。

在独立进度的硬件访问服务中,照旧要由此下面的 JNI 方法来拜会硬件配备。

末尾,大家在采纳进度之中 BindService就能够跨进程通讯了,读写硬件配备中的值。

这么就得以落成了从应用程序到底层硬件的全体流程的调用。

复习一下总体育工作艺流程:

澳门金沙国际 3

调用流程

有了罗永浩的剖析,对于相机的上层软件到底层硬件的调用流程就简单分析了。

更复杂具体的流程能够参照如下流程:

澳门金沙国际 4

相机调用流程

  -objcopy:在arm中运作可实行程序时,只认得机器码,所以当大家在运作裸板程序时,由于并未有跑操作系统,供给将附加消息从代码中脱离出去。去掉elf头,只剩下代码段、数据段等等。

一、arm裸机程序系统结构图

AGL450M裸机程序系统结构图

硬件层:硬件程序猿决定硬件放在哪个财富。如,是在GPA口,GPH口,照旧GPG口。

驱动层:驱动程序员依据硬件的架构,把驱动的能源用代码去指向,比方C语言的指针去指向相应的财富;硬件须求什么样的高/低电平或结成的多寡,让其行事,是由驱动层封装的。

应用层:依据传递的例外的值,来获得差异的结果。

该架构存在的标题:
耦合性太强,一旦一层爆发退换, 其他层都会变。

一 可推行程序是怎么得来的

对于c代码来说,先是透过编写翻译器的预管理,然后编译成汇编代码。再由汇编器把汇编代码编写翻译成目的代码,然后再连接成可施行文件。可试行文件由操作系统加载到内部存款和储蓄器里实施。

shiyanlou:~/ $ cd Code                                                
shiyanlou:Code/ $ vi hello.c                                          
shiyanlou:Code/ $ gcc -E -o hello.cpp hello.c -m32  #对c程序预处理,hello.cpp是预处理的中间文件                  
shiyanlou:Code/ $ vi hello.cpp                                        
shiyanlou:Code/ $ gcc -x cpp-output -S -o hello.s hello.cpp -m32 #编译成汇编代码     
shiyanlou:Code/ $ vi hello.s                                          
shiyanlou:Code/ $ gcc -x assembler -c hello.s -o hello.o -m32 #编译成目标代码        
shiyanlou:Code/ $ vi hello.o #二进制文件,当中已经有一些机器指令                                         
shiyanlou:Code/ $ gcc -o hello hello.o -m32  #连接成可执行程序                          
shiyanlou:Code/ $ vi hello  #hello.o和hello 都是ELF格式的文件                                          
shiyanlou:Code/ $ gcc -o hello.static hello.o -m32 -static  #把所有依赖的内容都放在了程序的内部 
shiyanlou:Code/ $ ls -l                                               
-rwxrwxr-x 1 shiyanlou shiyanlou   7292  3\u6708 23 09:39 hello
-rw-rw-r-- 1 shiyanlou shiyanlou     64  3\u6708 23 09:30 hello.c
-rw-rw-r-- 1 shiyanlou shiyanlou  17302  3\u6708 23 09:35 hello.cpp
-rw-rw-r-- 1 shiyanlou shiyanlou   1020  3\u6708 23 09:38 hello.o
-rw-rw-r-- 1 shiyanlou shiyanlou    470  3\u6708 23 09:35 hello.s
-rwxrwxr-x 1 shiyanlou shiyanlou 733254  3\u6708 23 09:41 hello.static #比hello大很多

参考

1、http://www.jianshu.com/p/0d155f267589
澳门金沙国际,2、https://www.ibm.com/developerworks/cn/linux/l-proc.html
3、https://www.ibm.com/developerworks/cn/linux/l-usb/index1.html
4、http://www.jinbuguo.com/kernel/device\_files.html
5、https://coolshell.cn/articles/566.html
6、http://read.pudn.com/downloads119/ebook/506573/Linuxdevicedriver.pdf
7、https://www.ibm.com/developerworks/cn/linux/l-cn-sysfs/index.html

  -size:读取可施行程序的高低。

2、类android等复杂功效体系结构图

为了解决上述难点,引进三个定义:OS;引入壹层:kernel层。

能够让应用层工程师解放出来,不用关怀底层。
还要,也能够举办能源管理、多进度102线程管理等。

类android等复杂作用种类结构图

使得决定硬件专门的学问。

使得与基础:驱动把扶助的装置向基础报告,内核依照传来的新闻,会调用区别的驱动程序,来调整相应的硬件。

它们能够感觉是多少个完全,都属于底层软件的限定。

二 目的文件的格式,

.o文件和可试行文件都以目的文件。

澳门金沙国际 5

ELF(Executable and Linkable
Format)可实行与可链接格式,是一个文件格式的正统。在对象文件之中已经是2进制包容的格式,即那个目的文件已经适应到某种CPU连串布局上的二进制指令(ABI)。

  -objdump:反汇编,在调解代码时会很有用。

叁、android系统框架图

android系统框架图

hal层的进入,使得Libraries层和kernel层又隔断开了

通过分支,能够兑现软件复用性、可移植性。而且差异模块解耦。

不是分层越多更加多,分层更加多,速度也越慢。


叁 在ELF当中有三种首要的靶子文件
  • 二个可重一向(relocatable)文件(主若是.o文件)保存着代码和适当的数码,用来和别的的object文件一同来创建四个可试行文件也许是一个共享文件。
  • 一个可施行(executable)文件保留着一个用来施行的先后;该公文建议了
    exec(BA_OS)如何来创设程序进度印象。
  • 二个共享object文件(首要是.so文件)保存着代码和合适的数目,用来被上面包车型客车多少个连接器链接。第两个是接连编辑器(静态链接)[参看ld(SD_CMD)],能够和任何的重定位和共享object文件来创制其余的object。第3个是动态链接器,联合八个可实施文件和其余的共享object文件来创设多个进度映象。

  -strings:可以查阅文件中有如何字符串能够用。

2、系统移植学习内容

四 目的文件的格式ELF

Object文件参预程序的联网(创建二个程序)和次序的实践(运维3个顺序)。
object 文件格式提供了一个有利实用的格局并行的思想对待文件的始末,
在她们的移动中,反映出不相同的内需。

 Linking 视角                       Execution 视角
  ============                      ==============
  ELF header                        ELF header
  Program header table (optional)   Program header table
  Section 1                         Segment 1
  ...                               Segment 2
  Section n                         ...
  Section header table              Section header table (optional)

3个ELF头在文书的起先,保存了门道图(road
map),描述了该文件的团组织情状。程序头表(program header
table)告诉系统怎样来创设二个历程的内部存款和储蓄器映象。section头表(section header
table)包蕴了描述文件sections的新闻。每一个section在那么些表中有一个输入;每一个入口给出了该section的名字,大小,等等新闻。

澳门金沙国际 6

Entry point address是程序的起源
可推行文件的格式和进程的地点空间有1个炫丽关系,
可实行程序加载的第二办事。

当创造或扩张三个经过影像的时候,系统在理论大校拷贝多少个文书的段到3个虚构的内部存款和储蓄器段

+ Figure 2-5: Executable File

           File Offset   File                  Virtual Address
           ===========   ====                  ===============
                     0   ELF header
  Program header table
                         Other information
                 0x100   Text segment          0x8048100
                         ...
                         0x2be00 bytes         0x8073eff
               0x2bf00   Data segment          0x8074f00
                         ...
                         0x4e00 bytes          0x8079cff
               0x30d00   Other information
                         ...

参考:ELF文件格式(粤语)
英文

  -um:能够赢得符号列表(我自个儿以后还不知情那几个具体在写代码时有啥用 ̄□ ̄||)

1、交叉编写翻译情形

搭建立外交关系叉开辟碰到

伍 静态链接的ELF可实施文件与经过的地点空间

澳门金沙国际 7

Entry point address 是可执行文件加载到内存中初露实行的首先行代码
一般静态链接会将全部代码放在四个代码段
动态链接的进程会有多少个代码段

  -strip:剔除符号表。

二、bootloader成效子系统

bootloader的选项和移植

系统1上电会运营2个顺序:bootloader(运行加载),目标是load kernel。

能够做很二种方案的选拔。
众多大型项目中,更加多是选项适合项目的开行加载代码,然后再修改(移植)。
成千上万时候,买芯片的时候,芯片厂家就已经提供好了。

六装载可实施程序此前的行事

命令行参数和意况变量是什么样保存和传递的
调用execve系统调用时,要加载的可施行程序,把本来的历程碰着覆盖掉,覆盖掉之后,用户态仓库被清空。
命令行参数和情况变量是怎么样进入新进度的库房的
创立一个新的用户态商旅时,把命令行参数的内容和蒙受变量的内容,通过指针的艺术传送到系统调用的基业管理函数。内核管理函数在创建3个新的可实行程序的用户态仓库时,会把argv和envp拷贝到用户态仓库里,来初步化新的可实践程序试行的上下文意况。
先函数调用参数字传送递,再系统调用参数字传送递。

叁、内核主旨子系统

kernel的配备、编写翻译、移植和调节和测试

7

动态链接分为可实践程序装载时动态链接和平运动转时动态链接
linux下动态链接文件.so,windows是dll


4、文件系统子系统

根文件系统的营造

给用户用,还得提供文件系统。

那多个正是一连串统移植的精湛。


装载可施行程序从前的行事

总结
把ELF可推行文件加载到内部存款和储蓄器中,通过ELF底部的音信,找到程序的输入推行。

3、学习思路和措施

先全体后有的,层层递进。

种种子系统是什么编写翻译的 —> 在基本功用下,如何增多命令或效益 —>
怎么样自定义自个儿的开采板,与温馨的开荒板具体硬件相交流

每种子系统都享有三个错综复杂的等级次序关系。
所以要先掌握完全,需求首先通晓相关子系统的藏宝图,有了那些地图,去切磋它就有了连串化。


四、系统移植的主导步骤

获得壹块板子,怎样让总体种类跑起来吧?

一、分明目的机(开垦板,客户端)和主机(PC,开拓机器,服务端)的连接格局

主机品质会比目的机好太多,因而一般在主机开采,把主机编写翻译好的剧情数据传输给目标机。

数量就是高低电平。

传输情势:

(一)UART异步串行通讯接口 (串口)
它是非凡优异的与PC机通讯的接口。

优点:

  • 职能很庞大,既能够输入,也得以输出,相比万能。
  • 实用性强(9/10的板子都帮衬)

症结:速度非常低,效用相比较差。
大文件一般不用串口传输,小文件能够。

(贰)USB串行通讯接口
近日曾经进化到USB 三.0

优点:速度快
缺点:USB的驱动要移植修改。
板子刚刚上电,就让串口专门的学业,是不具体的。

(三)TCP/IP互连网通讯接口
优点:速度快(10/100Mbps)
缺陷:驱动要求移植

TCP/IP已经很成熟了。开采板与PC能够以C/S方式打开数量的传导和下载。比较通用。而且网卡的速率也正如快,最少十M,十0M网卡也好些个。

通过网络接口去下载数据的情形多多。

(四)Debug Jtag调节和测试接口
方便快速,但价格异常高,很少使用。

二、安装交叉编写翻译器

PC的cpu架构是X八陆,X八陆程序和arm程序不相称,由此需求交叉编写翻译器。

2种方法:

(壹)安装芯片商家已经编写翻译好的工具链

一般有如下前缀名:

arm-none-linux-gnueabi-
简称:arm-linux-
(把arm-linux-软链接为上述前缀名)

arm-none-eabi-
以此不帮助操作系统。

arm-elf-
那么些那个老了。很少见到了。

第二列:目的种类布局
gcc:默许编译x八6
有arm,就会编写翻译arm

第二列:商家名。开源的话,一般是none

其三列:该编写翻译器默许编译出来的效劳是针对linux操作系统去用的。
本条编写翻译器内部有些专门的工作C库,是与linux系统相关的。
在windows下运作不了。

第四列:
gnu:开源
eabi:嵌入式的规范调用接口。针对嵌入式精简的相关库。

(二)本身入手工编织译交叉工具链
《The GNU Toolchain for AHummerH二M Target HOWTO》那本书会介绍。

电动出手工编织译卓殊耗费时间,而且会报繁多不相配的主题材料。调节和测试须求功力,对编写翻译原理要精晓的很明亮。繁多集团都不会去做。不建议使用该方法。

思路其实正如单一,唯一的不得了是本子间的依赖性关系异常的大。

叁、搭建主机-目的机数据传输通道

诸如用网络,则必要互联网有关服务器的配备。

相似嵌入式中,用的可比多的服务:

  • TFTP :基于UDP协议传输的,是FTP的简版。UDP比FTP轻巧。
  • NFS:网络文件系统。目标是linux与linux之间挂载用的。
    文件系统的调剂,好些个时候用NFS作为调理的工具。

四、编写翻译3大子系统:

bootloader功能子系统
水源宗旨子系统
文本系统子系统

该步骤难度最大。

伍、烧写测试

任何举办集成,然后嵌入工厂开始展览集成化生产就足以了。


伍、意况搭建需要分析

急需分析:
长机中的数据 如何传递 到开垦板?

目标1:普通数据的传递:比如,uboot,kernel。
驷不及舌目的就是为着传递。
UART很少使用,愈多选拔的是互联网接口。最根本的行使格局是TFTP服务。

TFTP重要传输的是kernel的文书。
uboot会通过任何方法烧写(当然网络接口也足以传输。看支出境遇来调控。)

目的2:调试:主机的1块内部存款和储蓄器空间,直接挂载在板子上。

在x八陆上调好,再放到板子上。
只是,有不小可能率调节和测试不是很顺畅,因而须求开垦板与PC间建立更合理、方便的消除方案。

不可能在板子上一向调节和测试,就是因为板子体积太小。
要想方法扩展板子空间,可是flash太贵。

板子能够外挂不小空间的存款和储蓄器,比如U盘。
可是U盘很麻烦,插开荒板上,完了还得拔下来插PC上。

思路:调和时,不自然非要举办网络传输。只需求把数据挂到板子上就足以了。

办法:透过网线把共享的数据块(当作USB),通过TCP/IP来传。
共享的数据库就在PC上。

调治起来更为惠及,PC上的修改板子上就能够平素看出了,不要求举行越多的数码传输了。

调解内核驱动、应用程序,繁多时候是借助那种艺术,在PC上海展览中心开软件开拓,然后径直在板子上拓展认证。


陆、台式机移植意况搭建

串口:连接情势有利,驱动轻松。
少数据量的事物,会用串口。
正规输入/输出,会一定到串口驱动上。

台式机都以USB接口,而开拓板要用串口,由此要买USB转串口

何以排查目的机与主机的各层是还是不是通了?

  • 应用层:调节和测试程序
  • 传输层:首倘使端口port未有开放。要不就是服务器开放端口不对或未开放端口,只怕客户端访问的端口不对。
  • 互连网层:通过ping看看在不在一个局域网段。
  • 物理层:查看插上的网卡灯有未有亮。

相关文章