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

如果我曾经再次得到了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. [z]重建索引

    https://blog.csdn.net/funnyfu0101/article/details/52961485 所有执行的结果是脚本命令集合,可以用来创建索引: a)在plsql中使用execu ...

  2. log4net引用了Mysql.Data.dll,但是就是不能写到mysql数据库的解决办法

    这两天遇到log4net写日志到mysql数据库中,有时候在A项目中可以,有时候B项目就有问题,有时候测试环境没问题,到正式部署环境又出问题,经过两天的煎熬,终于理清楚了其中的头绪. 1.配置现状 c ...

  3. Linux移植之移植步骤

    在这里总结一下我在移植Linux2.6.22.6内核过程时的步骤.移植成功后最终能挂接做好的根文件系统,并且启动第一个init程序.移植的步骤如下: 1.将网上下载的内核源码文件linux-2.6.2 ...

  4. js对象(BOM部分/DOM部分)

    JS总体包括ECMAScript,DOM,BOM三个部分,但是能够和浏览器进行交互的只有DOM和BOM,那么到底什么是DOM和BOM呢 概念 BOM(Browser Object Model)是指浏览 ...

  5. 全基因组测序 Whole Genome Sequencing

    全基因组测序 Whole Genome Sequencing 全基因组测序(Whole Genome Sequencing,WGS)是利用高通量测序平台对一种生物的基因组中的全部基因进行测序,测定其 ...

  6. P1083龙舟比赛

    题目如下: 现在正在举行龙舟比赛,我们现在获得了最后冲刺时的俯视图像,现在你要输出各条龙舟的名次. 这张图像由r行c列的字符组成,每行的最左边的字符表示起点,所以字符为'S',最右边的字符为'F'.并 ...

  7. Python数据库工具类MySQLdb使用

    MySQLdb模块用于连接mysql数据库. 基本操作 # -*- coding: utf-8 -*-       #mysqldb       import time, MySQLdb       ...

  8. msdn

    https://docs.microsoft.com/en-us/cpp/standard-library/basic-string-class?view=vs-2017

  9. JSP 9个内置对象

    JSP内置对象(隐式对象)是JSP容器为每个页面自动实例化的一组对象,开发者可直接使用,也被称为预定义变量. JSP容器提供了9个内置对象 request // javax.servlet.http. ...

  10. Netty 源码(二)NioEventLoop 之 Channel 注册

    Netty 源码(二)NioEventLoop 之 Channel 注册 Netty 系列目录(https://www.cnblogs.com/binarylei/p/10117436.html) 一 ...