arm linux ntfs_Linux驱动02

2023-10-27

一、启动过程

上电 >uboot >加载linux内核 > 挂载根文件系统 > 执行应用程序

emmm....接下来会对uboot、linux内核、跟文件系统分析

二、uboot

1. 什么是uboot

uboot其实就是一个通用的引导程序——bootloader。

boot,完成硬件的初始化,启动硬件平台

loader,初始化硬件后,加载操作系统。

支持各种硬件,例如支持ARM、MIPS、X86、AVR32、RISC-V架构....

支持各种操作系统,例如支持WinCE、Linux内核、安卓操作系统....

2. uboot的作用 

1)第一阶段初始化,CPU的初始化,用汇编语言来编写,初始化cache、MMU、时钟、看门狗、DDR3、eMMC...

2)第二阶段初始化,板级的初始化,一般来说用C语言来编写,初始化串口、网卡、usb、lcd...................

3)提供了很多工具,进入uboot命令行,使用uboot的命令

4)加载操作系统

3. uboot的输出信息

u-Boot 2014.07 (Nov 23 2020 - 09:52:45)
 
PLL : [0] =  800000000, [1] =  800000000, [2] =  780000000, [3] =  800000000
(0) PLL1: CPU  FCLK =  800000000, HCLK = 200000000 (G0)
(7) PLL1: CPU  FCLK =  800000000, HCLK = 200000000 (G1)
(2) PLL3: MEM  FCLK =  800000000, DCLK = 800000000, BCLK = 400000000, PCLK = 200000000
(1) PLL0: BUS  BCLK =  400000000, PCLK = 200000000
(8) PLL0: CCI4 BCLK =  400000000, PCLK = 200000000
(3) PLL0: G3D  BCLK =  400000000
(4) PLL0: CODA BCLK =  400000000, PCLK = 200000000
(5) PLL0: DISP BCLK =  400000000, PCLK = 200000000
(6) PLL0: HDMI PCLK =  133333333
I2C:   ready
DRAM:  1 GiB
Heap = 0x44000000~0x46000000
Code = 0x43c00000~0x43c83e48
GLD  = 0x43bffeb8
GLBD = 0x43bffe68
SP   = 0x43bffe68,0x43bffe48(CURR)
PC   = 0x43c066f0
TAGS = 0x40000100
PAGE = 0x43c90000~0x43c9c000
MACH = [4330]   
VER  = 0      
BOARD= [GEC6818]    
MMC:   NXP DWMMC: 0, NXP DWMMC: 1, NXP DWMMC: 2
In:    serial
Out:   serial
Err:   serial
## DCDC_MODE(0x80): DCDC1[PFM], DCDC2[PFM], DCDC3[PFM], DCDC4[PWM], DCDC5[PWM]
## STATUS(0x00)   : 0xe4 0x10
## IRQ(0x48)      : 0x00 0x00 0x00 0x00 0x00
## CHG_TYPE       : ADP
## BAT_VOL        : 0mV
## BAT_CAP        : 100%
DONE: Logo bmp 300 by 300 (3bpp), len=270056
DRAW: 0x47000000 -> 0x46000000
DONE: Logo bmp 300 by 300 (3bpp), len=270056
DRAW: 0x47000000 -> 0x46000000
RGB: display.0
MIPI: display.0
DSIM_ESCMODE 1 : 0xc0
DSIM_STATUS : 0x10010f
MIPI clk:  420MHz
DSIM_ESCMODE 2 : 0x0
DSIM_STATUS : 0x10010f
## Skip BAT Animation.
## IRQ(0x48)   : 0x00 0x00 0x00 0x00 0x00
## chg_type    : ADP
## battery_vol : 0mV
## Booting
Card did not respond to voltage select!
Net:   GEC6818 mac init...
dwmac.c0060000
Hit any key to stop autoboot:  0
6818#
98008d70dc9771cd15473f2d54525c87.png 98008d70dc9771cd15473f2d54525c87.png

1)开发板信息

