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

如果我曾经再次得到了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. javascript 的原型与原型链的理解

    javascript中一切皆对象,但是由于没有Class类的概念,所以就无法很好的表达对象与对象之间的关系了. 比如对象A与对象B之间,它们两个是相对独立的个体,互不干扰,对象A修改自身的属性不会影响 ...

  2. 因为要生成的折线数量是不定的 ,所以需要echarts 动态的为option中的Series添加数据

    series:function(){ var serie=[]; var aa = zhonglei[0].split(","); for( var i=0;i < aa.l ...

  3. Fiddler抓包使用教程-安装配置

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/72876628 本文出自[赵彦军的博客] Fiddler是什么? Fiddler是一 ...

  4. devexpress之barManager 使用

    这次我不想使用ribboncontrol 控件 作为窗口菜单栏,也不想用传统的那种字体的方式 标题栏 一.Bars 1.   把BarManager组件添加到窗体中后,会自动创建两个空的 bars: ...

  5. (转)无效的CurrentPageIndex 值。它必须大于等于0 且小于PageCount 解决方案

    第一种: 当以某种条件来查询的时候 其中的结果是以一个结果为条件的datagrid分页 采用字查询到条件下加入如下代码: [c-sharp] view plaincopyprint? protecte ...

  6. PAT 1039 到底买不买(20)(20 分)

    1039 到底买不买(20)(20 分) 小红想买些珠子做一串自己喜欢的珠串.卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖.于是小红要你帮忙判断一下,某串珠子里是否包含了全部自己想要 ...

  7. jquery源码学习

    1,"use strict"; //16行   用在代码开始处,表示之后的代码将按照严格模式执行

  8. 代码UITableView点击cell跳转

    首先,在tableViewController中设置好 代理和数据源方法: @interface FirstTableViewController ()<UITableViewDataSourc ...

  9. Django报错:__init__() missing 1 required positional argument: 'on_delete'

    原因: 在django2.0后,定义外键和一对一关系的时候需要加on_delete选项,此参数为了避免两个表里的数据不一致问题,不然会报错:TypeError: __init__() missing ...

  10. 9款原型设计工具与Sketch的强强组合,轻松构建交互原型!

    原型设计的发展历史经历了纸上原型.静态线框设计.到现在的可交互式原型.作为设计过程中最初始的阶段,设计师们对原型设计的要求也越来越高.因此,如今的原型设计工具格局也发生了很大的变化. Sketch对于 ...