7Linux内核怎么着装载和运营一个可施行程序,硬件抽象层调用流程分析

By admin in 美高梅手机版4858 on 2019年4月21日

  自身菜鸟,想记录一下投机学习的经过笔记,希望有意中人能够联手上学指正。

把linux在arm开采板上开始展览定制,并在arm开辟板上运维起来。
越来越好地通晓linux的构架进度。

使得开拓是在系统运作起来后,在基础中扩大部分驱动子成效而已。

安徽大学大 + 原创文章转发请评释出处 + 《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 软件分界面上。

那好像轻便的多少个流程,实际上就含有了从大家上层软件到底层硬件驱动的一连串调用流程。

简轻易单的精通可以遵循如下的流程:

美高梅手机版4858 1

调用流程

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

笔者们的调用流程:

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

关于硬件抽象层 HAL 是何等?

HAL
是对硬件配备的肤浅和包装,它定义了多少个规范接口以供硬件供应商已毕,那可让
Android 忽略好低端别的驱动程序完成,为 Android
在差异硬件设备上提供联合的拜访接口。

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

HAL 是以动态链接库的花样提供的。

这么的功利在于把 HAL
的有血有肉得以完结交给硬件厂家去实现,同时鉴于开源协议的案由,硬件厂家的 HAL
完结部分并非开源出来,把商家的主旨内容,如算法等可以隐藏起来。

总计一下锤子科学和技术创始人罗永浩写的 HAL 类别文章会对 HAL 有二个更加深的认知:

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

在上学那篇博客在此之前,依旧得有一些备选知识,不然便是二只雾水。

首先要驾驭,在 Linux
中有着道具都以以文件的格局存在的,不管是通常文书也许硬件配备。

了解 Linux 的驱动

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

诚如景观下编译的 Linux
内核是协助可插入式模块的,也正是将最宗旨的中坚代码编写翻译在基本中,别的的代码能够选拔是在基础中,只怕编写翻译为内核的模块文件。

在基础的安顿进度中,有那个设备驱动程序和别的内核元素都被编写翻译成了模块。

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

假如3个驱动程序被一向编写翻译到了基石中,那么正是那些驱动程序未有运维,它的代码和静态数据也会据有壹部分空中。

但借使那几个驱动程序被编写翻译成一个模块,就唯有在必要内部存款和储蓄器并将其加载到根本时才会真的攻陷内部存储器空间。

7Linux内核怎么着装载和运营一个可施行程序,硬件抽象层调用流程分析。对于 LKM 来说,能够依靠硬件和延续的装置来加载对应的模块。

模块

模块是在根本空间运转的顺序,实际上是①种目的对象文件(.o
文件)未有链接,无法独立运作,可是足以装载到系统中作为基础的1局地运转,从而得以扩展内核的效益,模块最根本的用途正是用来兑现设备驱动程序。

Linux 下对于2个硬件的驱动,能够有三种方法:

  • 一直加载到基础代码中,运营水源时就会使得此硬件程序
  • 以模块的主意运维,编写翻译生成二个 .o
    文件,当应用程序供给时再加载到根本空间运维。

所以大家所说的1个硬件的驱动程序,平时指的就是三个使得模块。

配备文件

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

  • Block(块)型器械文件
  • Character(字符)型设备文件
  • Socket(网络)型器具文件

对此二个器物,它能够在 /dev
上面存在二个应和的逻辑设备节点,那几个节点以文件的样式存在,但它不是不乏先例意义上的公文,它是设备文件,更确切的说,它是设备节点。那些节点是因此mknod 命令建立的,在那之中钦命了主设备号和次设备号。

  • 主设备号申明了某一类设备,一般对应着明确的驱动程序,用于基础把文件和它的驱动链接在联合签字。

  • 次设备号相似是分别分裂属性,举例差异的运用办法,不一致的职位,分化的操作。

其一设备号是从 /proc/devices
文件中拿走的,所以一般是先有驱动程序在基础中,才有配备节点在目录中。那些设备号(特指主设备号)的显要效能,正是声称设备所运用的驱动程序。驱动程序和设施号是各种对应的,当你张开七个设施文件时,操作系统就已经了然那一个装置所对应的驱动程序