6818#bdinfo
arch_number = 0x000010EA //uboot针对具体硬件平台的ID,若跟linux内核ID不一致,不能启动内核
boot_params = 0x40000100 //uboot传递给内存启动参数的地址
DRAM bank   = 0x00000000 //内存通道0
-> start    = 0x40000000 //内存的地址地址
-> size     = 0x40000000 //内存的大小为1GB
eth0name    = dwmac.c0060000 //网卡的名字
ethaddr     = 00:e2:1c:ba:e8:60 //网卡的MAC地址信息
current eth = dwmac.c0060000 //当前所使用的网卡
ip_addr     = 192.168.114.5 //网卡的IP地址
baudrate    = 115200 bps //串口波特率
TLB addr    = 0x7FFF0000
relocaddr   = 0x46000000 //linux内核执行的地址
reloc off   = 0x00000000
irq_sp      = 0x7DF6BF00
sp start    = 0x43BFFE68

2)查看uboot的环境变量,只要是环境变量,都可以进行自定义

6818#printenv
baudrate=115200
bootargs=lcd=at070tn92 tp=gslx680-linux root=/dev/mmcblk0p2 rw rootfstype=ext4
bootcmd=ext4load mmc 2:1 0x48000000 uImage;bootm 0x48000000
bootdelay=5
bootfile=uImage
ethact=dwmac.c0060000
ethaddr=00:e2:1c:ba:e8:60
ethprime=RTL8211
fastboot=flash=mmc,2:GECuboot:2nd:0x200,0x78000;flash=mmc,2:2ndboot:2nd:0x200,0x4000;flash=mmc,2:bootloader:boot:0x8000,0x70000;flash=mmc,2:boot:ext4:0x00100000,0x04000000;flash=mmc,2:system:ext4:0x04100000,0x2F200000;flash=mmc,2:cache:ext4:0x33300000,0x1AC00000;flash=mmc,2:misc:emmc:0x4E000000,0x00800000;flash=mmc,2:recovery:emmc:0x4E900000,0x01600000;flash=mmc,2:userdata:ext4:0x50000000,0x0;
filesize=41ee8
gatewayip=192.168.114.1
ipaddr=192.168.114.5
netmask=255.255.255.0
qtcrc=-314709120
serverip=192.168.114.2
stderr=serial
stdin=serial
stdout=serial

关键的内容:

3)bootargs,启动参数

bootargs=lcd=at070tn92 tp=gslx680-linux root=/dev/mmcblk0p2 rw rootfstype=ext4
  • lcd=at070tn92,液晶屏的型号,7英寸的800*480的屏幕

  • tp=gslx680-linux,触摸屏的型号

  • root=/dev/mmcblk0p2,根文件系统在哪里,告诉内核去哪里挂载根文件系统。

  • mmcblk0p2

        mmcblk0,emmc电子硬盘0

         p2,partion2,emmc电子硬盘0的分区2

  • rw,该文件系统可以读,又可以写。

  • rootfstype=ext4,该文件系统类型为ext4(ext2/ext3,fat32,ntfs)。

4)启动命令

bootcmd=ext4load mmc 2:1 0x48000000 uImage;bootm 0x48000000

        以ext4文件系统去emmc第一个分区加载uImage linux内核镜像,加载到内存地址0x48000000;然后在该地址0x48000000启动linux内核。

        这条命令告诉uboot启动完之后,要干什么动作,通过bootcmd命令进行了解。

5)修改启动延时时间

#setenv bootdelay 3
#saveenv
Saving Environment to MMC...
Writing to MMC(2)... done

6)打印已经存在的环境变量

#printenv 
#pri

7)复位开发板

#reset

8)修改本地IP地址

#setenv ipaddr 192.168.11.6  
#setenv gatewayip 192.168.11.1  
#setenv netmask 255.255.255.0  
#saveenv

注意:当前的uboot不支持串口下载文件。

9)验证网络的通畅

#ping 电脑IP地址

