内核驱动-如何在开发板启动操作系统

关于如何给开发板启动操作系统程序:
1.开发板上操作系统启动的步骤:
    1.启动引导程序bootloader,用来给操作系统内核启动准备环境
    2.启动操作系统内核
    3.挂载根文件系统
2.具体的步骤分为:
    1.引导程序bootloader只是一类的总称。实验中用的是uboot这个启动程序来作为开发板启动程序,我们需要利用jflash将uboot程序烧录到开发板的norflash中。在开发板一上电,pc程序计数器就会指向0地址,也就是bootloader程序,然后bootloader程序开始启动执行。bootloader的作用是为内核启动准备环境。
        具体的需要初始化的有:
        1.初始化cpu的工作模式
        2.初始化堆栈
        3.初始化时钟
        4.初始化看门狗
        5.初始化异常向量表
        6.初始化内存
        7.关闭cache
        8.关闭mmu
        9.初始化相关的硬件设备
        10.继承相关的通信协议
        11.搬移内核到内存
        12.向内核传参 ---根文件系统的位置
        13.引导内核启动。
    bootloader有两种启动方式:
        1.nandflash。bootloader程序在nandflash中的第0块位置,通过专用程序可以将nandflash中的bootloader程序的前4k放进cpu中的IRAM中,然后执行这前4k的程序,在这前4K的程序中初始化好内存,然后将bootloader剩下的程序加载进入内存继续执行。
        2.norflash.bootloader在norflash中的启动方式就比较简单(因为norflash和内存一样,可以利用地址总线和数据总线,控制总线来获得其中的数据)。当开发板一上电,cpu中的pc程序计数器就指向norflash的0地址单元(bootloader就存放在这个位置),然后开始执行bootloader程序。
    2.启动操作系统内核
    启动操作系统内核也分为两种方式:
        1.nandflash:nandflash的大小为256M,比起norflash的2M要大许多,所以可以直接将操作系统烧到nandflash中(nandflash和内存的结构不一样,CPU不能通过总线直接读写nandflash中数据)。这种启动操作系统的方式是bootloader程序将操作系统内核加载到内存中(在项目学习中是加载到0x30008000)。在·
            在nandflash中:
            第0块区域:bootloader
            第1块区域:引导内核启动时给内核程序传递的参数;环境变量
            第2块区域:操作系统内核
            第3块区域:根文件系统
        2.bootloader程序通过tftp服务将Ubuntu中下载好的内核下载到内存的指定位置(0x30008000)。在uboot中的指令为 :tftp 0x30008000 uImage。 tftp是一种简单文件传输协议,在项目中,Ubuntu作为服务器,配置好tftp的设置之后,将uImage放进tftpboot文件夹下。在开发板上,想要通过tftp获得Ubuntu中的内核,需要先与服务器的网络联通(可以使用ping命令查看是否与目的主机连接成功,如果能连接成功,但是却无法通过tftp下载,可以查看Ubuntu上tftfboot文件夹的权限是否更改,更改指令为 chmod  -r tftpboot 777)。连通之后,就可以用tftp 0x30008000 uImage来获得内核文件。
    3.挂载根文件系统
        1.nandflash:在nandflash的第3块中,存放着需要挂载的根文件系统,直接通过nandflash 挂载第三块中的根文件系统即可。
        2.nfs挂载根文件系统:可以在uboot中配置参数(在内核加载块结束的时候,会挂载根文件系统),
指令为: setenv bootargs root=/dev/nfs nfsroot=192.168.1.3:/home/linux/nfs/rootfs ip=192.168.1.xx console=ttySAC0,115200 init=/linuxrc
    在这个指令中:root:根文件系统的类型(在这里为nfs挂载类型)
         nfsroot:表示这个根文件系统的具体位置。
        IP:这里的IP是指在内核启动过程中开发板的ip地址。通常是自己设置,只要与自己的服务器主机处于同一网段之下就行。
        console:ttySAC0代表串口,115200代表串口通信的波特率。
        init:这个是内核启动结束后运行的程序。


