一、开发板
1\ bootloader的工作原理及作用?

Linux 系统要启动就必须需要一个 bootloader 程序,也就说芯片上电以后先运行一段
bootloader程序。这段bootloader程序会先初始化DDR等外设,然后将Linux内核从flash(NAND,
NOR FLASH,SD,MMC 等)拷贝到 DDR 中,最后启动 Linux 内核。当然了,bootloader 的实
际工作要复杂的多,但是它最主要的工作就是启动 Linux 内核,bootloader 和 Linux 内核的关系
就跟 PC 上的 BIOS 和 Windows 的关系一样,bootloader 就相当于 BIOS。所以我们要先搞定
bootloader,有很多现成的 bootloader 软件可以使用,比如 U-Boot、vivi、RedBoot 等

2\ u-boot两个阶段的工作任务有哪些?

第一阶段为汇编阶段、第二阶段为C阶段
第一阶段在SRAM中、第二阶段在DRAM中
第一阶段注重SoC内部、第二阶段注重SoC外部Board内部

3\经常使用的u-boot命令有哪些?
uboot 是支持网络的,我们在移植 uboot 的时候一般都要调通网络功能,因为在移植 linux
kernel 的时候需要使用到 uboot 的网络功能做调试。uboot 支持大量的网络相关命令,比如 dhcp、
ping、nfs 和 tftpboot

4\如何编译u-boot并烧写到开发板?

MfgTool 工具是 NXP 提供的专门用于给 I.MX 系列 CPU 烧写系统的软件

二、内核
1、Linux内核组成模块有哪些?Linux版本号的作用?

进程调度模块、进程间通信模块、内存管理模块、文件系统模块、网络接口模块
Linux内核版本有两种:稳定版和开发版 ,Linux内核版本号由3组数字组成:
第一个组数字.第二组数字.第三组数字
第一个组数字:目前发布的内核主版本。
第二个组数字:偶数表示稳定版本;奇数表示开发中版本。
第三个组数字:错误修补的次数。

2、如何编译配置裁剪内核?
1 直接使用命令 make menuconfig,这样操作的话会配置很多该单板不需要的文件,使得配置后的内核十分臃肿,所以不可取。
2)在Linux内核中找到 ././arch/arm/configs/目录下查看与该单板相适应的配置文件,使用该配置文件即可,如此一来配置好的内核相对精简。
3)使用单板厂商的配置文件进行配置,先将给厂商的配置文件 cp 为 .config文件之后再进行配置。

3、Linux内核的启动流程?
1.Linux 内核入口 stext
2. __mmap_switched 函数 __mmap_switched 函数定义在文件 arch/arm/kernel/head-common.S 中
3.start_kernel 通过调用众多的子函数来完成 Linux 启动之前的一些初始化工作
4.rest_init 函数定义在文件 init/main.c 中
5.kernel_init 函数就是 init 进程具体做的工作,定义在文件 init/main.c 中,

三、
1、根文件系统的作用?

这是 Linux 移植的最后一步,根文件系统
构建好以后就意味着我们已经拥有了一个完整的、可以运行的最小系统。以后我们就在这个最
小系统上编写、测试 Linux 驱动,移植一些第三方组件,逐步的完善这个最小系统。最终得到
一个功能完善、驱动齐全、相对完善的操作系统。

根文件系统首先是内核启动时所 mount(挂载)的第一个文件系统,内核代码映像文件保存在
根文件系统中,而系统引导启动程序会在根文件系统挂载之后从中把一些基本的初始化脚本和
服务等加载到内存中去运行。

2、如何制作根文件系统?

编译 BusyBox 构建根文件系统
一般我们在 Linux 驱动开发的时候都是通过 nfs 挂载根文件系统的
3、nfs、ftp的作用?
nfs 命令
nfs(Network File System)网络文件系统,通过 nfs 可以在计算机之间通过网络来分享资源,
比如我们将 linux 镜像和设备树文件放到 Ubuntu 中,然后在 uboot 中使用 nfs 命令将 Ubuntu 中
的 linux 镜像和设备树下载到开发板的 DRAM 中。这样做的目的是为了方便调试 linux 镜像和
设备树,也就是网络调试,通过网络调试是 Linux 开发中最常用的调试方法。
我们一般使用 uboot 中的 nfs 命令将 Ubuntu 中的文件下载到开发板的 DRAM 中,在使用
之前需要开启 Ubuntu 主机的 NFS 服务,并且要新建一个 NFS 使用的目录,以后所有要通过
NFS 访问的文件都需要放到这个 NFS 目录中。

