自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

叶玄青的博客

一无所知

  • 博客(157)
  • 资源 (11)
  • 收藏
  • 关注

原创 记一次perf实验,检验CPU的分支预测功能

在上一篇文章中,作者通过给Alder Lake(12th gen i5 1240p)安装Ubuntu22.04,终于把PMU用起来了先来简单实验一下,检验一下CPU的分支预测功能。在实验前,先要有一个给定预期的程序,于是,我就写了一个死循环,如下所示命名为这里有两个数据值得关注一下:(1)cpu_core/instructions为什么是10G/sec(2)cpu_core/branch-misses为什么不是0。

2023-05-08 23:38:09 740

原创 i5 1240p使用perf避坑指南

新入手了一台小米迷你主机,CPU是英特尔的十二代i5 1240p,intel i5 1240p微架构属于alder lake,有4个大核,8个小核,每个大核有两个线程,因此,该CPU多线程能力为12核16线程。最近在研究性能剖析相关的知识,没想到遇到了不少坑,记于此。

2023-05-07 21:58:34 975

原创 深入理解覆盖率工具:gcov

gcov是GNU Coverage的缩写,顾名思义,就是GNU出品的覆盖率检查工具,它需要配合gcc使用。下面以Ubuntu 20.04中的工具版本进行基本功能的演示。gcc/gcov/lcov的版本如下(gcc手册第10章)

2023-04-21 23:53:50 583

原创 什么是llvm bolt

基于bolt的二进制程序优化

2023-04-21 23:51:52 505

原创 xv6实验:搭建环境

MIT 6.S081,操作系统工程实验课,搭建riscv环境

2022-08-03 23:09:19 710 2

原创 区块链之殇

区块链的基础设施是互联网,其底层协议基于TCP/IP,从这个角度讲,区块链是互联网领域的一个应用。换言之,区块链技术上能解决的问题,通过传统互联网都能解决。由此可见,区块链真正吸引很多人关注的原因应该不是技术因素,而是经济或者说社会因素。区块链带来了一种理念,那就是每个人都是平等的,也不用担心可信任问题,只要共识达成就是可信。其次区块链带来了加密货币,有利可图。现在社会充满了焦虑,一旦有新的技...

2020-04-07 23:35:14 3481 3

原创 区块链存储子系统设计

一、概念区块链存储是指在区块链网络中各个节点上安置数据的方式。通常我们指代的是Key/Value数据库。假设数据库名称为DB。存储域:针对物理数据来说,存储域就是对应的文件或者磁盘数据块。针对账户来说,存储域就是Merkle Patricia Trie(MPT树)。存储操作:针对各自存储域的操作。存储域包括:bare域(FB),指底层数据库,比如RocksDB数据库及其抽象。accou...

2020-01-19 13:43:40 954 1

原创 垃圾长城宽带,一次惨痛的系统更新经历

看到尘封已久的beaglebone black板子,最近正好有人来讨论arm上运行区块链rust节点的问题,就想手头的BBB板子也闲置挺久了,可以派上用场。接上电源线,打开tera term串口工具,设置好波特率和显示界面。很快,就看到了debian的启动日志。下了一个arm版本的rust-init,试着直接在板子上搭建工具链,提示需要glibc-2.16,没法,系统版本太久,还是debian...

2019-11-17 18:17:57 1576

原创 职场思考:冰山模型

关于工作,只是把工作做好是不够的,还要考虑长远发展,结合个人特质、行业前景,去做最适合自己的选择。当然,行动和思考同样珍贵。想清楚,做得到就很厉害了。10月份的时候接触了一点商学院的内容,其中讲到冰山模型,如上所示。冰山之上30%,表示知识技能。冰山之下70%,包括能力和内在特质(价值观、性格特质、动机)。很多职业是有知识技能门槛的,比如自己所在的程序员这个职业。一个萝卜一个坑,有的萝卜占几个...

2019-11-01 22:41:14 2821

原创 Rust双向链表

