zoukankan      html  css  js  c++  java
  • 从晶体管到web浏览器

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

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

    第一节:我们的路经过晶体管--0.5周

    关于那些晶体管--课程概述。描述FPGAs(现场可编程逻辑门阵列)是怎样用晶体管构造的,描述ICs(集成电路)只是一个在可靠的封装中的晶体管集合。明白LUTs(查找表)和材料。能简洁地说出晶体管原理,但是所有的项目必须建立在彼此之间,所以我们不能建立一个。第一天板和一个工具包被发放。

    构建FPGA板--板卡设计,FPGA BGA回流,FPGA闪存,50mhz时钟,USB JTAG端口和闪光灯(没有特殊的硬件,一个小的cypress usb 微程序控制器做jtag),几个LED,一个复位按钮,一个串行端口(USB-FTDI )还通过USB,SD卡,扩展连接器(ide电缆?)和以太网端口供电。可选,扩展板,主机USB端口,NTSC电视输出,ISA端口和板上的PS / 2连接器,来逗弄您。 我们提供烤箱和万用表温度计做回流焊。

    第二节:什么语言给硬件编码?--0.5周

    与FPGA对话(C,200)-- 对USB MCU 来 bitbang JTAG的一点代码。 一个对即将到来的强度很好的热身。
    闪烁LED(Verilog,10)-- 安装所有Xilinx垃圾,并下载你的第一个位文件。让模拟器工作。学习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和终端的美好。 动态链接真好,好的正如你想要的。

  • 相关阅读:
    (转贴)Visual Studio2005 + Visual SourceSafe 2005 实现团队开发、源代码管理、版本控制
    vss2003的资料说明,转贴自MSDN
    非常经典的网络蜘蛛示例,我是转载在这里的
    Vsi的路径所在
    (转)三种模拟自动登录和提交POST信息的实现方法
    (转)关于网络蜘蛛的知识
    (转)thin的制作DataGrid的HTC,转来自己用做开发
    转帖:麻雀虽小,五脏俱全-C# 创建windows服务、socket通讯实例
    Google Maps API编程资源大全
    C#实现的根据年月日计算星期几的函数(转)
  • 原文地址:https://www.cnblogs.com/xieweikai/p/6817849.html
Copyright © 2011-2022 走看看