Linux的启动流程、移植到开发板

news2024/11/25 8:42:54

1、linux驱动开发与裸机开发的区别

   Linux系统驱动和裸机驱动的主要区别在于运行时的环境和依赖。Linux系统驱动依赖于Linux内核提供的API和服务,而裸机驱动则是在没有操作系统支持的情况下直接与硬件交互。因此,两者的开发和调试方法也有很大差异。

2、驱动基础

2440里的IRAM ,ubuntu与ARM之间通过net(网络)连接

页表:记录虚拟地址与物理地址之间的关系。

norflash接在0地址,程序放在 norflash,上电后pc指向0地址,程序刚好可以运行。(程序放在nandflash就不能运行,pc没有指向)

要想访问nandflash,需要专用程序/控制逻辑。

内存:掉电数据丢失

flash:掉电不丢失 

norflash和nandflash 

我们开发板上的nandflash大小256M,norflash2M

norflash: 可线性访问,和内存的访问方式相同---有专用的数据、地址、控制总线

nandflash: 不可线性访问,需要有程序配合访问

 内核的任务

加载完后先启动init进程(内核里的进程),init退化到应用层,init再创建其他进程(shell nfs等)

 跟文件系统

bootloader:

bootloader放在nandflash里时:系统上电后,会自动搬移nandflash前4KB的程序到IRAM中,将0地址映射到0x40000000(IRAM的地址)地址处,bootloader在前4KB代码中初始化 好内存,并将自己剩余的部分搬移到内存中运行。

在norflash里时: 系统上电后,PC默认指向0地址处(norflash被连接到0地址处),直接运行norflash中的程序。

kernel:
内核在nandflash时: bootloader 启动最后阶段将 nandflash 中的内核搬移到内存的 0x30008000 地址处,启动 0x30008000 地址处的内核
内核在ubuntu时 bootloader 通过 tftp 服务将 ubuntu 上的内核下载到内存的 0x30008000 地址处,启动 0x30008000 地址处的内核

rootfs:

nandflash: 直接挂载 nandflash mtdblock3 分区(nandflash的分区)上的根文件系统
ubuntu: 通过 nfs 服务挂载 ubuntu 上的根文件系统

移植方法

1、使用sd卡,运行nandflash里的程序,文件都在nandflash里,上图右

2 、见第5点,bootloader在norflash里,内核文件、根系统文件在ubunt,上图左(上述的绿色组合)

方法2调试方便、数据不在开发板上,在虚拟机上

3、bootloader程序的作用 

bootloader 程序
初始化 CPU( 工作模式 )
初始化堆栈
初始化异常向量表
初始化时钟
初始化内存
关看门狗
Cache
MMU
初始化相关的硬件设备 ( 调试串口、网口、 led)
集成相关的通信协议
搬移内核到内存
向内核传参 -- 根文件系统位置,调试端口
Linux 启动过程:
1. 先启动 bootloader —一段裸机程序,为内核启动准备环境
2. 启动内核 --- 操作系统
3. 加载 ( 挂载 ) 根文件系统
引导内核启动
------CPU 的控制权彻底移交给内核, bootloader 不再
控制 CPU

4、uboot命令:

reset 重启uboot
help/? 帮助
setenv key value 设置环境变量
setenv key 删除环境变量
saveenv 保存环境变量(保存在nand)

 保存的位置在

5、Linux启动过程:

1. 先启动 bootloader —一段裸机程序,为内核启动准备环境
2. 启动内核 --- 操作系统
3. 加载 ( 挂载 ) 根文件系统
具体步骤:
1. norflash 中下载 uboot.bin
通过J-link下载
2. 安装 tftp 服务,并拷贝一个 uImage tftp 服务目录下
3. 安装 nfs 服务,并将 rootfs 拷贝到 nfs 服务目录下 ( 拷贝压缩包,在该目录下解压 )
sudo tar -xvf rootfs.tar.gz

4.ping ip ,测试开发板与虚拟机是否链接成功