实现Linux内核中的list_head。Linux内核中List Head是一种双向链表,可将任意类型链接起来,有点类型泛型又胜过泛型。常见用法是这样的:自定义一种类型:struct Demo { ... struct list_head head; ...}通过head将Demo类型链接起来,在需要的时候通过head指针结合container_of()找回Demo。Rust...

2019-08-05 23:51:14 2391

原创 杂谈:区块链商业模式分析

区块链行业一直在喊应用落地,甚至在2018年的时候定义了区块链应用元年。我们先看看元年内出现了哪些应用。博彩,以EOS、波场为代表。一些分布式公告板,用户通过花费虚拟货币在上面涂鸦,写上任意想写的东西。游戏:网易逆水寒引入区块链激励机制,当然只是很小一部分。卡牌类游戏比较多,引入虚拟货币交易。遗憾的是,没有哪个应用真正“落地”的,虚拟货币还是在虚拟世界游玩。仔细想想区块链应用落地背后...

2019-07-09 07:58:40 3805

原创 密码学数学基础

总结基于大素数分解和离散对数的公钥密码体系数学基础一、核心概念群、环、域及相关定理。什么是群?非空集合G,以及在G上的二元运算$$\circ,满足三个条件对于任意a,b,c∈\in∈G,有(a∘b)(a\circ b)(a∘b)...

2019-04-27 00:20:51 3813

原创 区块链项目调研--Neo

一、基本信息官网:neo.org创立时间:2014年主要成员:达鸿飞、张铮文、陶荣祺目前市值:$594,678,081 排名17(截至2019年2月27日)项目愿景:实现数字资产的自动化管理白皮书:https://docs.neo.org/en-us/whitepaper.html项目地址:https://github.com/neo-project二、技术特点共识协议:dBFT...

2019-02-27 22:12:53 1111

原创 杂谈:区块链是否值得投资

关于这个问题,最直接的方式就是比较投入和回报了,如果回报大于投入,那就是值得投资的。当我们在谈论投资区块链的时候到底是在谈论什么?我总结了三个方面1、基于区块链的数字货币一类货币:BTC、BCH、BSV等第一代数字货币。二类货币:Ether、EOS等基于第二代区块链网络的数字货币。三类货币:基于以太坊发行的代币,也就是token。一类货币是区中心化交易系统的一次完美实践,是一种新的技...

2019-01-20 22:22:56 11104 2

原创 关于滴滴事件的思考

一名正值青春的女孩在乘坐滴滴顺风车的时候遇害了,期间通过朋友求助,朋友像滴滴平台反应未得到及时回复和解决。最终事件发生后,舆论开始爆炸,此时的我是愤怒的:为何作为一个公司,而且已经成为所谓独角兽的公司,会接二连三的发生这种事情。尤记得几个月前发生的空姐乘坐滴滴遇害的事件,如果不是这次事件的提醒,估计是要被遗忘在记得的角落中了。如果只是发发感慨,譬如说人生来是渺小脆弱的,也无不妥,但总归缺少点什...

2018-09-04 23:25:17 5574 1

原创 一个用于Rust的Ethereum虚拟机桥

1 motivation and frameworkOur purpose providing this repository is to build a bridge between Rust Blockchain Kernel(such as Parity) and the llvm-based Ethereum Virtual Machine engine. Using this pro...

2018-08-11 10:57:04 785

原创 职场记事:从嵌入式到区块链

从2014年毕业,在芯片公司持续工作了三年有余,最终在临近4年之际,出乎意料地进入了区块链公司,还是颇有感慨,记录于此。之前都在芯片公司工作,从格科到酷芯,一直都在给公司的SoC定制系统,做SDK,还记得刚参加工作那会,我心里对能设计操作系统的人感到无比的崇拜。等到真正接触了,发现实际应用中,或者说产品中都是移植Linux或者更多的是嵌入式实时操作系统,比如RTEMS/FreeRTOS,做驱动...

2018-08-01 22:58:40 2044 3

原创 Rust JNI原理

rjniDownload and build Rust Librarygit clone https://github.com/benanders/rjni.gitcd rjni; cargo buildadd examples into Cargo.toml[[example]]name = "instance"path = "examples/instan...