#注意:开发板必须通过网线连接到电脑;电脑必须关闭防火墙;电脑不能主动ping开发板,因为uboot默认状态下是关闭了网卡。

ping成功:

6818# ping 192.168.11.3
Speed: 100, full duplex
Using dwmac.c0060000 device
host 192.168.11.3 is alive

 ping失败:

6818# ping 192.168.11.3
ping failed; host 192.168.11.3 is not alive
6818# ping 192.168.11.3

10)修改服务器IP地址

6818#setenv serverip 192.168.11.3
6818#saveenv

11)删除对应的环境变量,例如删除sap变量

#setenv sap 空格键
#saveenv

12)通过tftp下载文件到内存

使用该命令的时候,要注意网络的配置,关闭电脑的防火墙!

#tftp 内存地址 文件名
6818# tftp 0x40000000 led.bin
Speed: 100, full duplex
Using dwmac.c0060000 device
TFTP from server 192.168.11.3; our IP address is 192.168.11.6
Filename 'led.bin'.
Load address: 0x40000000
Loading: #
         261.7 KiB/s
done
Bytes transferred = 4572 (11dc hex)

13)执行某地址存在的二进制文件

#go 内存地址
#go 0x40000000
## Starting application at 0x40000000 ...

若想退出当前程序的执行,只能是复位或重新上电!

14)help,支持的命令

6818#help
0 - do nothing, unsuccessfully
1       - do nothing, successfully
? - alias for 'help'
base - print or set address offset
bdinfo - print Board Info structure
boot - boot default, i.e., run 'bootcmd'
bootd - boot default, i.e., run 'bootcmd'
bootm - boot application image from memory
bootp - boot image via network using BOOTP/TFTP protocol
cmd - cmd [command] options...
cmp - memory compare
...........................................

对应的中文翻译

0-不执行任何操作,未成功
1-无所事事,成功
? -'帮助'的别名
base基本-打印或设置地址偏移量
bdinfo-打印板信息结构
boot-引导默认值,即运行'bootcmd'
bootd-引导默认值,即运行'bootcmd'
bootm-从内存启动应用程序映像
bootp-使用BOOTP / TFTP协议通过网络引导映像
cmd-cmd [命令]选项...
cmp-内存比较
cp-内存副本
crc32-校验和计算
dhcp-使用DHCP / TFTP协议通过网络启动映像
drawbmp-地址'addr'上的darw bmpfile到帧缓冲区
env-环境处理命令
退出-退出脚本
ext4load-从Ext4文件系统加载二进制文件
ext4ls-列出目录中的文件(默认/)
ext4write-在根目录中创建文件
fastboot- fastboot-使用USB Fastboot协议
fatinfo-打印有关文件系统的信息
fatload-从DOS文件系统加载二进制文件
fatls-列出目录中的文件(默认/)
fatwrite-将文件写入dos文件系统
fdisk-mmc列出或创建ms-dos分区表(MAX TABLE 7)
go-在地址“ addr”处启动应用程序
goimage-在地址“ addr”处开始图像
帮助-打印命令说明/用法
i2c-I2C子系统
i2cmod-设置I2C模式
iminfo-打印应用程序映像的标题信息
loadbmp-使用命令或“ bootlog”环境加载bmpfile
loop-地址范围上的无限循环
md-内存显示
mdio-MDIO实用程序命令
mii-MII实用程序命令
mm-内存修改(自动递增地址)
MMC-MMC子系统
mmcinfo-显示MMC信息
mtest-简单的RAM读/写测试
MW-内存写入(填充)
nm-内存修改(常量地址)
ping-将ICMP ECHO_REQUEST发送到网络主机
pmic-PMIC
printenv-打印环境变量
reset-执行CPU的重置
run-在环境变量中运行命令
saveenv-将环境变量保存到持久性存储中
sdfuse-sdfuse-从SD卡的FAT分区读取图像并将其写入启动设备。
setenv-设置环境变量
showvar-打印本地Hushshell变量
source-从内存运行脚本
test-最小测试,如/ bin / sh
tftpboot-使用TFTP协议通过网络引导映像
udown-下载USB
update_mmc-更新mmc数据