5.修改环境变量中的服务器ip,改为虚拟机的ip

6.从虚拟机的里下载内核,下载命令: tftp 0x30008000 uImage    

下载到地址0x30008000处

7.挂载根文件系统:设置环境变量

命令: setenv bootargs root=/dev/nfs nfsroot=192.168.1.200:/home/linux/nfs/rootfs ip=192.168.1.99 console=ttySAC0,115200 init=/linuxrc te
(前:虚拟机ip,后:开发板ip(随便设置)) n
v配   
配置好后要保存saveenv
bootargs root=/dev/nfs nfsroot=192.168.1.3:/home/linux/nfs/rootfs ip=192.168.1.99 console=ttySAC0,115200 init=/linuxrc

 8.启动内核

命令:bootm 0x30008000

启动 0x30008000 地址处的内核 ( 会向内核传参 )

9.遇到的问题

nfs版本不一样

解决方法: setenv bootargs root=/dev/nfs nfsroot=192.168.1.3:/home/linux/nfs/rootfs,nfsvers=3 ip=192.168.1.99 console=ttySAC0,115200 init=/linuxrc

对于:bootargs=console=ttySAC0 root=/dev/mtdblock3;

bootargs=console=ttySAC0向内核传参,ttySAC0是s3c2440的串口

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

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

相关文章

【Qt】控件概述(7)—— 布局管理器

布局管理器 1. 布局管理器2. QVBoxLayout——垂直布局3. QHBoxLayout——水平布局4. QGridLayout——网格布局5. QFormLayout——表单布局6. QSpacer 1. 布局管理器 在我们之前值ui界面进行拖拽设置控件时,都是通过手动的控制控件的位置的。同时每个控件的位置都是…

Spring Boot新闻推荐系统:用户体验优化

3系统分析 3.1可行性分析 通过对本新闻推荐系统实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本新闻推荐系统采用JAVA作为开发语言,Spring Boot框…

STM32F407寄存器操作(DMA+SPI)

1.前言 前面看B站中有些小伙伴吐槽F4的SPIDMA没有硬件可控的CS引脚,那么今天我就来攻破这个问题 我这边暂时没有SPI的从机芯片,并且接收的过程与发送的过程类似,所以这里我就以发送的过程为例了。 2.理论 手册上给出了如下的描述 我们关注…

Graphviz是一个开源的图形可视化软件

官网没有给出代码示例,所以需要自己琢磨, 这里最底下给了一些简单的, 确实可以出很好看的图片 Graphviz介绍 Graphviz是一个开源的图形可视化软件,主要用于绘制各种类型的图表,如流程图、结构图、网络拓扑图等。它通…

【黑马点评】5 Redisson分布式锁

【黑马点评】5 Redisson分布式锁 5 分布式锁-redisson5.1 分布式锁-redission功能介绍5.2 分布式锁-Redission快速入门5.3 分布式锁-redission可重入锁原理5.4 分布式锁-redission锁重试和WatchDog机制5.5 分布式锁-redission锁的MutiLock原理5.6 总结 黑马点评跟做笔记之 5 Re…

如何使用ssm实现学生工作管理系统

TOC ssm794学生工作管理系统jsp 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化,规范化管理。…

Java爬虫技术:解锁1688商品搜索的新维度

Java爬虫技术简介 Java爬虫技术是指使用Java语言编写的程序,模拟浏览器行为,自动化地从互联网上获取信息。随着技术的发展,Java爬虫技术已经非常成熟,有多种框架和库可以使用,如Jsoup、HttpClient、WebMagic等。 1688…

LSTM-Transformer时间序列预测(单输入单预测)——基于Pytorch框架

1 介绍 在本篇文章中,将介绍如何使用Transformer和LSTM模型进行时间序列预测。这两种模型分别擅长处理序列数据和捕捉时间序列中的长短期依赖关系。我们将结合这两种模型的优势,构建一个强大的预测模型。单输入单输出预测,适合风电预测&…

与C++类和对象的宿命(下)

