几年前写了这个,想放到网上,招聘很困难,很多现代计算机科学教育真的很糟,很难找到懂得现代计算机堆栈的第一(基本)原理的人。

如果我曾经再次得到了12周的自由,我会提供这个作为课余学习的play,我也想play。

第一节:晶体管--0.5周

关于那些晶体管--课程概述。描述FPGAs是怎样用晶体管构造的,描述ICs(集成电路)只是一个在可靠的封装中的晶体管集合。明白LUTs(查找表)和材料。能简洁地说出晶体管原理,还有所有项目必须建立在彼此相关联的基础上,不能只建立单独一个。在第一天入手FPGA电路板和配套元件。

构造FPGA板--电路板设计,FPGA BGA回流,FPGA闪存,50mhz时钟,USB JTAG接口和闪光灯(没有特殊的硬件,用cypress的usb mcu 去做jtag),几个LED,一个复位按钮,一个可供电的串行端口(FTDI家的),SD卡,扩展连接器(ide线)、以太网端口。可选:扩展板,主机USB端口,NTSC电视输出,ISA端口,板上的PS / 2连接器。要用烤箱和万用表温度计做回流焊。

第二节:给硬件编码的语言--0.5周

与FPGA对话(C,200)-- 对JTAG bitbang的USB mcu 代码。 对即将到来强度的很好热身。
闪烁LED(Verilog,10)-- 安装所有Xilinx,并下载第一个bit文件。启动模拟器。学习Verilog。

构造UART(Verilog,100)-- Verilog的简介章节,复制一个真正的UART,介绍MMIO的概念,尽管串行口可能是半主机。 串行测试回波程序和led控制。

第3节:什么是处理器?--3周

编写汇编程序(Python,500)-- 简单而无聊,写入python。 与CPU构建并行发生。 教你ARM装配。 最初只输出二进制文件,但在你编写链接器时改变了。

构建ARM7 CPU(Verilog,1500)-- 将其分解为几节。 一个简单的管道启动,解码,获取,执行。 我们有多少B的RAM? 我们至少需要1MB,DDR会很难我想的话,也许SRAM。 可模拟和可综合。

编码bootrom(Assembler,40)-- 这允许通过串行端口将代码下载到RAM中,并被烧录到FPGA映像中。 可爱的测试程序在此运行。

第4节:“高”水平语言 --3周

构建C编译器(Haskell,2000) - 更有意思,涵盖了编译器设计的基础知识。用Haskell写.写一个语法分析器,将其分解为几节。 输出ARM汇编。

构建链接器(Python,300) - 如果你聪明,这应该需要一天的时间。 输出精灵文件。 用于使用QEMU,半主机进行测试。

libc + malloc(C,500) - 更复杂程序的网关。 这里只有一半libc,像memcpy和memset和printf这样的东西,但是没有syscall包装器。

构建以太网控制器(Verilog,200) - 与真实PHY通话,仔细考虑MMIO设计。

编写引导加载程序(C,300) - 将以太网程序写入引导内核通过UDP。 、第一件事用C写。或许不要每次都重新下载serial又嵌入到FPGA映像中。

第5节:我们认为理所当然的软件 --4周

构建MMU(Verilog,1000) - ARM9ish,解释TLB和其他有趣的事情。 也许也是一个内存控制器,取决于FPGA的方式,然后将init代码添加到你的引导加载程序。

构建操作系统(C,2500) - UNIXish,只有用户空间线程。 (open,read,write,close),(fork,execve,wait,sleep,exit),(mmap,munmap,mprotect)。 考虑您正在使用的调试接口,从printf到gdbremote存根到内核。 打破分成几节。

与SD卡通话(Verilog,150) - 你要做的最后一个硬件。 和驱动。

FAT(C,300) - 一个真正的文件系统,我认为fat是最简单的

init,shell,download,cat,ls,rm(C,250) - 你的第一个用户空间程序。

第6节:联网 --1周 如果你做的其他一切都好

构建TCP堆栈(C,500) - 可能在内核中编码,将以太网驱动程序集成到内核中。将对网络系统调用的支持添加到内核。(send,recv,bind,connect)

telnetd,多进程的能力(C,50) --用C写,用户可以使用telnet多次连接。 真的只是一个绑定的shell。
节省空间的动态链接(C,300)--因为我们能解释动态链接器只是一个用户空间程序。 需要对链接器更改。

web(C,500+)--一个基于web浏览器的“漂亮”文本,使用ANSI和终端的美好。 动态链接真好,好的正如你想要的。