嵌入式底层驱动开发笔记1相关推荐

  1. 嵌入式入门学习笔记4:[转]什么是嵌入式底层驱动开发和嵌入式底层软件开发...

    我们知道嵌入式操作系统(Embedded System)是指以应用为中心.以计算机技术为基础,软件硬件可裁剪.适应应用系统对功能.可靠性.成本.体积.功耗严格要求的专用计算机系统.嵌入式开发分两种,一 ...

  2. 嵌入式Linux驱动开发笔记(未完待续。。。)

    零.嵌入式Linux驱动编程思想 1.面向对象(把一个事件抽象成一个结构体) 2.分层 3.分离 一.Git仓库用法 1.linu终端输入下面命令安装 git clone https://e.codi ...

  3. 迅为嵌入式linux驱动开发笔记(十一)—触摸屏驱动

    总结篇 这一小节内容是对之前学习的十节课进行总复习,综合性非常强,完成触摸屏驱动需要学会如下知识: 1.驱动开发原理 第一节 2.platform平台总线模型 第三节 3.设备树 第四节 4.gpio ...

  4. 迅为嵌入式linux驱动开发笔记(八)—内核定时器

    内核定时器 二. Linux 内核定时器基础知识 Linux 内 核 使 用 timer_list 结 构 体表示内核定时器 ,timer_list定义在文件 include/linux/timer. ...

  5. 【嵌入式Linux】嵌入式Linux驱动开发基础知识之LED驱动框架--面向对象、分层设计思想

    文章目录 前言 1.LED驱动程序框架 1.1.对于LED驱动,我们想要什么样的接口? 1.2.LED驱动要怎么写,才能支持多个板子?分层写 1.3.程序分析 驱动程序 应用程序 Makefile 1 ...

  6. 【嵌入式Linux】嵌入式Linux驱动开发基础知识之Pinctrl子系统和GPIO子系统的使用

    文章目录 前言 1.Pinctrl子系统 1.1.为什么有Pinctrl子系统 1.2.重要的概念 1.3.代码中怎么引用pinctrl 2.GPIO子系统 2.1.为什么有GPIO子系统 2.2.在 ...

  7. 【嵌入式Linux】嵌入式Linux驱动开发基础知识之按键驱动框架

    文章目录 前言 1.APP怎么读取按键值 1.1.查询方式 1.2.休眠-唤醒方式 1.3.poll方式 1.3.异步通知方式 1.5. 驱动程序提供能力,不提供策略 2.按键驱动程序框架--查询方式 ...

  8. 【嵌入式Linux】嵌入式Linux驱动开发基础知识之LED模板驱动程序的改造:设备树

    文章目录 前言 1.驱动的三种编写方法 2.怎么使用设备树写驱动程序 2.1.设备树节点要与platform_driver能匹配 2.2.修改platform_driver的源码 3.实验和调试技巧 ...

  9. 【嵌入式Linux】嵌入式Linux驱动开发基础知识之设备树模型

    文章目录 前言 1.设备树的作用 2.设备树的语法 2.1.设备树的逻辑图和dts文件.dtb文件 2.1.1.1Devicetree格式 1DTS文件的格式 node的格式 properties的格 ...

最新文章

  1. 新DNS木马可感染整个局域网内计算机
  2. Android UI开发第一篇——android的九宫格式实现
  3. leetcode 第2高的薪水 oracle_石斛内幕第2期:铁皮石斛价格是不是要这么高?
  4. python用法查询笔记_Python爬虫学习笔记(三)
  5. 哪些行业形势好?大数据帮你预测今年就业“风口”
  6. 学习ActiveMQ(一):安装与启动
  7. linux网卡顺序问题,linux网卡绑定及网卡顺序变更测试.docx
  8. ubuntu 是基于debian gnu/linux,在 Ubuntu 或其它 GNU/Linux 系统下安装 Debian
  9. 关于《构建之法》阅读笔记 的致歉博客
  10. [WP8.1UI控件编程]SemanticZoom控件实现分组列表
  11. Mac 安装 Java 反编译工具 JD-GUI
  12. oracle 数据库怎么启动,Oracle数据库:启动操作
  13. matlab 批量取消注释,MATLAB中多行注释以及取消的快捷键
  14. ET1100和ET1200的区别
  15. 2018,人生是一条蛇,它咬着自己的尾巴
  16. html5 网易公开课,麻省理工学院公开课:单变量微积分习题课
  17. python数据预处理 样本分布不均(过采样和欠采样)
  18. catgroup linux_linux中/etc/group文件详解
  19. c语言 计算子网掩码位数,子网数、主机数与子网掩码的关系
  20. 服务器游戏列表为空,游戏服务器列表为空

热门文章

  1. 虚拟内存,磁盘,光驱
  2. 背景大小比率css,css – 如何计算背景大小百分比?
  3. Canfestival 导入EDS,生成文件没有数据名。
  4. matlab编程直流电动机,直流电动机的MATLAB仿真.doc
  5. argmax函数_Python之Numpy库常用函数合集(附注释)
  6. 目标检测算法——垃圾分类数据集汇总(附下载链接)
  7. 长江后浪推前浪-南航华为通信俱乐部招新
  8. 数学建模 - 汽车行驶工况构建(2019年中国研究生数学建模竞赛D题)
  9. 亿级数据量系统数据库性能优化方案
  10. 修改远程计算机 时间,修改远程计算机系统时间