S3C2440 ARM设备驱动(boot loader,kernel,rootfs)

news2024/11/15 22:46:19

一、开发板Linux启动需求

        1、bootloader

        为内核启动准备环境,并引导内核启动

        2、kernel(linux内核)

        操作系统的核心,(狭义上的操作系统)

        3、rootfs

        一堆有组织的文件

1. bootloader(一个裸机程序)

        初始化CPU(工作模式)

        初始化栈

        初始化异常向量表

        初始化时钟

        初始化内存

        关闭Cache

        关闭MMU

        关闭中断

        关闭看门狗

        初始化相关外设(串口、flash、网卡)

        集成相关的协议

        搬移内核到内存

        向内核传参(根文件系统类型、位置,终端,ip, 指定init进程)

        启动内核 --- CPU的控制权彻底移交给内核,bootloader不再控制CPU

2. kernel(一个复杂的程序)

        文件管理 ,内存管理 ,进程管理, 网络管理 ,设备管理

        启动到最后阶段时:加载(挂载)根文件系统

3. rootfs根文件系统(一堆文件的集合)

        系统命令

        服务和用户程序

         配置文件, 库, 普通文件(文本,图片,MP3)

二、启动过程

1. bootloader启动

        Norflash: norflash被接在0地址处,PC复位后默认为0,可以直接执行norflash中的程序(bootloader),bootloader搬移内核到内存,并启动内核

         Nandflash:系统上电后,会自动搬移nandflash中的前4KB代码到IRAM中,并将0地址映射到0x40000000(IRAM的首地址,PC实际指向0x40000000)

         bootloader必须在自己的前4KB代码中完成内存的初始化,并搬移自己剩余的部分到内存,运行自己剩余部分,搬移内核到内存,并启动内核 IRAM 4KB

2. 内核启动

        Nandflash:bootloader读取nandflash中的内核,写入到内存的0x30008000地址处,传递参数给内核,启动0x30008000地址处的内核

        Ubuntu: bootloader通过tftp服务下载内核到内存的0x30008000地址处,传递参数给内核,启动0x30008000地址处的内核---内核文件必须存在于 ubuntu的tftp服务目录下

3. rootfs挂载

        Nandflash:直接挂载nandflash中的根文件系统

        Ubuntu:通过nfs服务挂载到ubuntu的nfs服务目录

三、Linux启动准备工作

        1. 下载一个bootloader到norflash中(uboot.bin)

        U-boot下载

        链接好开发板(J-Link),利用J-Flash软件下载U-boot框架

        

        单机file,选择一个工程文件

                单机Target,connect链接开发板,F6擦除norflash中数据,并重新装载

        下载完成

        U-boot功能验证

        利用SecureCRTP软件验证,效果如下

        打开软件,选择链接端口

        

        开发板上电(复位)

        2. 拷贝一个内核到ubuntu的tftp服务目录下(ubuntu已安装tftp服务)

        tftp安装配置

        在linux系统下执行命令:sudo apt-get install tftp-hpa tftpd-hpa    

        tftp功能验证

   tftp 客户端启动

          tftp serverip(服务端ip地址,多为Linux本机地址)或tftp进去后输入serverip

下载服务器端文件到本地

          get filename (服务端相应目录下必须有该文件)

上传本地文件到服务器

        put filename  (本地对应目录下必须有该文件,并且tftp服务端配置文件TFTP_OPTIONS选项支持,)

        3. 拷贝rootfs到ubuntu的nfs服务目录下(ubuntu已安装nfs服务)

        nfs 挂载安装配置

        linux下执行以下命令

        sudo apt-get install nfs-kernel-server(服务器)

         sudo apt-get install nfs-common (客户端)

四、开发板Linux启动结果

        1、Ubantu网络配置

        1、查看虚拟机是否为桥接模式(不是则更改为桥接)

        2、修改网络连接网卡(不要桥接wifi,桥接主机网卡)

        2、printenv查看环境变量

        

        1、与服务端ip一致

        2、可以和开发板ip一致,也可以不一致,影响不大

        3、初始化linux

        4、网关IP和主机网关保持一致

        5、开发板ip,网段号需与服务端ip网段号保持一致

        6、子网掩码

        7、服务端ip

        3、检查连接情况

        ping一下服务端ip地址,U-boot的ping是单向的。

        4、下载uImage(内核文件)

        在U-boot下输入命令:tftp 0x30008000 uImage

        5、启动内核

        在U-boot下输入命令:bootm 0x30008000

        开发板linux操作系统启动成功

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

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

相关文章

【MM24】【水下目标分割】Dual_SAM

论文:https://arxiv.org/abs/2404.04996 代码:https://github.com/Drchip61/Dual_SAM 点评 这篇文章介绍的改进SAM,面向海洋生物的分割。但是海洋图像易受噪声影响,论文中仅是通过一个gamma变换减弱了这种影响。双主干网络的参数量并没有提及…

2.队列和队列集

队列的本质就是环形buff,加了互斥操作,加了阻塞-唤醒. 1.介绍一下环形BUFF 2.阻塞和唤醒 在我们队列中是有一个读list 链表 和 一个写list链表 他们就是用来保存 读 或者 写阻塞 的任务 假设我们 就绪链表中有A 和 B两个任务 他们正常情况下都是轮流运行, 这个时候 A 想读队…

IDEA中集成Git及Github

我的博客大纲 我的GIT学习大纲 1、IDEA中集成Git 1.1.设置IDEA忽略一些文件: a.为什么要忽略一些文件 1.在将项目推送之前,有一些文件是可以忽略的,忽略这些文件与实际功能无关,不参与服务器上部署运行,把他们忽略掉…