在uboot启动程序中一些常用的指令:
reset:复位。pc从0位置开始重新执行。
print/printenv:查看环境变量。
help/?:查看帮助手册
setenv key value :设置环境变量
setenv key :删除环境变量
saveenv:保存更改到norflash中。
    注意:环境变量是保存在nandflash中,如果不保存的话,下一次上电从这里读取环境变量的时候,只会是上次保存后的结果。所以在每次修改环境变量之后,都需要执行一下这个指令。
tftp 0x30008000(内存地址) uImage(下载的文件):tftp指令是将想要下载的文件下载到指定的内存地址处。
    注意:这个操作在每次上电之后,都需要执行一次。因为是通过tftp从Ubuntu中将内核程序下载到内存中,内存是易丢失存储。在每一次重新上电之后都需要将内核下载到指定的内存地址处。

bootm 0x30008000(内存地址):bootm指令指专门用来启动内核程序的,它会传递给内核程序参数。
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1557932.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Leecode刷题之路第13天之罗马数字转整数

题目出处 13-罗马数字转整数-题目出处 题目描述 个人解法 思路: todo 代码示例:(Java) todo复杂度分析 todo 官方解法 13-罗马数字转整数-官方解法 方法1:模拟 思路: 代码示例:&#xff0…

ctf.bugku - game1

题目来源: game1 - Bugku CTF 访问页面,让玩游戏 得到100分,没拿到flag 查看页面源码, GET请求带有 score、IP、sign 三个参数,最后的flag 应该跟分数有关; 给了score一个99999分数, sign 为 …

dotnet7==windows ZIP方式安装和web demo和打包

下载ZIP Download .NET 7.0 (Linux, macOS, and Windows) 解压 创建项目 mkdir MyWebApp cd MyWebApp "C:\Users\90816\Downloads\dotnet-sdk-7.0.317-win-x64\dotnet.exe" new webapp -n MyWebApp 运行项目 "C:\Users\90816\Downloads\dotnet-sdk-7.0.317-…

同城O2O系统源码与跑腿配送平台的架构设计与开发方案详解

今天,笔者将与您一同深入探讨同城O2O系统的源码及跑腿配送平台的架构设计与开发方案,助力开发者和企业在这一领域的实践与探索。 一、O2O系统概述 在同城O2O模式中,用户可以通过手机应用或网页平台下单,而配送员则根据订单信息迅…

QT 优化登录框

作业 优化登录框: 当用户点击取消按钮,弹出问题对话框,询问是否要确定退出登录,并提供两个按钮,yes|No,如果用户点击的Yes,则关闭对话框,如果用户点击的No,则继续登录 …

信息安全——应急响应

应急响应部分 1、提交攻击者的IP地址 简单过一遍apache日志,less /var/log/apache2/access.log.1 很明显的可以发现大量的扫描流量,如下: 大量的并发连接,且访问资源均返回404,且UA不正常,从这里可以得…

【重学 MySQL】六十二、非空约束的使用

【重学 MySQL】六十二、非空约束的使用 定义目的关键字特点作用创建非空约束删除非空约束注意事项 在MySQL中,非空约束(NOT NULL Constraint)是一种用于确保表中某列不允许为空值的数据库约束。 定义 非空约束(NOT NULL Constra…

Prometheus + Grafana 监控 MySQL 数据库

文章目录 1、前置介绍2、搭建流程2.1、安装 Docker2.2、安装 MySQL2.3、安装 MySQL Exporter2.4、安装 Prometheus2.5、安装 Grafana 1、前置介绍 本次监控平台搭建,我使用2台阿里云服务器来完成本次的搭建部署操作,配置如下: 阿里云ECS1&am…

《CTF 特训营》:网络安全竞赛的进阶指南

在网络安全领域日益受到重视的今天,CTF(Capture The Flag)竞赛作为一种检验和提升网络安全技能的方式,受到了越来越多爱好者的关注。而《CTF 特训营》这本书,无疑是一本帮助读者深入了解 CTF 竞赛的优秀读物。 一、书籍…

基于LORA的一主多从监测系统_AHT20温湿度传感器

1)AHT20温湿度传感器 这个传感器,网上能找到的资料还是比较多的,我们使用的是HAL硬件i2c,相比于模拟i2c,我们不需要过于关注时序问题,我们只需要关心如何获取数据以及数据如何处理,下面以数据手…