proc 文件系统

一种用户程序和根本通信最简易和流行的方法是透过利用 /proc
下文件系统进行电视发表。

/proc
是二个伪文件系统,从那里的文书读取的多少是由基本重临的多寡,并且写入到那中间的数量将会被基本读取和处理。

使用 /proc
目录中的文件监视驱动程序的情状。访问设备文件时,操作系统平时会透过查找
/proc/devices
目录下的值,也便是依据主设备号,明确由什么驱动模块来完毕职务。假如
proc 文件系统未有加载,访问设备文件就会晤世谬误。

小结一下上边包车型客车大摞文字:

美高梅手机版4858 2

首先,内核加载咱们的驱动程序,会变动对应的模块和主设备号。

说不上,插入设备文件时,会基于文件类型分配一个应和的主设备号,标志用哪个种类驱动展开。

末尾,展开设备文件,实质上正是通过驱动程序来张开设备文件,在
/proc/devices 中找到驱动。

有了地方的学识储备,再来领会看锤子科技(science and technology)创办人罗永浩的博客,就知晓一些了。

老罗是把驱动编写翻译成了内核模块,动态加载,并且在模块加载函数内部去推行了设备注册和起始化操作,首要有八个函数
device_createhello_create_proc

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

而且,仍能对装备文件实施相应的操作了,读和写变量的值,这么些操作都是交给了驱动程序去落成读写的。

对此驱动程序,就先理解到那边了,有时光再去探求。

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

那篇小说的根本操作就是经过 C 程序的可实行文件来读写设备文件中的值。

假若推行成功了,则代表 C
可施行程序通过拜访驱动程序来做客硬件寄存器的值了。

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

在此间就关系到关键 硬件抽象层 HAL 了,通过配备文件来接二连三硬件抽象层和
Linux 内核驱动模块。

美高梅手机版4858 ,硬件抽象层有八个至关心注重要的数据结构:硬件模块结构体 hw_module_t
硬件接口结构体 hw_device_t

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

而每壹类硬件抽象模块又富含四个单身的硬件设备,使用 hw_device_t
结构体描述硬件模块中的独立硬件装置。

HAL 规定每一种硬件模块必须蕴含贰个 HAL_MODULE_INFO_SYM
的结构体,这些结构体的第四个成分必须为
hw_module_t,然后前边可以追加模块相关的任何音讯。其中,tag属性也亟须为
HARDWARE_MODULE_TAG 常量。

对应罗永浩博客中的:

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

HAL 规定每种硬件配备都不能够不定义多少个硬件设备描述结构体,该结构体必须以
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);  
};  

那边境海关于硬件模块和硬件配备有点绕,大致正是一类硬件模块包涵众多硬件设备,一个硬件装置属于某1类硬件模块。

Android 对于硬件抽象层有一部分鲜明,那里就不去深入了,包蕴 HAL
命名规范、怎么着加载 HAL 等等。

而外,还要求在 HAL
中定义一些亟待的措施函数来实施操作。这几个点子函数就就如于接口,能够供外部调用,而友好要到位当中间贯彻。

在罗永浩的博客中定义了如下的措施:

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

其中,hello_device_open 函数中有3个 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就可以跨进程通讯了,读写硬件配备中的值。

诸如此类就落成了从应用程序到底层硬件的全部育工作艺流程的调用。

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

美高梅手机版4858 3

调用流程

有了老罗的分析,对于相机的上层软件到底层硬件的调用流程就轻易分析了。

更复杂具体的流水生产线可以参考如下流程:

美高梅手机版4858 4

相机调用流程

  -objcopy:在arm中运作可施行程序时,只认得机器码,所以当大家在运行裸板程序时,由于没有跑操作系统,供给将叠加新闻从代码中退出出去。去掉elf头,只剩余代码段、数据段等等。

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

ARAV四M裸机程序系统结构图

硬件层:硬件程序员决定硬件放在哪个财富。如,是在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层。

能够让应用层程序员解放出来,不用关注底层。
再者,也可以拓展能源管理、多进度拾二线程管理等。

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

使得决定硬件职业。