2018-07-22 22:19:44 3285

原创 PCIe实践之路:PCIe转USB Host驱动

大话PCIe:调试实战本次调试PCIe RC驱动,通过PCIe转USB芯片扩展出的USB口接入U盘。RC平台为ARM-A7,运行裸机环境,EP为一款PCIe转USB3.0芯片,提供PCIe gen2 1X物理接口,接到4X插槽上。一、芯片选型PCIe转USB3.0芯片为vl805,网上没有找到datasheet,驱动只有windows下的,但是通过官网信息判断有linux支持,所以...

2018-05-18 23:26:22 20939 5

原创 Haskell Monad (上)

函数式编程中的单子(Monad)说到pure functional programming,实在是绕不过去Monad的。pure function的特点往往用函数式编程的思路写了几个程序之后就会遇到一个问题:针对具有状态更新的程序,似乎总是不太好处理。由于语言的纯粹性,相同的输入总是返回一样的值,所以如果在计算过程中需要更新一个状态,就要去显式地把状态作为参数传递给函数,并显式地构...

2018-05-04 09:12:25 1324

原创 复用 = 高阶函数和多态

高阶函数假设现在有一个计算销售额的函数,输入年份n,返回该年的销售额。sales :: num -> num我们可以这样定义一个计算总销售额的函数totalSales :: num -> numtotalSales 0 = 0totalSales n = totalSales (n-1) + sales (n-1)定义高阶函数total :: (num -> num) ->...

2018-03-26 23:45:24 598

原创 图灵机与编程语言

年前看了一本科普书籍–《人工智能简史》,作者尼克,早年任职哈佛和惠普,后投资创业。这本书描述了两大人工智能的发展方向,一派主张拟生物大脑(譬如人工神经网络),另一派则主张用逻辑和符号系统(譬如自动定理证明)。真正伟大的飞跃以1937年图灵关于可计算数的开创性论文开始,奠定了计算机发展的基础。图灵机是这样一种装置:有一条无限长的纸带,纸带上有无穷多个格子;一个可以移动的读写头,每次可像制定格...

2018-03-08 10:40:33 3137 1

原创 工作中的二三事

最近不知怎么搞的,老是容易累,也许是近期刚从普吉岛回来有关,身体还没完全适应上海的下雪天,又或许是对最近的生活不甚满意,我不知道。以至于胡思乱想的突然又有了要写点什么东西的感觉,人啊,就是矫情。关于工作质量工作质量如何评估呢?这个恐怕要因工作而异了吧。做软件的都知道,软件开发最重要的一环就是迭代的速度,在交付前有一个内部的迭代过程,在交付之后有一个更新的迭代过程。迭代和测试交替运作,从

2018-01-29 23:24:00 758 4

原创 Haskell Lesson:a tokenizer

一、关于pure和impureHaskell作为一门纯函数式语言,副作用剥离是它的一大特色,基本上较为严格的遵循数学函数的形式。但是也带来了一些问题,譬如在实现一个文本编辑器的时候,需要把token记录下来,这个问题在C语言中很容易解决,搞个静态的变量即可,但是在Haskell中就没有那么容易了。可能需要这么做:getToken >>= \s -> return (s:tokenList)

2018-01-28 17:33:32 612

原创 Haskell Lesson:一些数学知识

补充一些数学知识一、幺半群(monoids)1.1 定义一种元素构成幺半群只需满足两个条件:能找到一个满足结合律的二元操作符,称之为(*),使得表达式a * (b * c) = (a * b) * c。存在一个单位元素,称为e,满足群的任意元素有:a * e = a且e * a = a操作*和单位元e以及所有满足这两个条件的元素构成了幺半群。1.2 举例一:* = * (乘法符号)e = 1那么所

2018-01-15 22:24:57 813

原创 记于2018年元旦后

