- 博客(139)
- 资源 (3)
- 收藏
- 关注
原创 MMC总线上挂载多个mmc设备时的识别过程
1、识别频率设置为fod(0~400K),并设置open-drain(漏极开路)模式(简单讲就是总线上有一个输出低电平,其余器件就输不出高电平)。2、Host发CMD1命令,让所有设备以线与(wired and)方式发送其OCR。不兼容的设备就会进入Inacrive State,其余的设备会进入Ready State。3、Host发广播命令CMD2要求所有设备发送其CID。设备会按位往总线上输...
2020-04-21 11:27:51
1076
原创 Fuchsia MMC框架简析
本文简单分析下Fuchsia的MMC框架,主要是基于mmc协议的初始化流程进行说明。至于mmc框架中的SD以及SDIO协议流程本文不涉及。另外,Fuchsia块设备层以及文件系统层的分析,本文也不涉及。下表为目前rcar-M3单板系统的“设备树”(为描述方便,省略了部分设备树节点)。 root$ dm dump [root] <root> pi...
2020-04-18 17:27:57
1072
原创 Linux MMC原理及框架详解
目录1. 背景1.1基本概念1.2 规范简介1.2.1 卡的规范1.2.2 总线规范2. eMMC原理介绍2.1 eMMC内部结构简介2.1.2 Flash Controller2.1.3 Host Interface2.2分区管理2.3总线协议3. Linux MMC软件框架流程3.1软件架构3.2工作流程参考文档本文参考资料主要来...
2020-04-18 17:20:44
9826
转载 eMMC分区管理
目录1. Partitions Overview1.1.概述1.2 分区编址2.Boot Area Partitions2.1 容量大小2.2 从 Boot Area 启动2.3 写保护3 RPMB Partition3.1 容量大小3.2 Replay Protect 原理4 General Purpose Partitions4.1 容量大小...
2020-04-11 17:47:24
2752
转载 eMMC总线协议简析
目录1. eMMC 总线接口2. eMMC 总线模型2.1 速率模式2.2 通信模型2.2.1 Read Data2.2.2 Write Data2.2.3 No Data2.2.4 Command2.2.5 Response2.2.6 Data Block2.2.7 CRC Status Token3. eMMC 总线测试过程4. eMM...
2020-04-11 17:25:40
3525
转载 ADRP指令
ADRP X8, #_g@PAGEADD X8, X8, #_g@PAGEOFF得到一个大小为4KB的页的基址,而且在该页中有全局变量g的地址;ADRP就是讲该页的基址存到寄存器X8中; ADD指令会算出g的地址,X8+#_g@PAGEOFF,#_g@PAGEOFF是一个偏移量;这样就得到了g的地址X8;ADR指令这是一条小范围的地...
2020-01-04 15:06:31
7255
原创 fuchsia coordinator及devhost
Devmgr进程包含Coordinator(设备协调器)用于跟踪驱动程序和设备,进行驱动程序的发现、设备主机进程的创建和走向的管理,以及维护设备文件系统(devfs)。Devmgr进程是zircon继内核加载的第一个用户态进程—userboot(类似linux的init进程)和userboot加载的第一个进程—bootsvc(保存启动相关信息,并提供bootfs等服务)之后的非常重要的一个...
2020-01-04 11:13:54
656
原创 fuchsia devfs分析
devfs设备文件系统,主要负责fuchsia中管理的设备在本地文件系统中文件节点的呈现。其文件路径为“/dev”。1.devfs目录构建devfs随着devmgr进程的启动而初始化。通过“devmgr::devfs_init”函数,初始化一个devfs目录,主要两点: 1.class目录树的创建(包含所有ddk/protodefs.h文件中定义的不带“PF_NOPUB”flag的协议)...
2020-01-04 11:07:59
578
原创 zircon fifo实现分析
fifo是一种进程间通信机制,是一种先进先出的queue。其设计目的是作为共享内存传输的控制面,其读写性能比socket或者channel都更加有效率,但是其在elements和buffers的大小上有严格的限制!//TODO:限制的本质原因系统调用banjo文件位置:zircon\system\public\zircon\syscalls.banjofifo的创建:zx_fifo_c...
2020-01-04 11:00:40
1923
原创 fuchsia中断注入流程
以virtio net接收中断为例。RxStream::Notify //virtionet后端接收到数据包后,通过Notify函数向虚拟机注入中断 chain_.Return queue_->Return interrupt_(actions) //在VirtioNetImpl::Start函数中会调用rx_stream_.Init将Vi...
2020-01-04 10:56:45
418
转载 对于Linux内核tty设备的一点理解
虽然一直做嵌入式Linux,宿主机和开发板通信天天都在用tty设备通信,但是其实自己对TTY设备及终端的概念认识几乎是0。对于Linux内核的终端、tty、控制台等概念的认识很模糊。由于在学习的时候碰到了重定向console的问题,所以借机学习下tty的知识。以下是我对tty的认识总结,信息来源于网络和内核文档。参考资料见文章末尾。tty一词源于Teletypes,或Teletypewrit...
2019-12-03 08:22:49
874
转载 printf函数从应用层到内核的调用
接着上一节讲。在用户程序中调用printf,会输出数据,我们知道最好肯定会进入到内核里运行,因为数据是由硬件通过串口等进行输出的,必定需要调用硬件的驱动程序。示例程序如下:test.c#includeint main(){ int i = 1; printf("number is : %d !\n ,i"); return 0;}我们通过 gcc -E tes...
2019-12-02 15:34:31
1618
原创 zircon的event实现及async loop机制
zircon中的event是一种异步并发的机制。用户空间可以对8个信号bit位进行设置、清除和等待。event的创建接口为zx_event_create()zx_event_create sys_event_create EnforceBasicPolicy //判断当前进程是否有创建event的权限 EventDispatcher::Create //...
2019-11-25 08:33:12
540
1
转载 Queueing in the Linux Network Stack
[A slightly shorter and edited version of this article appeared in theJuly 2013 issue of Linux Journal. Thanks to Linux Journal’s great copyright policy I’m still allowed to post this on my site. Go...
2019-11-08 23:22:38
1067
转载 Ubuntu Source Insight 4.0安装后首次打开报错
系统为中文会出现Unable to open or create ....中文路径... .sidb参照网上修改regedit方法, 发现没用直接修改 ~/.wine/drive_c/users/server/我的文档 为 ~/.wine/drive_c/users/server/My Documents————————————————版权声明:本文为CSDN博主「weixin_4...
2019-10-26 08:26:35
1139
转载 Ubuntu如何通过官方PPA安装Wine 1.8稳定版及安装source insight
引自Winclient的博客】经过 17 个月的开发,Wine 1.8 完成了 13000 处修改,最重要的是实现了 DirectWrite 和 Direct2D,以及新的 Pulse Audio 驱动。目前可通过 PPA 安装的 Wine 1.8 支持 Ubuntu16.04、Ubuntu 15.10、Ubuntu 15.04、Ubuntu的14.04、Ubuntu 12.04 及其衍生版本。...
2019-10-26 07:55:43
428
转载 Linux有问必答:如何在Linux下禁用IPv6
问题:我发现我的一个应用程序在尝试通过IPv6建立连接,但是由于我们本地网络不允许分配IPv6的流量,IPv6连接会超时,应用程序的连接会回退到IPv4,这样就会造成不必要的延迟。由于我目前对IPv6没有任何需求,所以我想在我的Linux主机上禁用IPv6。有什么比较合适的方法呢?IPv6被认为是IPv4——互联网上的传统32位地址空间——的替代产品,它用来解决现有IPv4地址空间即将耗尽...
2019-10-15 22:28:28
397
原创 go语言学习12(结构体)
格式:type 结构体名称 struct{ field1 type field2 type}结构体如果需要导出到其他包用,则名字首字母需要大写;结构体中成员如果需要在其他包中引用,也需要首字母大写。例如:type Teststruct struct{ Fieldout int field...
2019-09-26 23:09:00
429
原创 go语言学习11(错误处理)
Golang中不支持try…catch…finally这种错误处理机制。而引入的处理方式是:defer,panic,recover,请看示例: func test(){ defer func(){ err := recover() //内置函数,可以捕获异常 if err != nil { fmt.Println(“error=...
2019-09-26 23:08:06
164
原创 go语言学习10(defer)
defer后面紧跟的一条语句会被压入独立的栈中,当程序段结束后会依次弹栈执行。注意:当defer语句压入栈中时,也会将相关的变量同时拷贝入栈(不会改变执行结果),看个例子,如下func sum(n int) int{ var n = 10 defer fmt.Println(“befor”,n) //后输出这句—befor10...
2019-09-26 23:06:23
115
原创 go语言学习9(闭包)
闭包就是一个函数与其相关的引用环境组成的一个实体,看个例子:func addOne() func (int) int{var n int = 0return func (x int) int{ n = n + x return n}}上面标红的代码段就是一个闭包,下面看下主函数中的调用来说明引用环境的问题:func mai...
2019-09-25 22:57:15
153
原创 go语言学习8(包,package)
包相当于一个源文件的别名,为了进行功能区分,将本源文件中的全局函数、结构和变量进行导出,同时定义自己功能模块使用的函数,防止与其他文件重名。包的本质就是创建不同的文件夹,来存放程序文件。一个文件夹下可以有多个go文件,但一般都打入同一个包(名字即为文件夹名)。包的三大作用:区分相同名字的函数、变量等标识符 当程序文件很多时,可以很好的管理项目 控制函数、变量等访问范围,即作用域打包的...
2019-09-25 22:56:23
145
原创 go语言学习7(函数、init函数、匿名函数)
Go 语言最少有个 main() 函数。函数定义格式:func function_name( [parameter list] ) [return_types] { 函数体}说明下,函数的返回值return_types可以没有,也可以为多个,中间用“,”隔开Init函数:每个源文件中都可以包含一个init函数,这个函数在main函数被go框架调用, 通常可以在init中完成...
2019-09-25 22:55:26
155
原创 go语言学习6(流程控制和循环)
语句 举例 if 语句 if a < 20 { /* 如果条件为 true 则执行以下语句 */ fmt.Printf("a 小于 20\n" ) } if...else 语句 /* 判断布尔表达式 */ i...
2019-09-25 22:54:19
245
原创 go语言学习5(运算符)
跟c语言一样,下面简单罗列,不做说明。算术运算符:+、-、*、/、%、++、--关系运算符:==、!=、>、<、>=、<=逻辑运算符:&&、||、!位运算符:&、|、^、<<、>>赋值运算符:=、+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=其他运算符:&...
2019-09-25 22:52:19
176
原创 go语言学习4(数据类型、数组、切片、map)
数据类型用于声明函数和变量,数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存。Go 语言按类别有以下几种数据类型: 布尔型布尔型的值只可以是常量 true 或者 false。一个简单的例子:var b bool = true。 数字类型整型 int 和浮点型 float32、float64,Go...
2019-09-25 22:51:02
363
原创 go语言学习3(变量)
Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。声明变量的一般形式是使用 var 关键字,格式:var 变量名 变量类型;举例:var test string也可以同时声明多个变量,格式:var 变量名1,变量名2 变量类型;举例:var test1,test2 string = “test1”,”test2”示例代码: package main imp...
2019-09-25 22:48:08
146
原创 go语言学习2(注释及代码风格)
行注释://块注释:/**/一般行注释比较通用,官方推荐使用行注释来注释整个方法和语句。块注释主要用在对包(package)的描述中。函数大括号的格式go语言中不允许使用如下的大括号使用方式:func main(){ //函数体}上面的定义方式将导致编译错误。正确的书写方式是:func main(){ //这里必须放在与函数头同一行中 //函...
2019-09-25 22:43:57
278
原创 go语言学习1(go环境安装)
上golang中国官网: https://golang.google.cn/dl/ 去下载对应系统的安装包,如下图:我们这里以Microsoft Windows为例,下载go1.13.windows-amd64.msi镜像包,根据指引步骤顺序安装即可。默认情况会将go环境安装在c:\Go目录下,同时将c:\Go\bin目录放入环境变量中。下一步我们来测试我们安装的go环境。创建...
2019-09-25 22:42:03
290
原创 fuchsia hub文件系统
原文路径:fuchsia/docs/the-book/hub.mdhub是什么意思?hub是zircon 自我检查的门户。它使工具能够在运行时访问有关realms(本文翻译为领域)和component(本文翻译为组件)实例的详细结构信息,例如names,job和process ids以及published services。译者注:类似于linux proc 和sysfs系统组织形...
2019-09-25 22:38:10
699
原创 blobfs中的默克尔树应用
1.Merkle Tree概念Merkle Tree,通常也被称作Hash Tree,顾名思义,就是存储hash值的一棵树。Merkle树的叶子是数据块(例如,文件或者文件的集合)的hash值。非叶节点是其对应子节点串联字符串的hash。1.1、HashHash是一个把任意长度的数据映射成固定长度数据的函数。例如,对于数据完整性校验,最简单的方法是对整个数据做Hash运...
2019-09-20 15:16:09
763
转载 ELF文件的加载和动态链接过程
近段时间在研究Erlang核心特性的实现,也许过段时间会有个系列的总结,期待...今天看到有人写一个深入Hello World的文章,想起来读研的时候做的一个关于程序加载和链接的课程设计,也是以Hello World为例说明的,随发出来共享。文后有下载链接。======================================================本文...
2019-09-20 15:06:01
1153
转载 谈谈PCI-Express总线技术
PCI总线发展历史PCI总线是计算机的I/O总线,在90年代时替代了ISA总线,成为计算机中的局部总线一直使用至今。PCI总线在发展的过程中,不断自我革新,满足时代的需求。在短短10多年间,PCI总线历经了PCI、PCI-X以及PCI-E的演变历程。传统PCI总线具有32位数据宽度,33MHz的时钟频率,能够支持设备的即插即用、自动识别与配置。与ISA总线相比,不仅在...
2019-08-26 15:19:14
2471
原创 google netstack 数据链路层分析
netstack ==================================>网络协议栈main函数路径:--src\connectivity\network\netstack\main.gomain() //--分析关键步骤 stk := tcpipstack.New([]string{ipv4.ProtocolName,ipv6.ProtocolName,arp.P...
2019-08-24 09:41:16
1553
原创 virtio net前端
######版本为linux4.13.2#########virtio_init bus_register(&virtio_bus)static struct bus_type virtio_bus = { .name = "virtio", .match = virtio_dev_match, .dev_groups = virtio_dev_gr...
2019-08-24 09:38:07
1551
原创 fuchsia中virtio 后端实现
================================================涉及的其他类class PciDevicePCI设备基类,存储pci设备状态,提供ReadBar、WriteBar虚接口函数。ReadConfig ReadConfigWord //读配置空间寄存器WriteConfig //写配置寄存器空间Interrupt //如果有pci pen...
2019-08-24 09:37:00
1013
原创 VirtioNet独立进程分析
VirtioNet======在vmm中启动和初始化vmm/main.cc中main函数启动网络设备时,会优先判断legacy_net是否使能,在legacy_net不使能的情况下会进入VirtioNet初始化分支,下面具体分析。1.在virtio设备初始化之前先把pci总线初始化起来(virtio设备都挂载pci总线上):1.1PciBus构造函数:PciBus bus(&gu...
2019-08-24 09:35:27
676
原创 netcfg 进程分析
netcfg 进程 -garnet\bin\netcfg\src\main.rs//概括而言就是通过一个watcher来监听网卡目录,当有新节点添加时,通过IPC调用netstack的AddEthernetDevice接口添加网口端点fn main() const ETHDIR: &str = "/dev/class/ethernet"; //常量字符串,监控的网卡目录...
2019-08-24 09:33:03
913
原创 sysmgr分析
一、概述sysmgr,负责建立一个全局系统服务的访问环境。sysmgr的设计相当健壮。如果有任何服务死后,它们将在下一次应用程序尝试连接到该服务时自动重启。默认情况下,sysmgr从' /system/data/sysmgr/ '读取所有配置文件。这些配置文件具有下列格式之一:## CONFIGURATION### Servicessysmgr服务配置文件是一个JSON文件...
2019-08-24 09:27:58
1647
设备树规范及GICv3v4
2018-08-03
显控终端程序
2018-04-22
GPS速度和航向计算
2018-04-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人