使得与基本:驱动把辅助的设备向基础报告,内核根据传来的音讯,会调用不一样的驱动程序,来支配相应的硬件。

它们得以以为是一个完全,都属于尾部软件的限定。

贰 目标文件的格式,

.o文件和可实行文件都是目的文件。

美高梅手机版4858 5

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

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

三、android系统框架图

android系统框架图

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

由此分层,能够兑现软件复用性、可移植性。而且不一致模块解耦。

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


三 在ELF当中有三种关键的目标文件
  • 二个可重一直(relocatable)文件(首即使.o文件)保存着代码和适合的数目,用来和别的的object文件一同来创制多个可试行文件只怕是1个共享文件。
  • 贰个可实行(executable)文件保留着二个用来奉行的主次;该文件提出了
    exec(BA_OS)怎样来创制造进度序进度影象。
  • 2个共享object文件(首借使.so文件)保存着代码和合适的数额,用来被上边包车型地铁多少个连接器链接。第壹个是连连编辑器(静态链接)[参看ld(SD_CMD)],可以和其他的重定位和共享object文件来成立其余的object。第一个是动态链接器,联合3个可执行文件和任何的共享object文件来创设1个历程映象。

  -strings:可以查看文件中有怎么着字符串能够用。

二、系统移植学习内容

四 目的文件的格式ELF

Object文件参预程序的接入(创设三个程序)和程序的进行(运转三个顺序)。
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)

一个ELF头在文件的初步,保存了门道图(road
map),描述了该文件的团伙境况。程序头表(program header
table)告诉系统怎么样来创建三个进程的内部存款和储蓄器映象。section头表(section header
table)包蕴了描述文件sections的新闻。每一个section在这么些表中有3个进口;每一种入口给出了该section的名字,大小,等等新闻。

美高梅手机版4858 6

Entry point address是先后的起源
可实践文件的格式和经过的地点空间有八个辉映关系,
可奉行程序加载的严重性办事。

当创设或扩展三个进程影像的时候,系统在答辩少将拷贝贰个文书的段到1个虚构的内部存储器段

+ 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可试行文件与经过的地点空间

美高梅手机版4858 7

Entry point address 是可实践文件加载到内部存款和储蓄器中初露进行的首先行代码
貌似静态链接会将富有代码放在一个代码段
动态链接的经过会有多少个代码段

  -strip:剔除符号表。

二、bootloader成效子系统

bootloader的选料和移植

系统一上电会运行1个主次:bootloader(运营加载),目的是load kernel。

能够做很各个方案的选用。
有的是大型项目中,更加多是选项切合项目标开发银行加载代码,然后再修改(移植)。
多多时候,买芯片的时候,芯片厂家就曾经提供好了。

6装载可试行程序在此以前的劳作

命令行参数和景况变量是如何保存和传递的
调用execve系统调用时,要加载的可试行程序,把原本的历程意况覆盖掉,覆盖掉之后,用户态酒店被清空。
命令行参数和意况变量是什么样进入新进度的仓库的
创立多少个新的用户态饭馆时,把命令行参数的内容和景况变量的剧情,通过指针的章程传送到系统调用的根本管理函数。内核管理函数在创立2个新的可施行程序的用户态货仓时,会把argv和envp拷贝到用户态货仓里,来开始化新的可推行程序推行的上下文意况。
先函数调用参数字传送递,再系统调用参数字传送递。

3、内核主题子系统

kernel的铺排、编写翻译、移植和调治

7

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


四、文件系统子系统

根文件系统的造作

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

这5个便是壹种类统移植的优秀。


装载可实施程序此前的办事

总结
把ELF可试行文件加载到内存中,通过ELF底部的新闻,找到程序的输入实践。

叁、学习思路和格局

先整体后局地,层层推进。

各种子系统是怎么样编写翻译的 —> 在基本功能下,如何增添命令或效益 —>
如何自定义本身的开荒板,与友好的开发板具体硬件相联系

每一种子系统都负有三个复杂的档次关系。
据此要先领会完全,须要首先通晓相关子系统的藏宝图,有了这么些地图,去追究它就有了类别化。


四、系统移植的中央步骤

