从晶体管到web浏览器
几年前写了这个,想放到网上,招聘很困难,很多现代计算机科学教育真的很糟,很难找到懂得现代计算机堆栈的第一(基本)原理的人。
如果我曾经再次得到了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浏览器的更多相关文章
- 后台启动weblogic成功后,在web浏览器上无法访问
后台启动weblogic成功后,在web浏览器上无法访问,可尝试重启服务器.
- shellinabox基于web浏览器的终端模拟器
1. Shellinabox介绍 Shellinabox 是一个利用 Ajax 技术构建的基于 Web 浏览器的远程终端模拟器,也就是说安装了该软件之后,服务器端不需要开启 ssh服务,通过 Web ...
- React Native 项目运行在 Web 浏览器上面
React Native 的出现,让前端工程师拥有了使用 JavaScript 编写原生 APP 的能力.相比之前的 Web app 来说,对于性能和用户体验提升了非常多. 但是 React Nati ...
- 第十一章:WEB浏览器中的javascript
客户端javascript涵盖在本系列的第二部分第10章,主要讲解javascript是如何在web浏览器中实现的,这些章节介绍了大量的脚本宿主对象,这些对象可以表示浏览器窗口.文档树的内容.这些章节 ...
- ASP.NET CORE Web浏览器和Web服务器
//web浏览器 //浏览器本质的原理:浏览器向服务器发请求,服务器把请求的内容返回给浏览器,然后浏览器把返回的内容绘制成一个图形化的界面 //Socket一种通讯交流的技术 //qq用户把信息通过s ...
- [C# 网络编程系列]专题四:自定义Web浏览器
转自:http://www.cnblogs.com/zhili/archive/2012/08/24/WebBrowser.html 前言: 前一个专题介绍了自定义的Web服务器,然而向Web服务器发 ...
- JavaScript 客户端JavaScript之 Web浏览器的环境
Web浏览器实现的Javascript,通过Web浏览器实现的JavaScript引入了大量可脚本化的对象(1.Web浏览器 2.HTML 3.HTML中的内容) Web浏览器中的Javascrip ...
- cookie是指web浏览器存储的少量数据,该数据会在每次请求一个相关的URL时自动传到服务器中(转)
基本概念:cookie是指web浏览器存储的少量数据,该数据会在每次请求一个相关的URL时自动传到服务器中. 以博客园为例,我们看看cookie有哪些属性: 1.Name:cookie的名称: 2.V ...
- web浏览器中javascript
1.异步载入一个js代码function loadasync(url) { var head = document.getElementsByTagName("head")[0]; ...
随机推荐
- golang 创建一个简单的广播echo服务器
package main; import ( "net" "fmt" "bufio" ) //里面的代码部分参考cmu440课程 //htt ...
- 组委会正在为美团点评CodeM大赛的决赛设计新赛制
比赛有 n 个人参加(其中 n 为2的幂),每个参赛者根据资格赛和预赛.复赛的成绩,会有不同的积分.比赛采取锦标赛赛制,分轮次进行,设某一轮有 m 个人参加,那么参赛者会被分为 m/2 组,每组恰好 ...
- 9.17-9.19h5日记
9.17 ❤关于position(absolute.relative) position:relative: top:100px: right:200px: 如果relative设置值,则是根据它原来 ...
- PAT 1042 字符统计(20)(思路)
1042 字符统计(20)(20 分) 请编写程序,找出一段给定文字中出现最频繁的那个英文字母. 输入格式: 输入在一行中给出一个长度不超过1000的字符串.字符串由ASCII码表中任意可见字符及空格 ...
- hdu 1539 & poj 1416 某某公司
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1539 大意是输入n和m,把m按顺序拆分成若干个数,问这些数和的在小于n的前提下最大为多少 注意必须m的 ...
- 如何判断来访的IP是否是百度蜘蛛ip?
网站日志是可以真实体现网站的状态,通过网站日志我们可以清楚的看到网站每天有多少访客,每天有多少蜘蛛来抓取网站的数据,哪些数据被蜘蛛抓取了.哪些页面在请求数据的时候发现了错误.这些都是可以通过状态码来进 ...
- mysql 5.7.17 建立主从数据库
---恢复内容开始--- 1.确定主/从数据库地址; 2.将主数据库的database dump出来 windows平台用workbench; 其他可以参考: 这位同仁写的比较详细了.我就不谢了.打开 ...
- 那些年,UI设计师还在手工标注和切图时走的弯路
在我从事UI设计师这几年的工作中逐渐发现,最让人糟心的不是应付各种奇葩的需求,完成设计稿,而是交付.每次交付的设计稿和最后开发出来的产品总是让我心塞无比,很少最终产品和我的设计稿是完全一致的. UI设 ...
- activemq , redis
activemq是干什么的?即时消息通信,简单说: A发送消息给activemq 服务,B监听服务获取消息.假如有如下场景: A发送了一个请求,但是这个请求需要做 10 项工作,如果按照正常操作,需要 ...
- 关于win10系统配置变量时,javac编译不出的原因:没用好百度!
在上班时,用笔记本的win8系统成功配置了java环境,于是想把家里的台式也配置一下,可是配置出来后javac却出不来东东,我很费解,重新下载了2次,还是不行,于是就暂时放弃了.那时是17年12月25 ...