探寻linux系统移植的世界

把linux在arm开发板上进行定制,并在arm开发板上运行起来。
更好地理解linux的构架过程。

驱动开发是在系统运行起来后,在内核中增加一些驱动子功能而已。


一、概述

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

ARM裸机程序系统结构图

硬件层:硬件工程师决定硬件放在哪个资源。如,是在GPA口,GPH口,还是GPG口。

驱动层:驱动工程师根据硬件的架构,把驱动的资源用代码去指向,比如C语言的指针去指向相应的资源;硬件需要什么样的高/低电平或组合的数据,让其工作,是由驱动层封装的。

应用层:根据传递的不同的值,来得到不同的结果。

该架构存在的问题:
耦合性太强,一旦一层发生改变, 其他层都会变。

2、类android等复杂功能系统结构图

为了解决上述问题,引入一个概念:OS;引入一层:kernel层。

可以让应用层程序员解放出来,不用关心底层。
同时,也可以进行资源管理、多进程多线程管理等。

类android等复杂功能系统结构图

驱动控制硬件工作。

驱动与内核:驱动把支持的设备向内核报告,内核根据传来的信息,会调用不同的驱动程序,来控制相应的硬件。

它们可以认为是一个整体,都属于底层软件的范围。

3、android系统框架图

android系统框架图
hal层的加入,使得Libraries层和kernel层又隔离开了

通过分层,可以实现软件复用性、可移植性。而且不同模块解耦。

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


二、系统移植学习内容

1、交叉编译环境

搭建交叉开发环境

2、bootloader功能子系统

bootloader的选择和移植

系统一上电会运行一个程序:bootloader(启动加载),目的是load kernel。

可以做很多种方案的选择。
很多大型项目中,更多是选择适合项目的启动加载代码,然后再改改(移植)。
很多时候,买芯片的时候,芯片厂商就已经提供好了。

3、内核核心子系统

kernel的配置、编译、移植和调试

4、文件系统子系统

根文件系统的制作

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

这4个就是整个系统移植的精髓。


三、学习思路和方法

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

每个子系统是如何编译的 ---> 在基本功能下,如何添加命令或功能 ---> 如何自定义自己的开发板,与自己的开发板具体硬件相联系

每个子系统都具有一个复杂的层次关系。
所以要先掌握整体,需要首先掌握相关子系统的藏宝图,有了这个地图,去探索它就有了方向。


四、系统移植的基本步骤

拿到一块板子,如何让整个系统跑起来呢?

1、确定目标机(开发板,客户端)和主机(PC,开发机器,服务端)的连接方式

主机性能会比目标机好太多,因此一般在主机开发,把主机编译好的内容数据传输给目标机。

数据就是高低电平。

传输方式:

(1)UART异步串行通信接口 (串口)
它是非常经典的与PC机通信的接口。

优点:

  • 功能很强大,既可以输入,也可以输出,比较万能。
  • 实用性强(90%的板子都支持)

缺点:速度比较低,效率比较差。
大文件一般不用串口传输,小文件可以。

(2)USB串行通信接口
现在已经发展到USB 3.0

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

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

TCP/IP已经很成熟了。开发板与PC可以以C/S模式进行数据的传输和下载。比较通用。而且网卡的速率也比较快,最少10M,100M网卡也很多。

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

(4)Debug Jtag调试接口
方便快捷,但价格很高,很少使用。

2、安装交叉编译器

PC的cpu架构是X86,X86程序和arm程序不兼容,因此需要交叉编译器。

2种方法:

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

一般有如下前缀名:

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

arm-none-eabi-
这个不支持操作系统。

arm-elf-
这个非常老了。很少见到了。

第一列:目标体系结构
gcc:默认编译x86
有arm,就会编译arm

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

第三列:该编译器默认编译出来的功能是针对linux操作系统去用的。
这个编译器内部有些标准C库,是与linux系统相关的。
在windows下运行不了。

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

(2)自己动手编译交叉工具链
《The GNU Toolchain for ARM Target HOWTO》这本书会介绍。

自动动手编译非常耗时,而且会报很多不兼容的问题。调试需要功力,对编译原理要理解的很清楚。很多公司都不会去做。不建议使用该方法。

思路其实比较单一,唯一的不好是版本间的依赖关系比较大。

3、搭建主机-目标机数据传输通道

比如用网络,则需要网络相关服务器的配置。

一般嵌入式中,用的比较多的服务:

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

4、编译三大子系统:

bootloader功能子系统
内核核心子系统
文件系统子系统

该步骤难度最大。

5、烧写测试

整个进行集成,然后放到工厂进行集成化生产就可以了。


五、环境搭建需求分析

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

目的1:普通数据的传递:比如,uboot,kernel。
主要目的就是为了传递。
UART很少使用,更多使用的是网络接口。最主要的使用方式是TFTP服务。

TFTP主要传输的是kernel的文件。
uboot会通过其他方式烧写(当然网络接口也可以传输。看开发环境来决定。)

目的2:调试:主机的一块内存空间,直接挂载在板子上。

在x86上调好,再放到板子上。
但是,有可能调试不是很顺利,因此需要开发板与PC间建立更合理、方便的解决方案。

不能在板子上直接调试,就是因为板子容量太小。
要想办法扩大板子空间,但是flash太贵。

板子可以外挂很大空间的存储器,比如U盘。
但是U盘很麻烦,插开发板上,完了还得拔下来插PC上。

思路:调试时,不一定非要进行网络传输。只需要把数据挂到板子上就可以了。

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

调试起来更加方便,PC上的修改板子上就可以直接看到了,不需要进行更多的数据传输了。

调试内核驱动、应用程序,很多时候是借助这种方式,在PC上进行软件开发,然后直接在板子上进行验证。


六、笔记本移植环境搭建

串口:连接方式方便,驱动简单。
少数据量的东西,会用串口。
标准输入/输出,会定位到串口驱动上。

笔记本都是USB接口,而开发板要用串口,因此要买USB转串口

如何排查目标机与主机的各层是否通了?

  • 应用层:调试程序
  • 传输层:主要是端口port没有开放。要不就是服务器开放端口不对或未开放端口,或者客户端访问的端口不对。
  • 网络层:通过ping看看在不在一个局域网段。
  • 物理层:查看插上的网卡灯有没有亮。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容

  • 移植 下面我们就来看下一个内容叫做移植的基本步骤,也就是说我们要现有一个大体的思路,如果说我作为产品开发者,或者说...
    随波逐流007阅读 1,005评论 0 1
  • 姓名:吴兆阳 学号:14020199009 转自韦东山 嵌牛导读:对嵌入式初学者,没有足够的视野选择一个合适投入方...
    吴兆阳阅读 2,368评论 0 4
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,050评论 25 707
  • 仿佛下一秒就要死去 现在这一秒如此珍贵 舍不得给你一个拥抱 只因为有更重要的事要去做 如果下一秒活得更好 怎么说也...
    之亦夫阅读 141评论 4 4
  • 文/高一点儿 自古何为缘? 是冥冥之中以注定? 还是前世轮回的相遇? 昔年的雾中相遇,懵懂混着朦胧,迷雾中看到了婀...
    高一点儿阅读 512评论 11 15