f5176a0a76da47dd2d6283c1db1dd39d.png 

记录 点点滴滴的笔记 欢迎关注,共同学习

小浩笔记

c22b0af3e02b92e7669ce187c216d0df.png b8f2d23d0e28b5176b55bc6e9209a583.gif
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

arm linux ntfs_Linux驱动02 的相关文章

  • Antlr 解析器运算符优先级

    考虑以下语法 我对运算符优先级有疑问 例如 res 2 a b有一个类似的解析树res 2 a b 我知道问题出在哪里 但我没有想到没有相互左递归的 漂亮 解决方案 你能帮我一点忙吗 该语法与自定义访问者一起使用 grammar Math
  • 如何通过索引访问 JSON 对象中的字段

    我知道这不是最好的方法 但我别无选择 我必须通过索引访问 JSONObject 中的项目 访问对象的标准方法是只写this objectName or this objectName 我还找到了一种获取 json 对象内所有字段的方法 fo
  • 带有 Maven Wrapper 的 Java 17 导致无法识别的 VM 选项“MaxPermSize=512m”

    I use OpenJDK 17 https jdk java net 17 使用 Maven Wrapper 3 8 2 从春季初始化 https start spring io Maven项目 JAR打包 Java 17 Spring
  • 测量窗口偏移

    有没有一种方法可以测量 jQuery 中窗口的偏移量 以便我可以比较 固定 元素和相对定位元素的位置 我需要能够知道窗口滚动了多远 以便我可以使用该图来计算固定元素的高度 相对于视口顶部 和相对对象的高度 相对于顶部 之间的差异文件的内容
  • MySQL 查询计算上个月

    我想计算上个月的订单总额 我收到了从当前日期获取当月数据的查询 SELECT SUM goods total AS Total Amount FROM orders WHERE order placed date gt date sub c
  • Pandas 与 Numpy 数据帧

    看这几行代码 df2 df copy df2 1 df 1 df 1 values 1 df2 ix 0 0 我们的教练说我们需要使用 values属性来访问底层的 numpy 数组 否则我们的代码将无法工作 我知道 pandas Data
  • php 数组中出现意外的 json 输出结构

    我正在尝试转换动态数据 如何从 PHP 获取此 JSON JSON 122240cb 253c 4046 adcd ae81266709a6 item 0 3 这就是我所做的 但它不起作用 PHP json array 122240cb 2
  • 将第三个表链接到多对多关联中的桥接表

    设计这个数据库的正确方法是什么 这是我设置表格的方式 我在名为 教师 的表和名为 仪器 的表之间存在多对多关系 然后我有一个连接两者的桥接表 我想将另一个表与 BRIDGE 表关联起来 意思是乐器 老师的组合 该表有 3 行 指定老师可以教
  • Amazon RDS for SQL Server 是否支持 SSIS?

    从谷歌搜索中读到一些相互矛盾的答案 不确定答案是是 否还是可能 我觉得读的时候已经很清楚了this http docs aws amazon com AmazonRDS latest UserGuide CHAP SQLServer htm
  • NSArrayController 无需将大型数据集加载到数组中

    我想使用 NSArrayController 向 NSTableView 提供数据 我面临的问题是我不想将所有数据预先加载到数组中 然后使用数组控制器setContent 方法 我的数据模型是一个管理数百万条记录的大型现有代码库 它包含有效
  • 一种无需 JavaScript 即可在 PHP 中确定浏览器宽度的方法?

    首先有吗 或者我必须使用javascript 我希望能够更改使用的 CSS 因此 frex 我可以为移动设备或其他设备加载较小的字体 不幸的是 仅使用 PHP 无法检测用户分辨率 如果您使用 Javascript 则可以在 cookie 中
  • 如何在 Angular 4 中翻译 mat-paginator?

    你知道如何在 Angular 中翻译 每页项目 吗mat paginator标签 这mat paginator是材料设计中的一个元素 您可以使用MatPaginatorIntl为了这 威尔 豪厄尔制作 https github com an
  • 使用velocity.js制作可拖动元素的动画

    我正在使用velocity js 为用户拖动的可拖动 SVG 元素设置动画 然而 velocity js 将先前的 mousemove 坐标排队并通过所有后续的 mousemove 坐标进行动画处理 我想要的是velocity js 不要对
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使
  • 如何在 JFreeChart 中设置多个系列的线条粗细?

    我创建了很多图表 在他们每个人中我都需要打电话 renderer setSeriesStroke i new BasicStroke 2 0f 对于每个系列 renderer is chart getXYPlot getRenderer 我
  • 如何在 OSX 上安装 LaTeX .sty 文件?

    我设置了一个 LaTeX 项目 tex documents some file tex support todonotes sty where some file tex uses todonotes usepackage colorinl
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前
  • Android 材料芯片组件崩溃应用程序。无法膨胀 xml

    Tried Chip来自两个支持库的组件 com google android support design 28 0 0 rc01和材料 com google android material material 1 0 0 rc01 堆栈
  • 禁用允许文本选择的

    残疾人可以吗
  • 探查器模板可以迁移到较新版本的 SQL Profiler 吗?

    是否可以将 Profiler 模板迁移到较新版本的 SQL Server 就我而言 我想将 SQL 2008 模板带到 2012 年 我尝试过 1 直接文件复制和 2 导出 导入 在这两种情况下 旧模板都会运行 但无法修改 修改后会出现以下

