目的 1. 使用verilog/vhdl设计一个PCI的watchdog设备. 2. 通过systemverilog 写testbench. 很久之前研究过AC97的verilog代码.但是很久没用verilog/vhdl的写代码,估计需要很长时间恢复功力啊. 最近还需要复习操作系统的一些基本的概念,需要背书,还需看很多算法的书.这些东西得时刻准备着.很多公司的面试,很看中这些. verilog/vhdl的demo有时间再实现.…
通过前面的操作,我们已经可以创建一个带有我们自己的PCI的watchdog外设qemu 虚拟机了. 目的: 1. 了解我们的外设情况. 2. 为在guest中开发我们自己的linux PCI驱动程序做准备. 查看我们的watchdog设备 考虑到ubuntu对于 spice的支持不好.我们采用VNC显示. -vnc 127.0.0.1:21 -vga cirrus -chardev stdio,id=mon0 -mon chardev=mon0,mode=readline 启动qemu $ su…
目的: 结合现在比较流行的技术,通过一个demo 展示一个全栈式设计的各种技能. 一个全栈式的工程师,应该能设计通过verilog/VHDL做logical设计.能写内核驱动,能架站. 要熟悉verilog/VHDL, C/C++, shell, python, JS, HTML, CSS等语言. 发现自己很多细节还需要了解. 首先理解2个概念 qemu是什么 简单的说,qemu 是一个开源软件,可以模拟整个计算机系统, 包括多种CPU和各种外设. 我们可以形象的比喻 qemu就是一个虚拟的攒机…
目的: 1. 为我们自己的watchdog写一个驱动 步骤: 通过之前的介绍,我们很容易猜想到写我们基于PCI的watchdog驱动,可以分2个步骤. 1. 探测加载PCI设备 这部分代码跟我们的设备本身没有任何关系. 我们通过这部分代码,找到 厂商ID为 0x1af4, 设备ID为0x0101的设备.这个设备是我们用qemu中定义我们的watchdog中指定的. #define PCI_VENDOR_ID_REDHAT 0x1af4#define PCI_DEVICE_ID_CWD 0x010…
这篇文章的理解,需要一些专业知识了. 我们可以创建模拟自己的外设吗? 我们已经知道什么是qemu了,我们可以通过qmeu的提供的外设,DIY一个计算机了. 但是我们可能还不满足,我们可以自己制造一个外设吗? 答案是可以的.而且这是了解计算机体系结构的一个很好的实践活动. watchdog 外设 watchdog, 即看门狗. 如果狗饿了,便会”咬人“(CPU),让CPU重新启动. 为了不让狗狗”咬人“,我们需要不停的喂他. 我们将创建一个最简单的PCI的外设watchdog.如果你是一个硬件工程…
目的: 1. 通过网页读取watchdog的信息 2. 通过网页设置watchdog 准备工作: 1. 选择一个web框架,选用 cherrypy $ sudo apt-get install python-cherrypy3 2. 熟悉 RESTFUL , 参考 RESR_API(Mark McLoughlin) redhat  REST API 指导 步骤: 我们选择了一个cherrypy作为web框架. cherrypy的部署简单. 这只是个demo,没有实现MVC,大家自己练习. 此外也…
目的: 1. 了解PCI的基本知识,为完成watchdog的设备做准备. 准备知识: 简单的说,PCI 设备分3个空间. 配置空间,IO空间,内存地址空间. PCI设备厂家决定了外设是使用IO空间还是IO内存空间. 我们通过读取配置空间的bar寄存器的最低位bit0来决定是该设备使用的是IO空间还是内存地址空间. 计算机一启动,bois或者linux会根据域,总线号.设备号和功能号,按照一定的算法,扫描PCI设备,读取设备配置空间的信息.最主要的包括厂商ID,设备ID和bar寄存器中设备的外设地…
目标: 1. 完成最终的设备驱动,增加具体的watchdog设备操作的代码. 测试代码: 代码最终实现见cwd_demo.c 代码只实现了read与write.  没有实现ioctl. 因此,我们可以通过shell指令直接操作我们的watchdog. read函数,只读取watchdog的0x01 和0x02寄存器. write函数无论写入多少个字节,驱动实际只写第一个字节. 1. 编译     $ make 2. 装载驱动     $ sudo insmod cwd_demo.ko 3.查看设…
我们已经设计了一个基于qemu的watchdog了.下一步工作就是创建一个含有我们的watchdog的虚拟计算机器了. 准备工作: 1. 使用virt-manager或者virsh创建一个虚拟机器. 2. 并安装一个操作系统.我选择了ubuntu12.04 3. 保存这个虚拟机的镜像. 为虚拟机器创建一个网络 比较流行的网络可以是bridge网络,macvtap网络,和NAT网络.当然还有一些高级的,open-vswitch等等. 为了将问题简单化,我们将利用libvirt的default ne…
transform属性 CSS3的变形(transform)属性让元素在一个坐标系统中变形.transform属性的基本语法如下: transform:none | <transform-function> [<transform-function>]* 2Dtransform常用的transform-function的功能: translate():用来移动元素,可以根据X轴和Y轴坐标重新定位元素位置.在此基础上有两个扩展函数:translateX()和translateY().…