当前位置: 首页 > news >正文

权威的营销单页网站中国做网站的网站

权威的营销单页网站,中国做网站的网站,o2o系统,关于征求网站建设的意见1、Linux系统启动与U-Boot 所谓移植就是把程序代码从一种运行环境转移到另一种运行环境。对于内核移植来说#xff0c;主要是从一种硬件平台转移到另一种硬件平台上运行。 体系结构级别的移植是指在不同体系结构平台上Linux内核的移植#xff0c;例如#xff0c;在ARM、MI…1、Linux系统启动与U-Boot 所谓移植就是把程序代码从一种运行环境转移到另一种运行环境。对于内核移植来说主要是从一种硬件平台转移到另一种硬件平台上运行。 体系结构级别的移植是指在不同体系结构平台上Linux内核的移植例如在ARM、MIPS、PPC等不同体系结构上分别都要对每个体系结构进行特定的移植工作。一个新的体系结构出现就需要进行这个层次上的移植。 SoC级别的移植是指在具体的SoC处理器平台上Linux内核的移植例如ARM i.MX6Dual处理器要进行SoC特定的移植工作主要包括处理器相关的内核修改、集成外设驱动。 主板级别的移植是指在具体的目标主板上Linux内核的移植例如在i.MX6DualFS2410目标板上需要进行主板特定的移植工作主要包括特定目标板系统启动与主板扩展外设相关的外设驱动等。 基于同一款处理器的不同嵌入式设备并不是所有的外部设备都相同不同的开发板可以使用不同的SDRAM、Flash、以太网接口芯片等。这就需要根据硬件修改或者开发驱动程序。 一个最基本的Linux操作系统应该包括引导程序、内核与根文件系统三部分。因此需要移植一个Linux系统的话那么需要以下4个步骤 搭建交叉开发环境 BootLoader的选择和移植 kernel的配置、编译、和移植 根文件系统的制作。 1BootLoader简介 引导加载程序Boot Loader就是在操作系统内核运行之前运行的一段小程序。通过这段小程序我们可以初始化硬件设备、建立内存空间的映射图从而将系统的软硬件环境带到一个合适的状态以便为最终调用操作系统内核准备好正确的环境。 如下图所示   为什么系统移植之前要先移植BootLoader BootLoader的任务是引导操作系统所谓初始化CPU运行环境引导操作系统。就是启动内核让内核运行就是把内核加载到内存RAM中去运行。 是谁把CPU运行环境初始化的 是谁把内核搬到内存中去运行 SRAM只要系统上电就可以运行而SDRAM需要软件进行初始化才能运行那么内存是由谁来初始化的呢2Bootloader的执行过程 uboot 启动流程详细分析 初始化SDRAM 初始化串口 检测处理器类型 设置Linux启动参数 调用Linux内核映像。 3BootLoader的分类 很多人说BootLoader就是U-Boot这种说法是错误的确切来说是U-Boot是BootLoader的一种。u-boot和bootloader到底有什么区别。 如下图所示。   可以知道如果使用开发板board/board_name就先执行“make board_name_config”命令进行配置然后执行“make all”, 就可以生成如下3个文件 u-boot.bin:二进制可执行文件它就是可以直接烧入eMMC中的文件。 u-boot: ELF格式的可执行文件。 u-boot.srec: 原摩托罗拉格式的可执行文件。 对于imx6dlsabresd开发板可以根据开发板的型号选择执行“make imx6dlsabresd_defconfig”、“make进行编译。 编译后生成的u-boot.imx镜像可以烧入SD卡中执行具体命令如下 sudo dd ifu-boot.imx of/dev/sdb bs512 seek2 其中sdb代表SD卡在系统中对应的设备。 4u-boot配置过程 在配置之前为了使编译后的u-boot在开发板上运行首先需要安装交叉编译链。并使用如下命令配置环境变量 source /opt/fsl-imx-fb/4.14-sumo/environment-setup-cortexa9hf-neon-poky- linux-gnueabi u-boot启动流程分析如下 第一阶段注明下每个步骤的作用 a -- 设置cpu工作模式为SVC模式。需要SVC权限对CPU的状态寄存器进行操作 b -- 关闭中断mmu,cache。需要直接物理地址访问 v -- 关看门狗 d -- 初始化内存串口。用于初始化基本的存储空间与通信接口用于启动信息交互 e -- 设置栈。用于系统启动临时数据交换和初始化栈指针 f -- 代码自搬移。用于拷贝系统启动代码 g -- 清bss h -- 跳c 第二阶段 a -- 初始化外设进入超循环 b -- 超循环处理用户命令 函数前期执行流程如下 1_startarch/arm/lib/vector.S               b     reset 2resetarch/arm/cpu/$CPU/start.S bl    cpu_init_cp15               bl    cpu_init_crit               bl    _main 3_mainarch\arm\lib\crt0.S board_init_f(common\Board_f.c               b     relocate_code               ldr   lr, board_init_rcommon/Board_r.c 4main_loop 5启动内核 main_loop-autoboot_command-run_command_list-cli_simple_run_ command_list-cli_simple_run_command-cmd_process-find_cmd/cmd_call(result(cmdtp-cmd)(cmdtp, flag, argc, argv)) uboot的最终目的是引导内核在此之前uboot需要完成一系列初始化操作包括设置时钟、初始化DDR、Flash、串口、网卡等等。 这时uboot有两条路走 1通过按键触发uboot进入命令行模式等待处理命令。 2引导内核2、Linux系统裁剪与移植 内核编译相关文件主要包括顶层Makefile与子目录下的Makefile、各级目录Kconfig文件。 a--在内核配置之前先使用make mrproper命令清除以前的内核。 b--详细配置 make menuconfig c--编译 make zImage ---生成内核镜像  /arch/arm/boot/zImage make dtbs ---生成设备树文件  /arch/arm/boot/dts/imx6dl-sabresd.dtb make modules ---把配置值选成M的代码编译生成模块文件。.ko)  放在对应的源码目录下。 可以看出内核编译主要包括两部分一部分是内核配置另一部分是内核编译。如下图所示。   内核的Kconfig分析 a -- 我们解压内核后需要先修改内核顶层目录下的Makefile,配置好交叉编译工具 b -- 然后导入默认配置使用make imx_v7_defconfig 或者 cp  arch/arm/configs/imx_v7_deconfig  .config c -- 配置内核 如下图所示。 内核中的哪些文件将被编译它们是怎样被编译的它们连接时的顺序如何确定哪个文件在最前面哪些文件或函数先执行这些都是通过Makefile来管理的。 从最简单的角度来总结Makefile的作用有以下3点 1-- 决定编译哪些文件 2-- 怎样编译这些文件 3-- 怎样连接这些文件最重要的是它们的顺序如何   1顶层Makefile 决定内核根目录下哪些子目录将被编进内核 2arch/$(ARCH)/Makefile 决定arch/$(ARCH)目录下哪些文件、哪些目录将被编进内核 3各级子目录下的Makefile决定所在目录下哪些文件将被编进内核哪些文件将被编程模块即驱动程序进入哪些子目录继续调用它们的Makefile。 与移植U-Boot的过程相似在移植Linux之前先了解它的启动过程。 Linux 的过程可以分为两部分架构/开发板相关的引导过程、后续的通用启动过程。对于uImage、zImage 它们首先进行自解压得到vmlinux 然后执行 vmlinux 开始“正常的”启动流程。 引导阶段通常使用汇编语言编写它首先检查内核是否支持当前架构的处理器然后检查是否支持当前开发板。 通过检查后就为调用下一阶段的start_kernel函数作准备了。 这主要分如下两个步骤 1 连接内核时使用的虚拟地址所以要设置页表、使能MMU 2调用C 函数 start_kernel 之前的常规工作包括复制数据段、清除BSS段、调用start_kernel 函数。 第二阶段的关键代码主要使用C语言编写。 它进行内核初始化的全部工作最后调用 rest_init 函数启动init 过程创建系统第一个进程init 进程。在第二阶段仍有部分架构/开发板相关的代码比如重新设置页表、设置系统时钟、初始化串口等。 内核自解压阶段 Linux内核有两种映像一种是非压缩内核叫Image另一种是它的压缩版本叫zImage。根据内核映像的不同Linux内核的启动在开始阶段也有所不同。 zImage是Image经过压缩形成的所以它的大小比Image小。但为了能使用zImage必须在它的开头加上解压缩的代码将zImage解压缩之后才能执行因此它的执行速度比Image要慢。 但考虑到嵌入式系统的存储空容量一般比较小采用zImage可以占用较少的存储空间因此牺牲一点性能上的代价也是值得的。所以一般的嵌入式系统均采用压缩内核的方式。 内核自解压阶段依次完成以下工作开启MMU和Cache调用decompress_kernel()解压内核最后通过调用call_kernel()进入非压缩内核Image的启动。 内核引导阶段 内核引导阶段是内核启动第一阶段该部分代码实现在arch/arm/kernel的 head.S中该文件中的汇编代码通过查找处理器内核类型和机器码类型调用相应的初始化函数再建 立页表最后跳转到start_kernel()函数开始内核的初始化工作。如下图所示   内核初始化阶段 Linux内核启动的第二阶段从start_kernel()函数开始。start_kernel()是所有Linux平台进入系统内核初始化后的入口函数它主要完成剩余的与硬件平台相关的初始化工作在进行一系列与内核相关的初始化后调用第一个用户进程-init进程并等待用户进程的执行这样整个Linux内核便启动完毕。   BusyBox初始化阶段 除了基本的命令之外BusyBox还支持init功能如同其它的init一样busybox的init也是完成系统的初始化工作关机前的工作等等。 BusyBox的init进程会依次进行以下工作 为init设置信号处理过程 初始化控制台 分析 inittab文件/etc/inittab 执行系统初始化脚本缺省情况下会使用/etc/init.d/rcS 执行所有导致init暂停的inittab命令动作类型wait 执行所有仅执行一次的inittab动作类型once。 3、Linux根文件系统移植 1文件系统与根文件系统 根可以理解为基础的意思。根文件系统是一种最基础的文件系统。 Linux系统也可以将磁盘或Flash等存储设备划分为若干个分区在不同的分区存放不同类型的文件在某个分区存放u-boot的可执行文件在某个分区存放内核映像文件在另一分区存放根文件系统映像文件等。 Linux也需要在一个分区上存放系统启动的必要文件比如内核启动运行后的第一个程序init进程、用于挂接文件系统的脚本、给用户提供操作界面的shell程序应用程序所要依赖的库等这些必要的基本文件的集合称为根文件系统一般也叫做rootfs。 Linux系统启动后首先会挂载这个分区这称为挂载mount根文件系统。其他分区上的所有目录、文件的集合称为文件系统。 为什么需要根文件系统 1init进程的应用程序在根文件系统上 2根文件系统提供了根目录/ 3内核启动后的应用层配置(etc目录)在根文件系统上。可以认为发行版内核rootfs。 4shell命令程序在根文件系统上。譬如ls、cd等命令。 因此一套Linux体系只有内核本身是不能工作的必须要rootfs上的etc目录下的配置文件、/bin与/sbin等目录下的shell命令还有/lib目录下的库文件等相配合才能工作。 2根文件系统概述 Linux中的根文件系统更像是一个文件夹或者叫做目录(特殊的文件夹)在这个目录里面会有很多的子目录。 根目录下和子目录中会有很多的文件这些文件是Linux运行所必须的比如库、常用的软件和命令、设备文件、配置文件等等。 根文件系统和Linux内核是分开的单独的Linux内核是没法正常工作的必须要搭配根文件系统。 3根文件系统的结构 Linux的根文件系统是采用级层式的树状目录结构在此结构中的最上层是根目录“/”然后在此目录下再创建其他的目录。树的根结点为根目录root。   其中 1/root 系统管理员的主目录 2/bin 存放二进制可执行命令的目录 3/boot 存放的是启动Linux时使用的一些核心文件包括一些连接文件以及镜像文件。 4/dev 存放设备文件的目录 5/etc 存放系统管理和配置文件的目录 6/home 用户主目录 7/lib 存放动态链接共享库的目录 8/sbin存放系统管理员使用的管理程序的目录 9/mnt 系统提供这个目录是让用户临时挂载其他的文件系统 10/proc 虚拟文件系统 11/usr 最庞大的目录 12/var某些大文件的溢出区 13/tmp 公用的临时文件存储点 一般我们在Linux驱动开发的时候都是通过nfs挂载根文件系统的当产品最终上市开卖的时候才会将根文件系统烧写到EMMC或者NAND中。 1修改Makefile添加编译器 2配置busybox 3编译busybox 4向根文件系统添加lib库完成基本根文件系统 5创建其他文件夹 6完善根文件系统。 Linux系统挂载完根文件系统之后就会执行init程序创建init进程。执行过程大概如下图所示。
http://www.hyszgw.com/news/86325/