随机推荐

  • 华为IP的考试费要好几千,想问一下这个证书的含金量怎么样?

    虽然华为认证HCIP考试只考笔试 题库稳 运气好的话刷题库就有可能会过 但是其实学的时候还是好好学的 要不然只为了考试而去背题 但是实际操作能力不行的话一样会被企业拒绝的 最重要的还是掌握华为认证HCIP的技能 证书只是找工作的一个敲门砖
  • 服务器系统这么做,服务器怎么做系统

    服务器怎么做系统 内容精选 换一换 无法直接从云备份控制台查看备份中的数据 您可以通过以下几种方式进行查看 云服务器备份使用云服务器备份创建镜像后 再使用镜像创建云服务器 登录云服务器 查看服务器中的数据 云硬盘备份使用云硬盘备份创建新的云
  • 算法题:完全二叉树的权值

    问题描述 给定一棵包含 N 个节点的完全二叉树 树上每个节点都有一个权值 按从 上到下 从左到右的顺序依次是 A1 A2 AN 如下图所示 现在要把相同深度的节点的权值加在一起 他想知道哪个深度的节点 权值之和最大 如果有多个深度的权值和同
  • 代理模式,以及Java的动态代理

    定义 为其他对象提供一种代理以控制对这个对象的访问 可以提供额外不同的操作 UML类图 Subject类 定义了RealSubject和Proxy的共用接口 这样就在任何使用RealSubject的地方都可以使用Proxy RealSubj
  • UNIX环境高级编程 学习笔记 第十八章 终端I/O

    20世纪70年代后期 系统 UNIX System III 发展出一套不同于V7 Version 7 Unix 的终端IO例程 使得UNIX终端IO处理分立为两种不同风格 一种是系统 风格 它延续到了System V 另一种是V7风格 它成
  • 暴力破解Windows、Linux登录密码

    Windows密码破解 使用hydra离线破解windows密码 使用getpass内存提取windows用户密码 使用quarkpwdump导出windows用户密码hash值 Linux密码破解 使用hydra离线破解linux密码 将
  • idea启动java项目卡住问题

    当遇到 Method breakpoints may dramatically slow down debugging时 这时有可能可以进行下面步骤解决 Ctrl Shift F8 打开Breakpoints面板 然后可以测试是否可行
  • 记录好项目D21

    记录好项目 你好呀 这里是我专门记录一下从某些地方收集起来的项目 对项目修改 进行添砖加瓦 变成自己的闪亮项目 修修补补也可以成为毕设哦 本次的项目是个基于Springboot的教务管理系统 学生管理系统 课表查询系统 一 系统介绍 本项目
  • 使用EventEmitter构建基础的生命周期模型

    使用EventEmitter构建基础的生命周期模型 比如onCreate onUpdate onDestroy 分别在每个阶段console log一条消息 比如说 我们构建一个便签管理的EventEmitter 在onCreate时初始化
  • 献给面试学生 关键字const是什么意思 ESP(译者:Embedded Systems Programming) --Dan Saks概括了const的所有用法

    关键字const是什么含意 答 我只要一听到被面试者说 const意味着常数 我就知道我正在和一个业余者打交道 去年Dan Saks已经在他的文章里完全概括了const的所有用法 因此ESP 译者 Embedded Systems Prog
  • 商品期货的模拟盘能打印交易记录吗(商品期货的模拟盘能打印交易记录吗为什么)

    商品期货模拟盘可以打印交易记录吗 仿真盘没有实际测试过 大家可以自己试试 股指期货模拟交易和股指期货模拟交易有什么区别 您好 开展模拟交易的目的是为了深化对股指期货合约 规则和制度的检验 开展投资者教育活动 在模拟的交易过程中 交易过程 结
  • 【4-3】多彩的声音

    设计和实现一 个Soundable发声接口 该接口具有发声功能 同时还能调节声音大小 Soundable接口的这些功能将由有3种声音设备来实现 他们分别是收音机Radio 随身听Walkman 手机MobilePhone 最后还需设计 个应
  • mac查看电脑ip(在终端输入命令)

    在终端输入命令 ipconfig getifaddr en0
  • 科普:你该认识的四种常见开源许可证

    为什么80 的码农都做不了架构师 gt gt gt 开源早已成为很多科技企业关注的焦点 我们也常会发现部分开源技术后面标注了某种协议 这意味着这些开源代码被框上了某种束缚 或者说这些代码将必须遵循这些规则 否则可能会触及法律 总的来看 如今
  • 【因果推断与机器学习】Causal Inference: Chapter_3

    Identification Introduction 在介绍这节的补充内容呢 我想先引进一个著名的 辛普森悖论 辛普森医生发现了一种新药 这种新药可以降低心脏病发作的风险 于是他开始查找历史的实验数据 他注意到 如果男性患者服用了这种药
  • P1102 A-B 数对

    include
  • 图解python吴灿铭网盘_正版 图解算法 使用Python 吴灿铭 数据结构程序调试方法技巧书数组堆栈链表队列算法书Pytho...

    第1章进入算法的世界1 1 1生活中到处都是算法2 1 1 1算法的定义3 1 1 2算法的条件4 1 1 3时间复杂度O f n 6 1 2常见算法简介7 1 2 1分治法8 1 2 2递归法9 第1章进入算法的世界1 1 1生活中到处都
  • vue后台管理系统(通用模板)

    后台管理通用框架 源码 GitHub 亲测有效 预览地址 目前 包含 动态侧边导航栏渲染 面包屑 通知 主题 富文本等 1 登陆 2 工作台 3 通知 4 主题 5 发邮件 6 通知详情 目前可实现Excel表格下载 请见MarkDown文
  • HoloLens MRTK2.7 Unity2020 URP

    先提供工程下载链接 链接 https pan baidu com s 11LUGRzaTBxWOjUFwjZBKLQ 提取码 8xy6 优点 XR Plugin已经融合了MR AR VR 工程不用修改可以打包不同平台 可以使用ShaderG
  • arm linux ntfs_Linux驱动02

    一 启动过程 上电 gt uboot gt 加载linux内核 gt 挂载根文件系统 gt 执行应用程序 emmm 接下来会对uboot linux内核 跟文件系统分析 二 uboot 1 什么是uboot uboot其实就是一个通用的引导