转眼2017年已经过去了,又到了年终总结的时刻,回顾这一年,似乎很忙碌,但是却没有换来内心真正的充实的感觉。生活生活上很满足,安了个家,有了一个欢乐的媳妇,我俩的点点滴滴贯穿着整个2017。家里的事情基本都是由她负责,包括装修,买家具电器,日常生活用品。偶尔在家里做个饭,虽然不经常,但是每次闻到米饭的香味总是会有种家里特有的温馨的感觉。最希望的是父母永远身体健康,媳妇永远能够保持快乐。如果

2018-01-06 00:47:00 703

原创 Haskell Lesson:高阶函数

微信公众号:牛顿一号 欢迎关注我,一起学习,一起进步!前面在实现Graham扫描和Huffman编码的时候其实已经用到了高阶函数的知识。所谓高阶函数就是参数中带有函数,譬如 f2(x)f^2(x)。通过高阶函数可以进一步对运算过程进行抽象。一、foldl/foldr/map这几个函数提供了一种遍历List的方法,可以不用自己去显示的定义递归过程,即所谓的折叠和映射。折叠返回一个累加值,这个

2017-12-24 21:39:05 583

原创 Haskll Lesson:Huffman编码实现文本压缩

Haskell实战演练:实现哈夫曼编码一、Huffman编码理论学习资料https://web.stanford.edu/class/archive/cs/cs106b/cs106b.1126/handouts/220%20Huffman%20Encoding.pdf基本内容概述:huffman编码是一种变长编码方式,向我们熟悉的ascii码是定长编码的一种,冗余信息较多。变长编码的基本思路是高频率

2017-12-10 00:57:26 852

原创 Haskell lesson:类型系统解读