相关文章:

  • 文件传输协议登录网站合肥app建设
  • 成都网站建设技术支持长沙制作网站设计多少钱
  • 什么网站内链建设小程序定制公司哪里有
  • 成都网站建设服务商国内有类似wordpress
  • 青岛个人网站制作国外设计师wordpress主题
  • 做网站时背景音乐域名证书怎么申请
  • 网站建设不包括哪个阶段做电影网站需要用什么空间
  • 卫生局网站建设seo sem区别
  • 优化建站seo门户商标查询网站建设
  • 三门峡企业网站建设公司如何选择网站做站方向
  • 网站底部特效深圳外贸公司集中在哪
  • 简单制作网站的过程服装网站建设目标客户
  • 郑州网站设计费用网站建设佰金手指科杰三
  • 织梦网站模板免费haai商城网站建设公司排名
  • 全球网站排名查询网公司建站网站
  • 网站推广及seo方案成都市装修公司前十强
  • 怎么建造个人网站信息化建设好的企业网站有哪些
  • 网站域名申请怎么做甘肃县门户网站建设方案
  • 自学网站建设看哪本书有关网站建设的文章句子
  • 网站建设前台后台教程自己做网站地址
  • 各省住房和城乡建设厅网站做音乐的网站
  • 免费建设旅游网站theme one wordpress
  • 盗版小说网站怎么做wordpress 注册中文名
  • 容桂网站开发查询域名注册网站
  • 中国建设银行网站个人客户外包推广服务
  • 适合推广的网站wordpress 2016主题
  • 青岛网络建站网站推广forum wordpress
  • 设计师浏览网站如何做二级网站
  • 巴中微信网站建设网站信息 订阅如何做
  • 建网站怎么做雍鑫建设集团网站