读书笔记《Building embedded linux systems》Chapter 2

   继续努力,开始学习第二章:基本概念。
  对于嵌入Linux,需要先熟悉Linux系统,有很多,也将有更多的Linux系统,因此不要限制与某个单一的类型。目前最大的三个是Red Hat,Novell(SLES)和ubuntu。如果我们选择流行的Linux版本作为开发平台(可以选择windows或者Unix作为workstation),一般基于Eclipse的图像开发环境。
   有三种setup:Linked setup;可插拔存贮setup,standalone setup。Target需要开发环境,bootloader,kernel,Root,文件系统。在Linked setup的时候,有些向我们以前在调测vxWorks板子上的程序,通过网线或者RS232,将host和target联系起来,通常用于开发的调测, 其中kernel可以通过TFTP来获得,文件系统可以通过NFS来mount,避免在开发中大量copy。Removable Storage Setup方式常用于初始化,bootloader在target上,其他在可插拔的存贮介质中。前两种方式,开发环境都在host上,对于 standalone setup方式,和我们的PC机开发没有什么区别,直接在机器上进行开发,都有的东西都在target上面,就如我们之前在linux kernel上开发的voip监控仪表。Linked和standalone是可以结合在一起使用的。
  调测(Debug)setup有三种方式:串口、网络和特定的debug硬件。串口收到波特率的限制,以及连接一个terminal的限制,但是适合 进行kernel调测。串口和网络会使用到target上的一些基本的I/O软件,对于某些新的板块,调测kernel的时候,这些软件还不存在,因此需 要特别的debug硬件,例如用于CPU的JTAG和BDM pin,这些都是比较昂贵的编译器,并且可能需要和CPU厂家建立良好的合作伙伴关系,签注NDA。

  Linux操作系统的结构如图所示。
  在底层硬件包括至少32-bit的CPU(包含MMU:memory management unit),RAM,I/O能力(允许进行debug调测)以及root filesystem(可以是本地的也可以是网络的)。
  Kernel,就是真正意义上的linux,底层的接口通过硬件独立的API来控制硬件资源,例如memory pages,处理特定CPU的操作,特定架构memory的操作,以及device的基本接口,想高层提供抽象的代码,包括头文件、宏、封装的函数。高层 的单位提供对所有基于unix系统通用的抽象表达,包括进程、文件、socket、信号等等。kernel的底层接口是不同已经平台所通用的,高层抽象几 乎是一样的。『这里有一个BSP,BSP应该是硬件根据linux内核底层接口给出的控制硬件的板卡支持包』。
  在这两层之间,kernel需要解析元件来交互数据,这就是文件系统和网络协议。在嵌入式系统中,经常使用flash作为存贮介质。不同的存贮格式通 过不同的引擎,通过linux的虚拟文件系统(VFS)提供统一的API给上层使用。FAT和EXT3都是VFS。现在存贮设备厂家提供更高level的 抽象,linux使用这种发展,使用ext的文件系统。在文件系统中,至少有一个root filesystem,用于load第一个在系统中run的app,通常还包括转载module,给进程提供一个工作目录。根文件系统可以是一个真实的硬 件存贮设备,也可以是系统启动是价值到RAM中,一般是第一种方式。
  直接在kernel上面部署我们通常所谓的app是不太合适的,需要lib的支持。常见的是GNU C。对于动态链接,没有将相关的lib作为app的二进制代码,可以多个app一起share。C lib在RAM中加载一起,就可以分享。但是有些嵌入式操作系统的应用选择静态链接,这样不需要在线系统存贮整个lib。
  系统启动设计三个部分:bootloader、内核、init进程。bootloader和底层硬件有关,先对底层硬件进行初始化后,进入kernel的startup code。内核的启动代码在起来一个C代码运行环境前不同平台由很大的差异,启动C环境后,运行start_kernel(),这初始化内核高层功能,mount根文件系统,并且启动初始进程。
  CPU的第一个指令由生产厂家指定的一个地址获得,这个地址通常是一个固定存贮器件,ROM或者flash芯片,这上面的软件是用于 bootstrap的。很多linux嵌入系统都是使用固体存贮期间的方式,这里包括初始的bootloader,相关配置(boot parameters),内核和root filesystem。bootloader可能防止固态存贮的地址低位,也可能在地址高位,因此很多flash设备同时提供对高位地址和低位地址的配 置,并通常对bootboader区域提供保护机制。虽然说分为四个部分,但是boot参数可以防止子bootlader中,kernel也可以防止在 root filesystem中,在Linux2.6,如果需要可以很方便将kernel和根文件系统打包为一个img。Boot storage介质可以使用devie programmer进行初始编程。出来固态存贮器件外,还有磁盘(disk)和网络两种方式。对于磁盘,最初的bootloader或者从disk中 load一个更大更多功能的第二bootloader,或者直接从disk获得kernel。使用网络方式,可能将根文件系统或者将跟文件系 统+kernel放置在网络,他哦通过TFTP来访问kernel,通过NFS来mount根文件系统,这种方式在适合早期的调测。
  系统存贮的物理地址和kernel的虚拟地址(在X86系统中成为逻辑地址)有很大的差异,很多硬件外设可以通过物理地址来获取,但限制或者不能通过 虚拟地址来获取。因此如果我们需要设置kernel或者开发自己的driver,我们需要了解这些物理地址。在启动的时候,bootloader将 kernel读至RAM,并跳到内核的start routines,后续的系统启动将由linux来执行。当linux运行是,程序使用虚拟地址,这是虚拟地址将对kernel的配置和设备driver 有个,driver有些信息放置在kernel空间,有些放置在用户空间,有些操作两者之间需要交互数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Build Complete Embedded Linux Systems Quickly and Reliably Developers are increasingly integrating Linux into their embedded systems: It supports virtually all hardware architectures and many peripherals, scales well, offers full source code, and requires no royalties. The Yocto Project makes it much easier to customize Linux for embedded systems. If you’re a developer with working knowledge of Linux, Embedded Linux Systems with the Yocto Project™ will help you make the most of it. An indispensable companion to the official documentation, this guide starts by offering a solid grounding in the embedded Linux landscape and the challenges of creating custom distributions for embedded systems. You’ll master the Yocto Project’s toolbox hands-on, by working through the entire development lifecycle with a variety of real-life examples that you can incorporate into your own projects. Author Rudolf Streif offers deep insight into Yocto Project’s build system and engine, and addresses advanced topics ranging from board support to compliance management. You’ll learn how to Overcome key challenges of creating custom embedded distributions Jumpstart and iterate OS stack builds with the OpenEmbedded Build System Master build workflow, architecture, and the BitBake Build Engine Quickly troubleshoot build problems Customize new distros with built-in blueprints or from scratch Use BitBake recipes to create new software packages Build kernels, set configurations, and apply patches Support diverse CPU architectures and systems Create Board Support Packages (BSP) for hardware-specific adaptations Provide Application Development Toolkits (ADT) for round-trip development Remotely run and debug applications on actual hardware targets Ensure open-source license compliance Scale team-based projects with Toaster, Build History, Source Mirrors, and Autobuilder Table of Contents Chapter 1. Linux for Embedded Systems Chapter 2. The Yocto Project Chapter 3. OpenEmbedded Build System Chapter 4. BitBake Build Engine Chapter 5. Troubleshooting Chapter 6. Linux System Architecture Chapter 7. Building a Custom Linux Distribution Chapter 8. Software Package Recipes Chapter 9. Kernel Recipes Chapter 10. Board Support Packages Chapter 11. Application Development Chapter 12. Licensing and Compliance Chapter 13. Advanced Topics Appendix A. Open Source Licenses Appendix B. Metadata Reference

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值