获得一块板子,怎么样让漫天系统跑起来吧?

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

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

多少正是高低电平。

传输格局:

(一)UART异步串行通讯接口 (串口)
它是老大特出的与PC机通讯的接口。

优点:

  • 作用很强大,既能够输入,也得以出口,相比较万能。
  • 实用性强(十分九的板子都协助)

缺陷:速度异常低,功用相比较差。
大文件一般不用串口传输,小文件能够。

(二)USB串行通讯接口
以往曾经进化到USB 叁.0

优点:速度快
缺点:USB的驱动要移植修改。
板子刚刚上电,就让串口工作,是不现实的。

(3)TCP/IP网络通讯接口
优点:速度快(10/100Mbps)
缺点:驱动供给移植

TCP/IP已经很成熟了。开拓板与PC能够以C/S方式展开数据的传导和下载。相比较通用。而且网卡的速率也十分的快,最少十M,100M网卡也大多。

透过网络接口去下载数据的情况多多。

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

二、安装交叉编写翻译器

PC的cpu架构是X86,X8六程序和arm程序不包容,因而必要交叉编写翻译器。

2种方法:

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

诚如有如下前缀名:

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

arm-none-eabi-
本条不援救操作系统。

arm-elf-
以此那个老了。很少看到了。

首先列:目标连串布局
gcc:暗中同意编写翻译x八六
有arm,就会编写翻译arm

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

其三列:该编译器暗许编写翻译出来的职能是对准linux操作系统去用的。
那一个编写翻译器内部有个别专门的学问C库,是与linux系统相关的。
在windows下运维不了。

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

(2)本人动手工编织译交叉工具链
《The GNU Toolchain for AEscortM Target HOWTO》那本书会介绍。

自动动手编写翻译相当耗费时间,而且会报许多不相称的标题。调节和测试需求功力,对编译原理要明了的很理解。繁多厂家都不会去做。不建议接纳该格局。

思路其实对比单纯,唯壹的不好是本子间的依赖性关系非常大。

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

譬如用互联网,则需求网络有关服务器的配备。

一般嵌入式中,用的相比多的劳动:

  • TFTP :基于UDP协议传输的,是FTP的简版。UDP比FTP轻便。
  • NFS:网络文件系统。目的是linux与linux之间挂载用的。
    文件系统的调治将养,大多时候用NFS作为调养的工具。

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

bootloader作用子系统
基本核心子系统
文本系统子系统

该手续难度最大。

伍、烧写测试

漫天进行集成,然后嵌入工厂开始展览集成化生产就能够了。


伍、情形搭建须求分析

要求分析:
主机中的数据 如何传递 到开荒板?

目标1:普通数据的传递:比如,uboot,kernel。
驷比不上舌目标正是为了传递。
UART很少使用,更加多应用的是互连网接口。最根本的运用方法是TFTP服务。

TFTP首要传输的是kernel的文件。
uboot会通过其余艺术烧写(当然网络接口也能够传输。看支出情况来决定。)

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

在x八6上调好,再停放板子上。
不过,有希望调节和测试不是很顺畅,由此供给开荒板与PC间建立更合理、方便的减轻方案。

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

板子能够外挂十分的大空间的存款和储蓄器,比方U盘。
不过U盘很辛勤,插开采板上,完了还得拔下来插PC上。

思路:调解时,不自然非要实行互联网传输。只须要把数据挂到板子上就足以了。

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

调度起来更为方便,PC上的修改板子上就能够一贯看看了,不必要开始展览愈来愈多的数码传输了。

调整内核驱动、应用程序,多数时候是依靠那种方法,在PC上进展软件开辟,然后径直在板子上进展表明。


6、台式机移植境况搭建

串口:连接形式方便,驱动轻松。
个别据量的事物,会用串口。
正规输入/输出,会固定到串口驱动上。

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

怎么排查目标机与主机的各层是还是不是通了?

  • 应用层:调节和测试程序
  • 传输层:首假若端口port未有开放。要不正是服务器开放端口不对或未开放端口,也许客户端访问的端口不对。
  • 网络层:通过ping看看在不在叁个局域网段。
  • 物理层:查看插上的网卡灯有没有亮。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有