本文 1.取地址运算符重载const成员函数取地址成员函数的重载 2. 再探构造函数3. 类型转换1. 隐式类型转换注意事项: 2. 显式类型转换2.1 static_cast2.2 dynamic_cast2.3 const_cast2.4 reinterpret_cast 3. C风格类型转换4. 类型转换操作符5. 注意事项6. 总结 4.st…

MySQL 绪论

数据库相关概念 数据库(DB):存储数据的仓库数据库管理系统(DBMS):操纵和管理数据库的大型软件SQL:操纵关系型数据库的编程语言,定义了一套操作关系型数据库的统一标准主流的关系型数…

域渗透之: 域渗透环境搭建详解基于VMware

域控环境介绍 在域架构中,最核心的就是域控主机,域控主机分为三种: 普通域控额外域控只读域控 域控环境相关知识点介绍 创建域环境首先就是要创建域控主机。域控主机创建完成以后,需要把所有的计算机拉入域中,这样就形成了域控…

权威认证:中国信通院表彰上海斯歌信创成就!

颁奖现场:左二为上海斯歌业务副总裁陈娅香 2024年9月24日-25日,由中国通信标准化协会主办、中国信息通信研究院(简称“中国信通院”)承办、中国通信企业协会支持的“2024数字化转型发展大会”在北京召开。本届大会以“拥抱数智化无…

Network - Telnet协议

Telnet 是一种网络协议,允许用户使用基于文本的界面通过网络与远程设备通信。它在早期的网络应用中被广泛用于远程管理和故障诊断,使用户能够连接到远程机器和服务,通常是通过 TCP/IP 网络。 Telnet is a network protocol that allows a use…

Python使用nuitka进行打包简易教程(终极教程以后只用它打包了)

目录 专栏导读库的介绍(优点)使用nuitka --help可查看所有命令库的安装1、虚拟环境安装2、在打包时候缺少某些组件,会提示你是否安装,输入是(第3步有截图)个人喜好,可以加上 icon参数 3、开始打包4、打包完成查看大小总结 专栏导读 &#x1f…

Linux TFTP服务器搭建

话得多说 先水一波字 TFTP(Trivial File Transfer Protocol)是一种简单的文件传输协议。它用于在计算机网络中传输文件,特别适用于在网络设备(如开发板和Linux系统下)代码调试等操作。TFTP使用UDP(User Da…

春季台球行业招商和宣传大会,2025郑州台球展会3月举办

3月招商季,壹肆柒2025郑州台球展助力企业开拓全国台球消费市场; 2025中国(郑州)国际台球产业博览会(壹肆柒台球展) The 2025 China (Zhengzhou) International Billiards Industry Expo 开展时间&#xf…

[OS] 再探 kernel_threads-1

Linux内核线程(kernel threads)是运行在内核空间的线程,它们不拥有独立的地址空间,因此不能访问用户空间,但可以访问内核空间的数据结构。内核线程通常用于执行一些需要并行处理的任务,例如文件系统的任务、…

升维定位在开源AI智能名片2+1链动模式S2B2C商城小程序中的应用与价值

摘要:本文探讨了升维定位理论在开源AI智能名片21链动模式S2B2C商城小程序中的应用。阐述了升维定位对于创新型产品和创业阶段企业的适用性,分析开源AI智能名片21链动模式S2B2C商城小程序如何利用升维定位创造新的需求市场、成为新市场领导者,…

【Linux】自主shell编写

如果学习了常见的Linux命令,exec*函数,环境变量,那你就可以尝试一下写一个简单的shell; 下面跟着我的步骤来吧!!🤩🤩 输入命令行 既然要写一个shell,我们第一步先把这个输入命令行…

定制化的新生代 Layer1 代币经济学

原文标题:《Next-Gen Layer 1 Tokenomics: Three Pillars for the Token Flywheel》 撰文:Eren,Four Pillars 编译:Tia,Techub News Layer1 代币经济学的转变 最近获得大量关注和大量投资的项目(如 Berac…