从晶体管到web浏览器的更多相关文章

  1. 后台启动weblogic成功后,在web浏览器上无法访问

    后台启动weblogic成功后,在web浏览器上无法访问,可尝试重启服务器.

  2. shellinabox基于web浏览器的终端模拟器

    1. Shellinabox介绍 Shellinabox 是一个利用 Ajax 技术构建的基于 Web 浏览器的远程终端模拟器,也就是说安装了该软件之后,服务器端不需要开启 ssh服务,通过 Web  ...

  3. React Native 项目运行在 Web 浏览器上面

    React Native 的出现,让前端工程师拥有了使用 JavaScript 编写原生 APP 的能力.相比之前的 Web app 来说,对于性能和用户体验提升了非常多. 但是 React Nati ...

  4. 第十一章:WEB浏览器中的javascript

    客户端javascript涵盖在本系列的第二部分第10章,主要讲解javascript是如何在web浏览器中实现的,这些章节介绍了大量的脚本宿主对象,这些对象可以表示浏览器窗口.文档树的内容.这些章节 ...

  5. ASP.NET CORE Web浏览器和Web服务器

    //web浏览器 //浏览器本质的原理:浏览器向服务器发请求,服务器把请求的内容返回给浏览器,然后浏览器把返回的内容绘制成一个图形化的界面 //Socket一种通讯交流的技术 //qq用户把信息通过s ...

  6. [C# 网络编程系列]专题四:自定义Web浏览器

    转自:http://www.cnblogs.com/zhili/archive/2012/08/24/WebBrowser.html 前言: 前一个专题介绍了自定义的Web服务器,然而向Web服务器发 ...

  7. JavaScript 客户端JavaScript之 Web浏览器的环境

    Web浏览器实现的Javascript,通过Web浏览器实现的JavaScript引入了大量可脚本化的对象(1.Web浏览器 2.HTML 3.HTML中的内容)  Web浏览器中的Javascrip ...

  8. cookie是指web浏览器存储的少量数据,该数据会在每次请求一个相关的URL时自动传到服务器中(转)

    基本概念:cookie是指web浏览器存储的少量数据,该数据会在每次请求一个相关的URL时自动传到服务器中. 以博客园为例,我们看看cookie有哪些属性: 1.Name:cookie的名称: 2.V ...

  9. web浏览器中javascript

    1.异步载入一个js代码function loadasync(url) { var head = document.getElementsByTagName("head")[0]; ...

随机推荐

  1. C#执行javascript代码,执行复杂的javascript代码新方式

    1. 使用nuget 包"Jurassic", 注意,如果 nuget上的包 用起来出现错误,请自行下载 github代码,自行编译最新代码成dll,再引用. 官方的nuget包 ...

  2. EF语句拦截器-匹配当前的Controller,Action,User

    示例代码,ps:一切都能实现,关键是你尝试的方向,别把简单问题复杂化导致进入死胡同出不来. using Mobile360.Core.Interfaces; using Mobile360.Core. ...

  3. vue2.0生命周期详解

    首先上图展 <template> <div id="home"> <p>{{ message }}</p> </div> ...

  4. js call方法的使用

    转自:js call call 方法 请参阅 应用于:Function 对象 要求 版本 5.5 调用一个对象的一个方法,以另一个对象替换当前对象. call([thisObj[,arg1[, arg ...

  5. poj 2828(线段树 逆向思考) 插队是不好的行为

    http://poj.org/problem?id=2828 插队问题,n个人,下面n行每行a,b表示这个人插在第a个人的后面和这个人的编号为b,最后输出队伍的情况 涉及到节点的问题可以用到线段树,这 ...

  6. iOS.Animation.CAMediaTiming

    CAMediaTiming Protocol CALayre 和 CAAnimation 实现了CAMediaTiming 接口. CAMediaTiming 定义了8个属性. speed属性: Co ...

  7. vue 动态路由按需加载的三种方式

    在Vue项目中,一般使用vue-cli构建项目后,我们会在Router文件夹下面的index.js里面引入相关的路由组件,如: import Hello from '@/components/Hell ...

  8. dell E6400笔记本 centos7 安装无线网卡

    1.下载  驱动:http://download.csdn.net/detail/nj4506/9752842 2.解压: make  make install 3.将wk.ko拷贝到 /lib/mo ...

  9. Java的反射技术

    什么是反射机制 Java的反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能调用它的任意属性和方法.这种动态获取信息以及动态调用对象属性和方法的即使称为J ...

  10. Java中的四种内部类

    Java中有四种内部类: 成员内部类:定义在另一个类(外部类)的内部,而且与成员属性和方法平级,故称成员内部类.类比于外部类的非静态方法,如果用static修饰就变成了静态内部类 静态内部类:使用st ...