【DCL】Dual Contrastive Learning for General Face Forgery Detection

文章目录 Dual Contrastive Learning for General Face Forgery Detectionkey points:贡献方法数据视图生成对比学习架构实例间对比学习实例内对比学习总损失函数实验实验细节定量结果跨数据集评估跨操作评估消融实验可视化Dual Contrastive Learning for General Face Forgery…

HarmonyOS开发5.0【封装request泛型方法】axios

一 准备工作 1. 先开启一下虚拟机的权限 src/main/module.json5 打开module.json5在15~19行 进行配置网络权限 2. 在终端下载安装一下 ohpm install ohos/axios 复制 粘贴进去回车就行 3. 这样显示就是安装好了 如果导入不行就关了重新启动 二 创建一个ETS文件,…

后端开发刷题 | 矩阵的最小路径和

描述 给定一个 n * m 的矩阵 a,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,输出所有的路径中最小的路径和。 数据范围: 1≤n,m≤500,矩阵中任意值都满足 0≤ai,j…

Linux系统:cd命令

1、命令详解: cd命令用于改变当前工作目录的命令,切换到指定的路径,全称为change directory,若目录名称省略,则默认变换至使用者的 home 目录。 2、官方参数: 选项:-L 强制遵循符号链接-P 使用…

基于RFID技术的光交箱哑资源智能化管理方案

一、现状 (一)现状与挑战 在当前通信网络基础设施中,哑资源如光缆接头、跳线等在网络中占据着重要地位。然而,传统的哑资源管理方式存在诸多问题,一方面,管理主要依赖人工记录和定期巡检,效率…

每日OJ_牛客_合唱团(打家劫舍dp)

目录 牛客_合唱团(打家劫舍dp) 解析代码1 解析代码2 牛客_合唱团(打家劫舍dp) 合唱团__牛客网 有 n 个学生站成一排,每个学生有一个能力值,牛牛想从这 n 个学生中按照顺序选取 k 名学生,要求…

MongoDB高可用和分片集群知识

一、MongoDB实现高可用 1. MongoDB复制集(Replication Set) 在实际生产中,MongoDB要实现高可用,以免MongoDB单实例挂了,服务不可用。MongoDB实现高可用是以MongoDB复制集的形式实现,和集群部署概念相同,MongoDB复制集…

火柴人跑酷

运行图片: 这里面有三个boss,和各种元素属性列举一下: 元素作用 火 运用火元素将攻击抵消 水 和火元素一致 磁 自动吸取经验…

vscode设置vue标签不换行

1、打开 文件 --> 首选项 --> 设置 2、在设置里搜索 vetur.format,项较多,向下滑动找到 在 setting.json 中编辑 按钮 点进去 3、修改配置文件vetur.format.defaultFormatterOptions {"files.autoSave": "afterDelay","…

全网最适合入门的面向对象编程教程:47 Python函数方法与接口-回调函数Callback

全网最适合入门的面向对象编程教程:47 Python 函数方法与接口-回调函数 Callback 摘要: 回调函数是编程中一种非常常见的模式,用于将函数作为参数传递给其他函数或方法。这种模式在 Python 中广泛应用于事件处理、异步编程、函数式编程等场景…

cadence SPB17.4 - ORCAD - ERROR(ORCAP-1616): Reference is invalid for this part

文章目录 cadence SPB17.4 - ORCAD - ERROR(ORCAP-1616): Reference is invalid for this part概述笔记END cadence SPB17.4 - ORCAD - ERROR(ORCAP-1616): Reference is invalid for this part 概述 在抄GDLink on Board的原理图。 抄完之后进行原理图DRC, 有个元件报错。 …

C语言代码练习(第十八天)

今日练习: 48、猴子吃桃问题。猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第2天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时&…

digits Social Login插件 google OAuth 2.0登录 400 redirect_uri_mismatch错误解决

以下是Social Login插件google登录配置: 直接使用这个URI 会在登录时提示错误:400 redirect_uri_mismatch,此时需要点击错误详情把这个重定向URI设置到google中即可

Java:类和对象(2)

一 对象的构建和初始化 1.对象构建 (Object Construction) Student student1new Student("zhangsan",12,"123456"); Student student2new Student("lisi",10,"15236"); 2. 构造函数(Constructor) 构造函数的…

Android binder 机制驱动核心源码详解_binder_thread_read

binder 驱动中做的工作可以总结为以下几步: 准备数据,根据命令分发给具体的方法去处理找到目标进程的相关信息将数据一次拷贝到目标进程所映射的物理内存块记录待处理的任务,唤醒目标线程调用线程进入休眠目标进程直接拿到数据进行处理&…

maven安装依赖

这里以安装tomcat依赖为例 1, 访问maven公共仓库 2,搜索tomcat 3, 右侧点击Plugin 选择&#xff1a;Apache Tomcat Maven Plugin :: Tomcat 7.x 选择版本&#xff0c;这里我选择2.2 选择maven&#xff0c;将<dependency>中的内容copy到pom.xml中的<build>里面 …

webctf

熟悉robots.txt协议&#xff0c;可能存在一些敏感信息(sql在登录时候的万能密码a’ or true#)熟悉phps文件&#xff0c;phps文件就是 php 的源代码文件&#xff0c;通常用于提供给用户&#xff08;访问者&#xff09;查看 php 代码&#xff0c;因为用户无法直接通过 Web 浏览器…