精华内容
下载资源
问答
  • 嵌入式Linux平台的分层邻接切片算法.pdf
  • 分层文件系统在嵌入式Linux中的实现.pdf
  • 嵌入式Linux 一. 嵌入式体系结构<嵌入式系统设计师教程>这本书的前三章脉络很清晰, 按照嵌入式系统结构从下往上, 从底层的硬件, 电路, 到上层的系统, 应用, 逐层展开介绍. 书的后三章是在掌握好前面的基础后,...

    60a9fcd55a27aba52766706ebb73efc5.png

    目录

    一. 嵌入式体系结构

    二. 开发过程中的分工

    三. 嵌入式软件体系结构

    四. 嵌入式Linux


    一. 嵌入式体系结构

    <嵌入式系统设计师教程>这本书的前三章脉络很清晰, 按照嵌入式系统结构从下往上, 从底层的硬件, 电路, 到上层的系统, 应用, 逐层展开介绍. 书的后三章是在掌握好前面的基础后, 对于应用开发, 软件工程等宏观上的指导. 我根据前三章的结构画出了图1.1的嵌入式系统结构图, 系统分层结构一目了然. 第三层多出来的Linux和四大块, 后面再介绍.

    d18cb175eee1f5719690ba5e3e01d690.png

    图1.1


    二. 开发过程中的分工

    部门里每个产品的基本开发都需要硬件组, DSP&BSP组, 应用开发组的协作完成.

    基础知识这块距离嵌入式开发越来越遥远了, 各大IC厂商为嵌入式产品开发商提供了完善的芯片和手册, 批量购买就行了哈哈.

    硬件组的工作属于第二层, 第二层里还有我没有标识出的电源技术, "画板子"技术. 涉及到硬件, 比如喇叭, 麦克风, 电源, 芯片选型, 系统总线接口设计, 网口, 蓝牙, 画PCB, 制作PCB...自然也涉及到成本, 硬件研发周期等问题.

    DSP&BSP组的工作属于第三层, 在不同平台, 也就是不同处理器架构的板子上移植BootLoader->操作系统->设备驱动->文件管理系统, 协助硬件调通板子上电能跑, 再交给应用层做开发.

    应用开发组就是"站在巨人的肩膀上"敲代码了. 向下要了解操作系统基本知识, 向上要把握客户的迫切需求, 还要夜以继日的提高开发技能. 也希望这一层是"入门不易, 前途无量"吧.


    三. 嵌入式软件体系结构

    软件体系结构在<嵌入式系统设计师教程> 里有图示, 即图3.1. 我觉着部门里BSP&DSP组的人是在跨层工作, 因为红框里的这些移植都是由他们实现的.

    32155bd9ea7957503e0e1ca663cfdadb.png

    图3.1

    3.1 设备驱动层

    设备驱动层又叫板级支持包, 即Board Support Package, BSP. 包含了嵌入式系统中所有与硬件有关的代码. BSP的基本思想是把嵌入式操作系统与具体的硬件平台隔离开来, 并向上层提供一个虚拟的硬件平台, 操作系统就运行在这组虚拟平台上. OS使用一组定义好的编程接口与BSP交互, 通过BSP访问真正的硬件. BSP主要实现以下两种功能:

    1. 引导BootLoader

    BootLoader是嵌入式系统上电后运行的第一段软件代码. 在一个基于ARM*内核的嵌入式系统中, 系统上电或复位一般都是从地址x00000000开始执行, 这个地址通常放置的就是BootLoader.

    • 片级初始化, 包括微处理器核心寄存器和控制寄存器, 微处理器核心工作模式, 局部总线模式;
    • 板级初始化, 正确设置各种寄存器内容如初始化定时器, 设置中断控制寄存器, 初始化串口通信, 建立内存空间的地址映射;
    • 加载内核, 将操作系统和应用程序从Flash存储器复制到系统内存中, 跳转到系统内核的第一条指令处.

    2. 引导设备驱动

    设备驱动就是一组库函数, 对硬件进行初始化和管理, 向上层提供访问接口. 设备驱动的基本功能:

    • 硬件启动: 在开机上电或系统重启时, 对硬件初始化
    • 硬件关闭: 将硬件设置为关机
    • 读: 从硬件中读取数据
    • 写: 往硬件中写入数据

    3.2. 嵌入式中间件

    在操作系统内核, 设备驱动程序, 应用软件之外的所有系统软件. 如Sun公司的嵌入式Java, Google的Android.

    3.3. BootLoader之uBoot

    系统上电后, 需要一段小程序来初始化, 包括: 关闭看门狗, 改变系统时钟, 初始化存储控制器, 将更多的代码复制到内存中等等. 如果它能将操作系统内核从Flash/远端网络传输复制到内存, 就称这段小程序为BootLoader.

    比如BSP组提供的Bootloader, 在以上基本功能之外, 还提供给广大应用开发人员增强的BootLoader功能, 包括通过串口, ftp传输, 下载, 烧录文件, 将Flash上的压缩文件解压后再运行等等. 增强版的功能用户并不需要, 它们都是为了方便广大应用开发人员, 感动crying.

    3.4 BootLoader的两种工作模式

    1. 启动加载模式

    上电后, BootLoader从板子的固态存储设备上将OS加载到RAM, 整个过程无用户介入, 产品发布时采用此模式.

    2. 下载模式

    开发人员可以使用各种命令, 通过串口或网络连接等通信手段从主机下载文件, 比如内核映像, 文件系统映像等, 将它们放入内存运行或烧入Flash类固态存储设备中.

    从主机传输文件, 可以采用串口xmodem/ymodem/zmodem协议, 简单而且慢; 还可以使用网络通过ftp, nfs传输, 主机需要开启ftp, nfs服务.

    U-Boot是功能强大的BootLoader, 通常支持两种工作模式, 而且允许用户在两种模式间切换. 比如, U-Boot启动时处于正常的启动加载模式, 但会延时若干秒, 等待终端用户按下某键而将U-Boot切换到下载模式. ITE启动时就是这样, 开启后立刻回车, 就会进入下载模式, 在这个模式下可以进行参数配置和ftp系统升级.


    四. 嵌入式Linux

    作为软件体系结构的主流结构, 嵌入式Linux体系应用广泛, 日后我也是靠它吃饭了. 关于嵌入式Linux最常听到的四大块就是: BootLoader, 内核, 驱动, 根文件系统. 其实也就是Linux内核+"嵌入式周边"=嵌入式Linux的关系. 四大块物理位置处于第二层中的不同存储体系中:

    • 内存: BootLoader
    • (ROM)Flash: Linux内核
    • 外存: 驱动程序

    嵌入式物联网资料分享交流群:332650978 入群有全套学习视频资料电子书免费赠送!

    参考资料:

    Linux 基础_JAVA​www.makeru.com.cn
    df73329cd59788ee2cd7fddcd6811bcd.png
    嵌入式Linux驱动入门 - 如何在linux系统上移植驱动​www.makeru.com.cn 嵌入式Linux驱动入门 - 字符设备驱动的框架​www.makeru.com.cn 嵌入式内核及驱动开发初级-嵌入式视频教程​www.makeru.com.cn
    展开全文
  • 1 嵌入式系统硬件资源限制:cpu主频、内存容量… 2 嵌入式系统MCU体系结构和指令集不同:ARM、MIPS、PowerPC… 3 提高开发效率 编译器的主要部件 1 分析器: 将源代码转变为汇编代码 2 汇编器: 将汇编代码...

    为什么要使用交叉编译工具?

    1 嵌入式系统硬件资源限制:cpu主频、内存容量…
    2 嵌入式系统MCU体系结构和指令集不同:ARM、MIPS、PowerPC…
    3 提高开发效率

    编译器的主要部件

    1 分析器: 将源代码转变为汇编代码
    2 汇编器: 将汇编代码转变成机器码
    3 链接器: 将生成的机器码进行组装生成最后的可执行文件
    4 标准C库 : 核心的C函数被打包成库,被链接成可执行文件的一部分

    嵌入式软件的分层

    这里写图片描述

    嵌入式linux系统移植的要点

    搭建交叉开发环境
    bootloader的选择和移植
    kernel的配置 编译 移植和调试
    根文件系统的制作

    为什么要移植uboot

    每种不同的CPU体系结构都有不同的bootloader
    bootloader还依赖具体的嵌入式板级设备的配置,比如板卡的硬件地址的分配,外设芯片的类型等…

    uboot启动流程

    stage1 (直接在对应nanflash这样的内存上运行):

    • 硬件设备初始化
    • 为加载bootloader的stage2准备ram空间
    • 拷贝bootloader的stage2到ram空间
    • 设置好堆栈(为C语言提供运行环境)
    • 跳转到stage2的入口点
      stage2:

    • 初始化本阶段所要用到的硬件设备

    • 将内核映像和根文件系统映像从flash拷贝到ram中
    • 调用内核
      这里写图片描述
      ## 内存分布:arm32##
      这里写图片描述

    uboot目录结构

    board:uboot移植主要修改的地方
    common:实现uboot支持的命令行功能
    include:头文件定义,顶层目录所包含的configs目录与开发板配置 寄存器地址定义相关

    这里写图片描述
    平台相关目录:board include…
    平台五个目录:common net fs drivers
    工具和文档:tools doc

    展开全文
  • 硬件相关 纯软件(稳定) bus_drv_dev模型 bus drv链表 1.把device放入bus的dev链表 device_add /.match\ 1.放入drv链表 2.从dv链表取出一一比较(match) 2.从bus的drv链表取出每一个drv / \driver_...

    一、示意图

    App

    input.c

           /                  \
          /                    \
         /        分离           \
    

    button.c < ===== > evdev.c
    硬件相关 纯软件(稳定)


    bus_drv_dev模型 bus drv链表
    1.把device放入bus的dev链表 device_add /.match\ 1.放入drv链表 2.从dv链表取出一一比较(match)
    2.从bus的drv链表取出每一个drv / \driver_register
    用bus的match函数判断drv能否支持dev / \3.若支持,调用probe
    3.若可以支持,调用drv的probe device driver
    硬件相关 .probe比较稳定的代码
    .name


                 usb_bus_type
                /            \
    

    usb_new_device / \usb_register
    / \
    usb_interface usb_driver
    .id_table
    .probe


        platform_bus_type
      /       .match  \
     /                   \
    /             \
    

    platform_device platform_driver
    .probe


    二、led_dev.c

    include

    include

    include

    include

    include

    include

    include

    include

    include

    include

    include

    include

    include

    include

    include

    include

    include

    include

    include

    include

    include

    include

    include

    include

    include

    include

    include

    include

    include

    include

    include

    展开全文
  • 嵌入式Linux四个软件层次

    千次阅读 2011-10-26 14:10:32
    一个嵌入式Linux系统从软件的角度看通常可以分为四个层次:  1、 引导加载程序。包括固化在固件(firmware)中的boot代码(可选),和BootLoader两大部分。  2、 Linux内核。特定于嵌入式板子的定制内核以及...
    在专用的嵌入式板子运行GNU/Linux系统已经变得越来越流行。一个嵌入式Linux系统从软件的角度看通常可以分为四个层次:
      1、 引导加载程序。包括固化在固件(firmware)中的boot代码(可选),和BootLoader两大部分。
      2、 Linux内核。特定于嵌入式板子的定制内核以及内核的启动参数。
      3、 文件系统。包括根文件系统和建立于Flash内存设备之上文件系统。通常用ramdisk来作为rootfs。
      4、 用户应用程序。特定于用户的应用程序。有时在用户应用程序和内核层之间可能还会包括一个嵌入式图形用户界面。常用的嵌入式GUI有:MicroWindows和MiniGUI,QT、GTK。
      引导加载程序是系统加电后运行的第一段软件代码。PC机中的引导加载程序由BIOS(其本质就是一段固件程序)和位于硬盘MBR中的OS BootLoader(比如,LILO和GRUB等)一起组成。BIOS在完成硬件检测和资源分配后,将硬盘MBR中的BootLoader读到系统的RAM中,然后将控制权交给OS BootLoader。BootLoader的主要运行任务就是将内核映象从硬盘上读到 RAM 中,然后跳转到内核的入口点去运行,也即开始启动操作系统。
      而在嵌入式系统中,通常并没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。比如在一个基于ARM7TDMI core的嵌入式系统中,系统在上电或复位时通常都从地址0x00000000处开始执行,而在这个地址处安排的通常就是系统的BootLoader程序。
      简单地说,BootLoader就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。
      通常,BootLoader是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的BootLoader几乎是不可能的。尽管如此,我们仍然可以对BootLoader归纳出一些通用的概念来,以指导用户特定的BootLoader设计与实现。

    展开全文
  • 嵌入式框架-分层

    千次阅读 2020-04-18 11:12:31
    嵌入式架构有多重要? 要做到嵌入式应用的代码逻辑清晰,且避免重复的造轮子,没有好的应用架构怎么行? 如果没有好的架构,移植将会...嵌入式系统一般由软件和硬件两个部分组成,基中嵌入式处理器、存储器和外部设...
  • 在网络计算机客户端操作系统设计中,主要从嵌入式Linux分层的角度设计了网络计算机的操作系统,这种结构层次清晰,功能划分明确,而且容易实现;在基于Linux的RDP客户端研究中,主要分析了RDP协议,实现了RDP客户端的功能。...
  • 嵌入式Linux早已成为IT界家喻户晓的一个名字,使用Linux进行嵌入式产品开发有一...Busybox是构建嵌入式Linux根文件系统的软件,用它制作根文件系统简单、方便,而且设置灵活。  1 根文件  Linux要在一个分区上存放
  • 一个嵌入式Linux系统从软件的角度看通常可以分为四个层次: 引导加载程序。包括固化在固件(firmware)中的boot代码(可选),和BootLoader两大部分。 Linux内核。特定于嵌入式板子的定制内核以及内核的启动参数。 文件...
  • 嵌入式Linux常用GUI系统

    千次阅读 2019-07-16 22:13:39
    嵌入式Linux常用GUI系统 【整理】嵌入式Linux中常用的GUI(图形用户界面)系统 Embeddedcrifan7年前 (2012-08-31)1502浏览0评论 网上找了一堆资料,还是这里: Embedded Linux Graphics System 的解释是,最新...
  • 一、面向对象·上下分层·左右分离思想 面向对象 字符设备驱动程序抽象出一个 file_operations 结构体; 我们写的程序针对硬件部分抽象出 led_operations 结构体。 上下分层, 比如我们前面写的 LED 驱动程序就分为 ...
  • 嵌入式Linux启动过程

    2021-02-26 10:59:48
    1.引 言 Linux 最初是由瑞典赫尔辛基大学的学生 Linus Torvalds在1991 年开发出来的,之后在 GNU的支持下,Linux 获得了...一个嵌入式 Linux 系统从软件角度看可以分为四个部分:引导加载程序(bootloader), Linux.
  • 嵌入式Linux操作系统越中文件系统作为操作系统的重要组成部分,用于控制对数据文件及设备的存取,提供对文件和目录的分层组织形式,数据缓冲以及对文件存取权限的控制。根文件系统一直是Linux系统不可或缺的组件,...
  • 嵌入式linux应用

    千次阅读 2006-10-03 14:33:00
    #############review embedded linux application############嵌入式linux应用:一、嵌入式综述,基本概念:1.GPL:连接了它的库就要一样GPL;LGPL:修改了,才要LGPL;总的来说,GPL在保护自由软件上更加严格些。2....
  • 嵌入式Linux早已成为IT界家喻户晓的一个名字,使用Linux进行嵌入式产品开发有一个很大的优势,就是开发资源丰富,且成本...busybox是构建嵌入式Linux根文件系统的软件,用它制作根文件系统简单、方便,而且设置灵活。
  • 嵌入式linux操作系统

    千次阅读 2021-02-03 14:43:22
    2. 怎么学习嵌入式Linux操作系统 本文假设您是零基础,以实用为主,用最快的时间让你入门;后面也会附上想深入学习时可以参考的资料。 在实际工作中,我们从事的是“操作系统”周边的开发,并不会太深入学习、修改...
  • 在正规的项目开发中,项目往往是并行开发的,也就是说硬件设计、底层软件设计、应用软件设计等是同步进行的。比如说在开发板上调试模块驱动,在其他平台上调试应用程序再移植到目前这个平台等。嵌入式专...
  • 中标麒麟linux笔试题学习篇二 V0.0.1.20210712 项目简介 朋友参加中标麒麟面试白嫖试卷,仅供研究,涉及侵权请联系作者删除 下面内容并非答案,仅仅是自我学习得到的结果,如果有错误麻烦请指正,交流使我们共同...
  • 嵌入式linux IIC驱动

    2020-02-18 10:26:29
    1. Linux IIC驱动框架 Linux驱动和设备隔离,驱动分层,IIC驱动框架分为两部分 - IIC 总线驱动,也就是SOC的IIC控制器驱动,也就适配器驱动 - IIC 设备驱动,指具体的IIC设备驱动 2. ...
  • 嵌入式Linux C编程入门(第2版) PPT

    热门讨论 2011-03-11 20:48:34
    第2章 嵌入式linux c语言开发工具 32 2.1 嵌入式linux下c语言概述 32 2.1.1 c语言简史 33 2.1.2 c语言特点 33 2.1.3 嵌入式linux c语言编程环境 34 2.2 嵌入式linux编辑器vi的使用 35 2.2.1 vi的...
  • 嵌入式Linux开发简介

    2008-07-30 15:30:00
    嵌入式Linux开发简介 本文关键词: 开发 Linux python Linux 正在嵌入式开发领域稳步发展。因为 Linux 使用 GPL(请参阅本文后面的参考资料),所以任何对将 Linux 定制于 PDA、掌上机或者可佩带设备感兴趣的人都...
  • 构造嵌入式Linux

    2008-02-18 23:12:00
    Linux自身具备一整套工具链,容易自行建立嵌入式系统的开发环境和交叉运行环境,并且可以跨越嵌入式系统开发中的仿真工具(ICE)的障碍。内核的完全开放使人们可以自己设计和开发出真正的硬实时系统,软实时系统在...
  • 以下内容是介绍了一些嵌入式linux编程所涵盖的知识点,归纳了C语言,系统编程,网络编程,shell编程以及sqlite3数据等知识点。 有些知识点可能没有归纳到,具体详细的知识点内容需要逐步学习。 一:Linux C语言 1. ...
  • 我们在学习I2C、USB、SD驱动时,大家有没有发现一个共性,就是在驱动开发时,每个驱动都分层三部分,由上到下分别是: 1、XXX 设备驱动 2、XXX 核心层 3、XXX 主机控制器驱动   而需要我们编写的主要是...
  • input.c为核心层,其下有左边的硬件设备相关,和右边的软件handler相关处理函数。 二、platform总线驱动框架分析 1.参考:Gpio_keys.c (drivers\input\keyboard) 2.Bus-drv-dev模型:  Bus结构体;drv结构体;...
  • 本系统主要完成野外环境下时间间隔测量和瞬态数据采集的功能,系统内各模块均选用三星公司的S3C2440芯片为处理器,操作系统使用嵌入式Linux。模块间通信的主要任务为控制命令的下发与应答、工作状态和采集数据的上报...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,879
精华内容 2,351
关键字:

嵌入式linux软件分层

linux 订阅