最近忙成狗了,吭哧吭哧终于把家搬完了,以后就长久的住在新家了,由于刚搬家,网线还没有接,又过了一个星期家里没网的日子。这一段时间又没时间好好整理haskell。甚是遗憾。从上次haskell实现Graham扫描算法到现在已经三周有余,这次分析一下haskell类型系统。首先回忆一下C语言是怎么构造新类型的。struct Test { int index;#define NAME_LEN 3

2017-11-14 21:36:54 1052

原创 Haskell lesson:实现Graham扫描算法

getMinDot :: (Num a, Ord a) => [(a,a)] -> (a,a)getMinDot ((x,y):pairs) = if pairs == [] then (x,y) else if or [yand [y==snd (getMinDot pairs), x<fst (getMinDot pairs)]] then (x,y) else getM

2017-10-18 13:41:46 3652 5

原创 PCIe实践之路:Linux RC驱动

最新的4.12内核中对pci host driver进行一些划分,把基于designware IP的主控驱动放到drivers/pci/dwc目录下去了。如果是基于老的kernel开发,想要移植新版的内核的话,要注意,同时多了designware ep驱动框架。非designware的主控驱动还是位于host目录下,譬如pcie-xilinx.c。下面就以xilinx pcie主控驱动为例来介绍如何

2017-09-17 13:42:23 9082

原创 PCIe实践之路:Linux访问PCIe空间

Linux在枚举PCIe设备的过程由内核中的PCI框架负责,在EP配置完成之后,驱动通过以下接口访问PCIe空间,原理参考前文《大话PCIe:设备枚举》一、访问配置空间相关接口位于drivers/pci/access.c1.1 读配置空间pci_read_config_byte(const struct pci_dev *dev, int where, u8 *val);pci_read_con

2017-09-03 20:32:16 17314 1

原创 游黄山、宏村记

五岳归来不看山,黄山归来不看岳从八月份开始工作事情特别多,忙忙碌碌的,但是细细一想,其实也没有做什么特别重要的事情,正好女朋友公司组织出游,也把我带上了,就出去好好放松放松吧。黄山是我一直以来都特别想去的地方,美景特别多:迎客松、云海等等。而且我又对爬山情有独钟,虽然每次爬完身体很累,但是能换来精神上的愉悦。本次行程:当天早上出发,下午到达宏村,吃饭游玩,晚上下榻汤口,第二天登山,于光明顶住宿一宿

2017-08-27 23:49:35 2353 6

原创 FreeRTOS任务调度研究

这篇文章不介绍FreeRTOS移植,只是最近针对多核ARM Cortex系列平台做了移植后的一篇总结研究文章。所以不涉及对FreeRTOS整体的介绍,而只是分析任务调度这一块的机制。对应的Demo参考自CORTEX_A9_Zynq_ZC702。一、触发任务调度的两种机制taskYIELD() 这种机制其实是通过ARM swi 异常触发task context switch。IRQ h

2017-08-17 22:51:32 8845

原创 PCIe实践之路:DMA机制

PCIe控制器也提供DMA(Direct Memory access)功能,用来批量地异步数据传输。一、PCIe中的DMA读和写假设现在

2017-07-28 20:47:05 45987

原创 PCIe实践之路:设备枚举

人的一生是一个不断认识自我,发展自我的过程。认识PCIe设备的枚举过程需要以下知识:拓扑结构设备的表征及配置空间的访问BAR空间的含义和访问其中第1/2点在总线结构与配置空间已经介绍过了,第3点在BAR空间和TLP也已经进行过详细的介绍,可以说是万事具备。接下来涉及的过程有以下几个:根据深度优先搜索进行设备总线号的分配BAR空间的映射和简单访问测试上面就是枚举过程中做的事情了。一、基

2017-07-08 22:46:17 22085 8

原创 PCIe实践之路:BAR空间和TLP

上一篇文章中写到每个PCIe的function都有自己的configuration space,其实就是配置寄存器了(这个当然是要有的了,不然软件要怎么玩?只不过PCIe的配置寄存器要通过tlp才能去访问)。其实PCIe设备是有自己独立的一套内部空间,不仅仅是配置空间,包括每个设备提供哪些I/O地址,memory地址。而BAR(Base Address Register)就是用来表征这些地址空间的。

2017-07-02 20:28:40 47463 2

原创 PCIe实践之路:总线结构与配置空间

把有限的精力花在真正有价值的事情上。一、网络拓扑与设备端口上一篇已经讲到构成PCIe网络的三个角色:RC、SW和EP。其实这整个网络给人感觉就像乐高积木,上一级设备的下游端口接下级设备的上游端口,然后端口不但能看出链接状态,还提供包传输的链路。这里有两个常见的概念:DSP(Down Stream Port)和USP(Upper Stream Port)。对每个功能设备来讲,用来连接上下游设备的端口

2017-06-30 00:41:27 15446 4

原创 PCIe实践之路: 发展与应用

介绍PCIe的基本概念,用途。一、串行总线PCIe作为串行总线的一种,它的发展必然和另一种总线架构密不可分:并行总线。早先,人们普遍认为提高数据位宽就能提高数据传输速率,这是谁都会想到的问题,早期的总线确实是这样设计的。但是随着工作频率的提升,并行数据线的串扰变得越来越严重,而串行总线采用差分对来传输信号,可以很好的抵消串扰。所以现在越来越多的设备,特别是高速设备(譬如usb),都基于差分串行总线

2017-06-28 23:29:29 8356 1

原创 访问PCIe BAR空间

对BAR空间以及配置空间的访问做一个系统的总结,其实就是在回答以下几个问题:1. PCIe中四种tlp和BAR空间的关系是怎样的?2. tlp是怎么发起的?3. tlp是怎么到相应的下游设备的?

2017-06-20 23:31:54 17545

FreeRTOS-v9.0.0源代码

同步官网的FreeRTOS-v9.0.0源码

2017-08-18

根文件系统

一份基于busybox制作的根文件系统

2017-05-16

C语言的文法定义

2017-05-15

C语言文法定义

2017-05-15

motion detection课件

一份不错的运动侦测的讲义

2016-10-31

Blooth Low Energy Specification

低功耗蓝牙官方规格书

2016-07-05

usb ehci 接口规范

usb2.0 的接口规范,2.0标准的usb控制器接口

2016-05-01

usb 驱动程序编写

介绍linux内核下usb驱动开发

2016-05-01

usb大全第四版

usb大全英文版第四版

2016-05-01

usb2.0协议

usb2.0 的官方文档

2016-05-01

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除