本文概括性地介绍嵌入式Linux移植。

系统移植一般包括三大方面,如下:

bootloader:作为上电运行的第一个程序,负责最原始的初始化操作,初始化芯片、初始化内存、初始化IO复用,读取内核代码并将控制权移交到内核,从而完成使命。

kernel:提供基本的运行环境,提供外设操作控制接口。

rootfs:向用词(应用层)提供基本操作环境,包括命令行、程序库等。

1、bootloader(启动装载程序)

嵌入式Linux常见的bootloader是u-boot,而X86领域中一般称为BIOS。u-boot的学习没有捷径,最好是在有ARM开发板情况下进行研究,通过打印信息的方法跟踪其流程。但是,看懂u-boot代码需要电路基本知识、芯片手册知识等等。——这些知识,同样适用于内核驱动的开发。

首先要建立的是整体概念和认识。建议先把厂商提供的u-boot源码编译通过,并下载到开发板上看到正常结果后,再用串口打印信息搜索代码,以了解u-boot的代码流程。然后再慢慢研究。如果bootloader不是学习重点,在有一定概念前提下就可以跳过到内核驱动层了,不过就笔者经验来看,bootloader和内核关系十分密切且部分代码是相通的。

一般初始化的代码是汇编代码,对于入门者而言,初学阶段不用追究,等有一定基础后再回头研究也不晚。

笔者许多年前移植过u-boot,写了几篇文章,版本旧了一些,但对于学习而言还有有好处的:

u-boot文章

笔者曾经研究过x86的开源bios,写了几篇文章,大家可以看看。虽然对于u-boot学习帮助不大,但可以了解笔者如何从零开始学习一个未知的知识。地址:coreboot文章

2、kernel(内核)

内核是比较大的一块,涉及内容十分多。作为入门者,与u-boot类似,首先要建立的整体概念。先把厂商提供的内核源码编译通过,并下载到开发板上,串口会打印很多启动信息,这些启动信息能帮助我们学习内核,自己也可以在内核中打印语句,以了解其流程。

每一个平台芯片不同,外设不同,内核均不同,需要进行移植。所谓的“移植”,就是找到合适的驱动,修改适应到该平台的过程。比如,某平台使用2个LCD屏,一个是3.5寸的,另一个是4.3寸的,这需要对内核进行修改。比如,这个平台使用nand flash是1GB的,另一个平台使用的是512MB的,也需要修改内核。其它如EEPROM、电源芯片、网卡,等等,均如此。

内核知识点分2部分,一是kernel本身的知识点,如内存管理机制(MMU)、时间管理、同步机制,等等。二是外设驱动,如LED灯、GPIO、按键。

初学者建议学习:

1、了解内核编译的过程:配置内核、编译uImage。

2、了解platform驱动模型(笔者文章有现成的模板,已经应用于很多个平台上)。

3、了解一般外设驱动模型。建议从简单的LED、GPIO入门。

高阶知识点:

1、学习各种子系统,如MTD、USB、IIC、SPI、RTC、WDT。

2、学习内核知识,如延时队列、时间管理,同步机制,等等。

推荐资源:

《Linux设备驱动程序》第三版

《Linux设备驱动开发详解》

笔者开了一个专栏讲内核的,欢迎阅读:http://blog.csdn.net/column/details/15829.htm

3、rootfs(根文件系统)

一般情况下,开发板厂商会提供根文件系统,如果没有,则可以自己编译制作。一般嵌入式Linux使用busybox制作文件系统必要的程序、库、配置文件。因为busybox编译出来的内容体积小,节省空间,所以很多ARM开发板上都是用busybox的。另外还涉及到文件系统格式,像Yaffs2、ramfs、ext4、UBI,等等。所有这些知识点,请自行搜索学习。

掌握程度:

1、知道系统启动过程涉及到哪些脚本。知道上电启动时如何添加自己程序启动。

2、了解各目录功能、存储哪些文件(如改IP在哪个配置文件,动态库在哪些目录)。

4、移植框架

现在已经有许多现成的框架对u-boot、kernel、rootfs进行整体的编译移植(或部分,或全部),从源码下载、编译、生成镜像,只需要一个命令即可。这些框架有:openwrt、buildroot、yocto,等。

笔者认为,在工作上,以最快出成果为准则,因为有些厂家提供的RDK就是一个完整的编译环境、源码包,直接使用即可。如果以学习为目的,还是建议将u-boot、kernel、rootfs以及交叉编译环境分开对待研究。

5、心得

虽然笔者长期研究的技术点包罗万象,重点还是偏向于底层系统方面。对于u-boot、kernel,我认为前两者有一定程度几乎相似(包括代码和知识点),但kernel十分庞大,值得去研究。如果要选择一个,笔者偏向于kernel。对于rootfs,笔者可以大言不惭地说研究到一定深度了,前任职的公司,arm平台的rootfs由笔者维护多年,而x86的rootfs由笔者创立并维护多年。但是,rootfs技术不及kernel,所以就本文而言,建议以kernel为技术点,u-boot达到了解结构,会看代码即可(因为kernel知识能通用),rootfs在日常中积累。

李迟 2017.4.14 周五 晚