探索Ultralytics YOLO11在视觉任务上的应用

前言 在人工智能持续发展的当下,有一点是确凿无疑的:模型正变得愈发优秀、快捷和智能。就在人们以为YOLO系列已登峰造极之时,Ultralytics推出了最新升级版——YOLO11。需要注意的是,这里不是YOLOv11,他们简化了命名方…

如何绘制短剧产业链图谱?短剧产业前景如何?

绘制短剧产业链图谱是一个涉及多个环节的复杂过程。我们首先需要确定产业链的主要环节,包括内容创作、制作、发行、宣传和观众。每个环节都由不同的参与者组成,如编剧、导演、演员、制作公司、版权销售商、在线平台、电视台、广告公司和消费者等&#xf…

51.哀家要长脑子了!

1.P1003 [NOIP2011 提高组] 铺地毯​​​​​​ 重复 模拟 要求覆盖在最上面的地毯编号,用四个数组abgk分别记录地毯起点的左下角横纵坐标,地毯的长度宽度,输入的坐标x y 当它满足大于等于左下角坐标 并且 小于等于 地毯左下角横纵坐标的时候…

Authentication Lab | IP Based Auth Bypass

关注这个靶场的其它相关笔记:Authentication Lab —— 靶场笔记合集-CSDN博客 0x01:IP Based Auth Bypass 前情提要 有些开发人员为了图方便,会给站点设置一个 IP 白名单,如果访问站点的用户的 IP 在白名单内,则允许访…

使用sponge+dtm快速搭建一个高性能的电商系统,秒杀抢购和订单架构的设计与实现

本文将展示如何使用 Sponge 框架快速创建一个简易版高性能电商系统,主要实现秒杀抢购和订单功能,并通过分布式事务管理器 DTM 来确保数据一致性。电商系统的架构图如下: 这是源码示例eshop,目录下包括了两个一样的代码示例&#x…

前端反接保护:实用方案解析与探讨

前端反接保护通常采用肖特基二极管方案或PMOS/NMOS方案,本文另外介绍一种理想二极管方案。 1、肖特基二极管方案 由于肖特基二极管具有正向导通电压,只能用于小电流场合,甚至于直接使用普通的整流二极管。比如1A电流,设D1的正向…

【含文档】基于Springboot+Android的环境保护生活App(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…

网络编程(15)——服务器如何主动退出

十五、day15 服务器主动退出一直是服务器设计必须考虑的一个方向,旨在能通过捕获信号使服务器安全退出。我们可以通过asio提供的信号机制绑定回调函数即可实现优雅退出。 之前服务器的主函数如下 #include "CSession.h" #include "CServer.h"…

电影《749局》路演 苗苗演绎超能力少女分享幕后故事

近日,国庆档科幻电影《749局》正在热映中,各主创们以及导演正在积极路演中,截至目前,主演苗苗已到过宁波、杭州、武汉、长沙等城市,在现场与观众热情互动,讲述电影拍摄背后的故事与感受。根据猫眼专业版数据…

Word转PDF的转换方法有哪些?这7个效率技巧,不知道就亏大了!

Word转PDF怎么转?我们在日常工作生活中,经常会用到word文档。如果是编写报告、做会议记录、制定文案等内容,一般都会选择创建word文档。但是如果需要发送给同事、客户或合作伙伴协作时,pdf格式会更加方便。 那么如何将word转为pdf…