嵌入式Linux入门5:移植总览相关推荐

  1. 嵌入式Linux入门经典笔记

    史上最牛的Linux内核学习方法论     点击下载 我的arm_linux移植笔记     点击下载 S3C2440完全开发流程     点击下载 Linux系统命令及其使用详解完整版     点击 ...

  2. 嵌入式linux怎么入门,嵌入式linux入门六步走

    学习嵌入式linux怎样才能快速入门?这是很多出来华清远见参加嵌入式培训学员爱问的问题,这里做一个总结供大家参考,嵌入式linux入门可以概括为六步走: 第一步:学习基本的裸机编程 对于学硬件的人而言 ...

  3. 分享:嵌入式Linux入门学习指导

    很多嵌入式linux初学者对嵌入式linux学习十分迷茫,不知道该怎么一步步学习,嵌入式linux学习方法,学习的流程步骤以及学习过程中需要看哪些好的书籍.下面凌阳教育嵌入式培训网就为大家整理的嵌入式 ...

  4. 嵌入式Linux入门13:应用层调试

    本文主要介绍应用程序的调试方法. 很多网友问我怎么调试内核,怎么查找代码bug.其实我的方法不多.一是靠经验,掉入的坑多了,做笔记回顾,自然就有了经验.二是靠printf/printk大法跟踪.三是利 ...

  5. 【Linux】嵌入式Linux系统的移植(上篇:交叉编译器、连接方式)

    嵌入式Linux系统移植 嵌入式Linux系统移植是进行Linux驱动开发的基础,如果连Linux系统移植都完成不了,那就更不用说驱动开发了.因此,Linux系统移植至关重要. 嵌入式Linux系统的 ...

  6. 嵌入式 Linux 入门 环境篇(二、安装虚拟机 — 体验 Ubuntu 22.04)

    嵌入式 Linux入门 环境篇第二课,正好换了新电脑,更新 Ubuntu 虚拟机的安装, 体验一下 Ubuntu 22.04 ...... by 矜辰所致 前言 因为以前的电脑虚拟机环境我都配置好了, ...

  7. 嵌入式linux入门学习规划

    嵌入式linux入门学习规划 如何理解嵌入式系统 ◆嵌入式系统是面向用户.面向产品.面向应用的,它必须与具体应用相结合才会具有生命力.才更具有优势.因此可以这样理解上述三个面向的含义,即嵌入式系统是与 ...

  8. 推荐一款不错的嵌入式GUI(玲珑GUI)及在嵌入式linux上的移植

    玲珑GUI介绍 玲珑GUI(LLGUI)是一套使用简单.低价的单片机GUI解决方案.可以用来代替串口屏.组态,降低产品成本,产品软硬件自主可控. 配套界面开发软件,图形化编辑界面,生成C代码. 如其名 ...

  9. 嵌入式linux usb wifi移植[s3c6410平台原创]

    文档名称:嵌入式linux usb wifi驱动移植 版本历史 v1.0b001 2012-6-18 linuxusb wifi 嵌入式linux usb wifi移植参考文档 ■ realARM 6 ...

  10. linux用户环境下进入uboot,嵌入式linux开发uboot移植(一)——uboot项目简介

    嵌入式linux开发uboot移植(一)--uboot项目简介 一.uboot简介 U-Boot,全称 Universal Boot Loader,是遵循GPL条款的从FADSROM.8xxROM.P ...

最新文章

  1. 企业级应用能帮助闪存走出产能过剩时代吗?
  2. mysql模糊查询不会区分大小写_MySQL模糊查询(like)时区分大小写
  3. 深入理解 Java 虚拟机 学习笔记
  4. C++17中那些值得关注的特性(上)
  5. python异常处理机制的好处_浅谈Python异常处理机制
  6. 计算机程序备份,将应用程序快照备份到计算机
  7. 【ACM】hdu_1862_EXCEL排序_201308091948
  8. 使用asp.net mvc开发应用程序,页面中的page.IsPostback还有用处吗?
  9. 二分图最大匹配 - 匈牙利算法
  10. 很好用的软件 RouterPassView
  11. 关于阵列卡的配置参数Cache Policy(缓存策略)
  12. oracle 触发器入门,ORACLE PL/SQ入门 (存储过程、触发器)
  13. 用通俗的语言解释贝叶斯公式
  14. 喜报丨内蒙古谱尼医学获批开展临床基因扩增检验技术
  15. 如何查看一个人发表的SCI数量
  16. ISO C 与POSIX 的关系
  17. RecyclerView安卓androidx.widget.RecyclerView
  18. 服务器会话视图没有显示内容,举个栗子!Tableau 技巧(77):通过服务器视图的全屏实现多媒体展示...
  19. php 跳转qq群代码_Q群自动签到php+java实现
  20. uniapp canvas绘制弧形圆环

热门文章

  1. 三款旗舰手机、四大高端生态新品,Redmi发布K50系列等七大重磅新品
  2. 谷歌为安卓系统加入Fast Pair技术 蓝牙耳机将实现设备自动切换
  3. 菜鸟启动“快递包装换鸡蛋”活动 史上最低碳的一届“双11”来了
  4. 在周二正式发售前 新款MacBook Pro已开始向客户发货
  5. 格力电器上半年净利94.57亿元,同比增长48.64%
  6. 特斯拉:部分帖文包含不实信息 将定期分享真实情况
  7. 理想汽车4月交付5539辆 累计交付51715辆
  8. 对老年人友好!滴滴开通打车400热线
  9. 春节直播大战搜狐另辟蹊径 40余场直播引领牛年直播综艺新风尚
  10. 北京文化:截至10月8日 来源于《我和我的家乡》的收益约为8000万元-1亿元