如何向一块ARM裸板移植linux系统

如何向一块ARM裸板移植linux系统
如何向一块ARM裸板移植linux系统

11. How to port Linux to a raw ARM board

This document provides a summary of the steps when porting Linux to a new ARM platform or

a new processor. In this page we assume that the reader has a knowledge of C and assembly

programming and is familiar with ARM and operating systems concepts such as interrupt handling, system calls and memory management.

Some useful information can be found in the kernel documentation section on how to configure the kernel itself. It is probably best to familiarize with Linux on x86 before if you are not familiar with embedded platforms. In addition to Linux kernel source documentation, some notes maintained by community members are available on booting and setting up Linux for ARM platforms, you can consult the following kernel document and Vincent Sander?s documentation for additional information.

Porting steps

?Install a cross-development environment.

?Setup the board and ensure that the serial port is working so we can print data through the serial port.

?Download and install the Linux kernel, most of the porting work will be done at this level.

?Add board specific code into the kernel tree.

?Build a kernel image to run on the board

?Test that early kernel printk is working

?Get the real printk working with the serial console.

?For a new board, a new board-specific directory should be added as well as support for interrupt handling, kernel timer services and mapping for memory areas.

?Ethernet drivers are usually the next drivers to focus on as they enable setup of NFS root file system to get access to user utilities and applications.

?Filesystem can be provided in different forms which are listed on LinuxFilesystem

Development environment

Development for embedded platforms is usually done using cross-development tools. In the case of Linux, the host platform is often a Linux host computer connected to the target board using Ethernet, serial and/or ICE/JTAG.

The GNU compiler is required to build the Linux kernel. There is more information on downloading and installing GNU tools is available on LinuxDevTools. Other compilers compliant with the new ABI for the ARM Architecture can also be used to compile user-space applications and some libraries.

Install and build the Linux kernel

Download the latest stable release of the Linux kernel sources from https://www.360docs.net/doc/5b13520954.html, and install the source in your local directory. Working from the latest kernel source base is preferred as older versions will not be supported by the community. Later kernel versions usually contain recent bug fixes and enhancements. Older kernels such as 2.4 kernels are no more actively supported.

Adding board specific code

Support code for a new board consist in processor support, board specific code including where devices are mapped etc. and device drivers. Source code for device drivers is based in the drivers/ directory and net/ directories. Board specific code should be placed into the arch/arm/ directory.

The following sections will use ARM Versatile PB926EJ-S as an example and assume that the processor support code already exist. The board intialisation and definition files are located in the arch/arm/mach-versatile directory. ARM Versatile board comes in two different form factors, a compact version (Application Baseboard) and a expandable version (Platform Baseboard). This directory contains the following files:

?clock.[c,h] – Functions handling clock settings

?core.[c,h] –IRQ initialisation, definition of initial IO mappings and low-level platform initialisation

?dma.[c,h] – DMA support code and initialisation

?pci.c – PCI setup

?versatile_[ab,pb].c – board initialisation with functions such as versatile_init(), etc.

The MACHINE_START() macro defined at the end of versatile_pb.c contains the base definition for this platform, using initialisation functions defined in other platform files in this directory.

Header files are located in a similar directory: include/asm-arm/. In the case of versatile files are located in include/asm-arm/arch-versatile/.

?platform.h – contains register definitions for peripherals and controllers on the board

?debug-macro.S –contains definition of the “addruart” macro called by the printk() function to print data on the serial port

?irqs.h – IRQ register definitions

?system.h – contains idle() and reset() functions.

?vmalloc.h – defines constants such as VMALLOC_END.

?…

Connecting it to the main build system

Create a Kconfig file for the board in arch/arm/mach-versatile/ to link this board to the overall build system so that it can be selected when running make *config. Refer to Documentation/kbuild/kconfig-language.txt for a description of the syntax.

A Makefile entry need to exist to enable the systen to recurse into the platform sub-directories.

Use Makefiles from existing boards as starting points and modify as appropriate.

Platform ID

Finally, add your machine group and type ID. A unique identifier can be obtained by registering your machine at https://www.360docs.net/doc/5b13520954.html,/developer/machines/. You could initially assign a local ID in arch/arm/tools/mach-types while developing your BSP locally and then register it to get an official ID. You must be careful when changing kernel version as new machine are regularly added and make sure this doesn?t conflict with the ID you have chosen.

This ID is used very early in the boot process to determine the platform type and pull in the correct initialisation functions. It is used by the boot loader and stored in banked registers

(i.e.r1) before the bootloader hands over to the kernel.

Device drivers

New device driver should be added in the appropriate directories, net/ for network drivers or drivers/ for others. Makefiles and Kconfig files also need to be edited (or created) so they are linked to the rest of the system. The following book provide a good guide on how to develop new device drivers with Linux.

If the board contains controllers or devices for which Linux already has support for, we only need to include these in Kconfig files and pass the correct parameters to these drivers when initialisation is done.

Configure and build a kernel image

Ensure that the cross-toolchain program names are correct and accessible from your execution path (i.e. your PATH environment variable).

To configure the kernel you can use some of the following command:

?make xconfig

?make menuconfig

?make gconfig

?…

These commands assume that you have a cross-compiler accessible on your execution path.

?If support is set to be EXPERIMENTAL, select …Prompt for developmen t and/or incomplete code/drivers? under …Code maturity level options?.

?In System Type, select VERSATILE and correct subtype if this is a family of boards.

?Select the right CPU under …CPU selection? (in the case of Versatile there is one CPU currently for this type of board).

?In the …Device Drivers? -> …Character devices? select the appropriate device driver (ARM_AMBA_PL011 in the case of Versatile).

?In …Boot options? you can also enter your CMDLINE boot parameters. This will only be used as default in case the bootloader doesn?t provide any command line.

For other options you can either use the default or select …No?. The resulting configuration file is stored as .config in the top level directory.

We can now type make dep and make to build a kernel image. If successful, the resulting image is placed in the arch/arm/boot directory. You can either build a compressed image (zImage) or a raw binary image (Image). The ELF file containing debug information (if selected in the Makefile) is called vmlinux and is at the top-level directory. When loading a kernel image onto the board using a debugger, you should use either zImage or Image files.

The vmlinux image can be loaded to perform symbolic debugging.

Kernel boot

Early signs of a working Linux kernel come from the output of printk(), which is routed directly to the first console. Having configured a serial console, we should be able to see some kernel messages on the serial port if it has been setup correctly. Note that often the bootmonitor from the board or the boot loader initialises the serial device, however the kernel should not necessarily rely on this.

The setup of the serial console happens much later during the kernel initialisation process.

Chances are your new kernel probably dies even before that which is where early printk are useful. printk() allows you to print text as early as the first line of C code. The early initialisation

steps are listed in init/main.c:start_kernel(). From this you can see that the console_init() call is done later on after we already had calls to printk().

Early printk() is very useful, however the serial driver should be working to enable further debug. For Versatile platforms, the serial driver is in drivers/serial/amba-pl011.c.

Debug with kgdb

KGDB enables developers to debug the kernel while running and set breakpoints or do single stepping at source code level. If available, you can use two serial ports on the target, one used for KGDB communication and the other to print messages. You should use a crossover-cable (or null-modem) to connect it to your development host. Doing everything using one serial port is also possible.

You should select the Remote GDB kernel debugging which is listed under Kernel hacking when you configure the kernel and then do a …make clean? and recompile the kernel to make sure that debugging symbols are compiled into the generated Linux image.

Run the new kernel image. At this stage the kernel will be waiting for a gdb client connection. If there is a cross-over serial cable connected between the serial port on the target and the host, you can then set the appropriate baud rate and start the gdb on your host:

?stty -F /dev/ttyS0 38400

?arm-none-linux-gnueabi-gdb vmlinux

At the gdb prompt, type: target remote /dev/ttyS0

If successful, you should be talking to the kernel through KGDB.

Interrupt handling

When porting the kernel to a new board it often hangs in the calibration step. This is normal if the interrupt code is not yet implemented in which case jiffies are never updated. Before

adding support code for interrupt handling you need to identify interrupt controllers, all interrupt sources and how they are routed.

The following steps are involved to handle interrupts:

?include/asm-arm/arch-versatile/entry-macro.S: this file contains a macro called get_irqnr defined used to determine the interrupt number when an interrupt is generated. This function is board specific.

?arch/arm/kernel/entry-armv.S: this file contains the definition of the irq_handler() which in turn calls the asm_do_IRQ() function which handles all hardware IRQs.

?arch/arm/kernel/irq.c: this file contains most of the code handling interrupts including the definition of asm_do_IRQ() as well as enabling or disabling specific interrupts numbers.

Individual IRQ handlers are invoked by the __do_irq() function.

A descriptor structure (see irqdesc structure in include/asm-arm/mach/irq.h) is associated with

each registered IRQ source. This structure contains pointers to functions declared by device drivers to handle individual interrupts.

System time and timer

Linux relies on a system timer to advance the tick count, jiffies. Without this, Linux won?t run and will stop in calibrate_delay() during the startup process as jiffies will never be incremented.

Access to a real-time clock (RTC) device is also required to obtain the calendar date and time when the kernel boots up.

ARM Versatile board includes primecell SP804 which provide facilities for periodic timers. One of the timers is used to generate system ticks. This is done at the end of arch/arm/mach-versatile/core.c with the definition and initialisation of the versatile_timer structure.

【最新文档】移植法案例word版本 (5页)

本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除! == 本文为word格式,下载后可方便编辑和修改! == 移植法案例 篇一:发明创造技巧——移植法.doc 龙源期刊网 .cn 发明创造技巧——移植法 作者:银月 来源:《发明与创新(学生版)》201X年第06期 把大家已经知道的原理,已有的物品或方法等,移植运用(来自:WwW. : 移植法案例 )到自己的发明上,得到一项新的发明,这种方法叫做移植法。这种技术 性移植是发明创造的一条重要途径。下面例举两个利用了移植法的小发明; 充气太阳灶 太阳能对人们极有吸引力,但目前的太阳灶造价高,工艺复杂,又笨重(50千 克左右),调节也麻烦,野外工作和旅游时携带不方便。发明者在调查研究的基 础上,明确了主攻方向:简化太阳灶的制作工艺,减轻重量,减少材料消耗, 降低成本,获取最大的功率。他们首先把两片圆形塑料薄膜边缘粘结,充气后 就膨胀成一个抛物面,再在反光面上贴上真空镀铝涤纶不干胶片。用打气筒向 内打气,改变里面气体压强,随着打气的多少,上面一层透明膜向上凸起,反 光面向下凹,可以达到自动会聚反射光线的目的。这种“无基板充气太阳灶” 只有4千克重,拆装方便,便于携带。 该发明实际上是多种移植的结果:发明者把充气玩具的技术,日常商品商标的 不干胶贴片,凸透镜似的抛物面结构,移植到新的太阳灶上来,把光学、流体 力学的原理等知识,移植到太阳灶的设计上,从而成功地完成了小发明。 蜡烛灯 蜡烛是人们常用的一种照明工具,但烛焰怕风,烛体不易固定,亮度不能控制。怎样改进这些缺点呢?湖北监利中学的柳国弘同学先考虑固定烛体与防风,他将蜡烛插在一个铁筒中,罩上一个玻璃罩。他联想到卡口式灯泡的固定方式,并 借用到蜡烛灯上,安了个弹簧以使烛焰保持在灯罩的最佳中心位置。

微型计算机系统期末习题答案

8086微型计算机系统考试题目答案 一、填空题(每空1分,共20分) 1、微型计算机硬件系统可分成为 CPU 、存储器和 I/O接口三大模块,模块之间通过总线连接而成。在系统与输入/输出设备之间,必须通过I/O接口相连接。 2、目前计算机系统主要有两种体系结构,它们分别是冯.诺依曼和哈弗,有更高运行效率的是哈弗。 3、已知X=68,Y=-12,若用8位二进制数表示,则[X+Y]补=50H,此时,CF=_0__;[X-Y]补= 38H/56D, OF=_0__。 4、8086 CPU的基本总线周期包含了 4个T状态。 5、I/O端口地址有两种编址方式,它们分别是独立编址和存储统一编址;接口电路中,输入端口必须具有缓冲功能,而输出端口必须具有锁存功能。 6、硬件中断可分为可屏蔽中断_和__ 非屏蔽中断两种。 7、8086/8088 CPU响应可屏蔽中断的条件是_IF=1 。 8、通用微型计算机的CPU由 _微处理器、存储器以及I/O接口电路 _组成,8086CPU按照结构有_EU和BIU _2个独立的处理部件组成。 9、计算机最常用的数据编码是补码,若机器字长为8位,则十进制数-128的补码是10000000B ; 若有带符号数X=01H,Y=81H,则由计算机作8位减法运算X-Y后,累加器中的数是10000000B ,借位标志CF= 1 、符号标示SF=__1___、溢出标志OF=__ 1__。由此可判断结果真值应为-128 10. 8086/8088 CPU在RESET信号到来后其CS和IP的值分别为_ FFFFH和0000H 。 11. CPU与外设传送数据时,输入/输出控制方式有_ 无条件方式 _,_ 查询方式 _,中断方式和__ DMA方式。 12. 8086 CPU响应一个可屏蔽中断请求时,将向外设发送两个中断响应脉冲,通过数据总线读入中断类型码。 13. INTEL 8253采用BCD码计数时,其最大计数值为__ 0000H ,此时的计数初值为__10000D 二、选择题 1.判断两个无符号数加法运算是否溢出的标志是_D__ A. ZF ; B. SF; C. CF; D. OF 2.8086CPU在计算物理地址时,应将段地址____C___。 A.左移1位; B.右移1位; C.左移4位; D.右移4位 3.INTEL 8088/8086 CPU 由____D_组成。 A 通用寄存器、专用寄存器和ALU; B.ALU、FR及8个16位通用寄存器 C CS、ES、SS、DS及IP、指令队列; D EU和BIU 4.下列4种描述中正确的是__B _。 A.汇编语言只由指令语句构成。 B.汇编语言语句包括指令语句和伪指令语句和宏指令语句。 C.指令语句和伪指令语句都能经汇编程序翻译成机器代码。 D.指令语句和伪指令语句都不能经汇编程序翻译成机器代码。 5. 已知内存单元(20510H)=31H,(20511H)=32H,(30510H)=42H,(30511H)=43H,且AX = 3A7BH,DS=2000H, SS=3000H, BP = 0500H,则执行MOV AL, [BP+10H]后AX= D。 A. 3A31H B. 3231H C. 427BH D. 3A42H 6.一微机系统采用一片8259A,若8259A设置为普通全嵌套、非缓冲、非自动中断结束等方式,并将ICW2设置为08H,

arm-linux下usb转串口移植手册

arm-linux下usb转串口移植手册: 讲述在嵌入式平台上,移植usb转串口的步骤: 1、配置Kernel 2、文件系统配置等。 Kernel:在配置内核时:加入usb转串口的支持、加入usb转串口器件的支持。 不同厂家的usb转串口工具需要的驱动可能不一样。 Device Drivers ---> USB support ---> --- USB port drivers USB Serial Converter support ---> <*> USB Serial Converter support [*] USB Serial Console device support [*] USB Generic Serial drivert < > USB AIRcable Bluetooth Dongle Driver (EXPERIMENTAL) <*> USB FTDI Single Port Serial Driver (EXPERIMENTAL) 本次实验才用的是FTDI的usb转串口工具 在配置Kernel时,还可以加入对其他厂家的驱动支持。 文件系统: 1、在/dev目录下建立设备文件/dev/ttyUSB0 mknod /dev/ttyUSB0 c 188 0 2、在运行/sbin/getty登陆命令之前要先设置好:usb转串口对应端口的波特率、停止位等。int usb_to_serial_init(viod) { iUSBTORS232 = open( "/dev/ttyUSB0", O_RDWR); if (iUSBTORS232 iRS232 < 0) { printf("Can't open device dev/ttyUSB00"); return -1; } set_speed(iUSBTORS232 iRS232,BAUDRA TE); set_Parity(iUSBTORS232 iRS232,8,1,'n'); close(iRS232); } 3、在/etc/inittab 加入如下命令。同时用consel和usb转串口工具登陆。 # Example of how to put a getty on a serial line (for a terminal) ::respawn:/sbin/getty -L ttyS0 115200 vt100 ::respawn:/sbin/getty -L ttyUSB0 115200 vt100

MMS&WAP移植文档

MMS&WAP移植报告 本次在6219平台上移植的是移软的MMS&WAP。在正式开始移植之前我们先确定了移植移软的MMS&WAP所要求的硬件和软件资源,进行了可行性分析、需求分析,然后进入设计阶段,最后是测试阶段,整个过程严格的按照软件工程的迭代模型来执行。 第一步,创建TASK 在custom_config.h里面定义TASK ID ----INDX_CUSTCMS,这里创建的task数不能大于16,定义三个模块附属于这个TASK,三个模块分别为MOD_CMSMMS、MOD_CMSWAP、MOD_CMSMAP(用户定义的模块数也不能大于16)。 在custom_config.c里面 完成task到模块id的映射,并实现创建task的函数,给定任务优先级212。const comptask_info_struct custom_comp_config_tbl[ MAX_CUSTOM_TASKS ] = { /* INDX_CUSTOM1 */ {"CUST1", "CUST1 Q", 210, 1024, 10, 0, #ifdef CUSTOM1_EXIST custom1_create, KAL_FALSE}, #else NULL, KAL_FALSE}, #endif /* INDX_CUSTOM2 */ {"CUST2", "CUST2 Q", 211, 1024, 10, 0, #ifdef CUSTOM2_EXIST custom2_create, KAL_FALSE}, #else NULL, KAL_FALSE}, #endif //Jo++ 05-05-16 added the Index_CustCMS /* INDX_CUSTCMS */ {"CUSTCMS", "CUSTCMS Q", 212, 1024, 30, 100, #ifdef CUSTCMS_EXIST //Jo++ 需事先定义 customCMS_create, KAL_FALSE}, #else NULL, KAL_FALSE}, #endif //Jo-- }; 第二步,修改makefile,在原mtk工程中添加进去wap mms模块。

成功移植OpenSSH到ARM Linux开发板

成功移植OpenSSH到ARM Linux开发板 概述 如果是用到一些没有SSH的开发板,对于部分的应用开发来说,会受到影响,比如使用ARM DS-5进行RSE远程管理操作时,就会出现错误。下面就具体如何进行OPENSSH移植进行详细介绍。 步骤 1.下载源码包如下,下载 openssh、openssl 和 zlib 三个包。 openssh ?本地下载:openssh-6.6p1.tar.gz(1.22 MB, 下载次数: 2470) ?官网下载:https://www.360docs.net/doc/5b13520954.html,/portable.html openssl ?本地下载:openssl-1.0.1h.tar.gz(4.27 MB, 下载次数: 2647) ?官方下载:https://www.360docs.net/doc/5b13520954.html,/source zlib ?本地下载:zlib-1.2.8.tar.gz(557.71 KB, 下载次数: 3499) ?官方下载:https://www.360docs.net/doc/5b13520954.html,/ 2.部署工作目录创建用户主目录下创建工作目录: 3.解压并编译

注意:openssh不需要make install 4.操作目标板 b)从PC机上将以下文件拷贝到目标板Linux系统中 PC机 /home/gary/work/openssh-6.6p1/ 目录下的 ?scp sftp ssh sshd ssh-add ssh-agent ssh-keygen ssh-keyscan 共8个文件拷

贝到目标板 /usr/local/bin ? moduli ssh_config sshd_config 共3个文件拷贝到目标板 /usr/local/etc ? sftp-server ssh-keysign 共2个文件拷贝到目标板 /usr/libexec c )生成Key 文件 将生成的 ssh_host_*_key 这4个文件copy 到目标板的 /usr/local/etc/ 目录下。其中 ssh_host_ed25519_key 是SSH 第二版协议用到的key ,放到开发板之后,要 d )修改目标板passwd 文件。 5.测试 如果开发板的 root 用户还没有密码,键入以下命令然输入两次密码来修改,否可以用 ps 命令查看sshd 是否在工作 如果运行的过程中有提示缺少动态连接库,可以在主机上搜索相应文件,拷贝到目标板/lib/目录下面,注意创建软连接! OK !不出意外的话可以成功,

eMwin 移植 文档飞利浦 恩智浦

uC/GUI(emWin)的应用与移植 当你开始使用emWin进行编程时,通常遵循以下的步骤: 第1步:配置emWin 第一步通常是通过修改头文件LCDConf.h来配置emWin。LCDConf.h中的宏定义描述了LCD显示部分硬件特性;根据你的具体情况修改这些宏定义(例如显示屏的长、宽,每像素点用几位表示,LCD控制器的类型等参数)。 第2步:定义LCD的底层驱动函数 底层函数包括对LCD(控制器)的初始化函数,LCD显示缓冲区的读写函数等,完成对LCD显示硬件的直接操作。 对于映射在系统存储器上的LCD,对显示缓冲区的操作仅需要在LCDConf.h中进行定义就可以了。但对于采用I/O端口/缓冲区操作的LCD,就必须定义相应的接口函数了。 第3步:编译,链接和测试例子代码 emWin对于单任务和多任务环境下的应用都提供了例子代码。在编程之前,对这些例子代码进行编译、链接和测试,使你能够初步了解这些代码的使用。 第4步:修改例子程序 对例子代码作少量的修改。逐步添加一些额外的指令,例如显示不同大小的文字,显示多行等等,从而进一步理解代码的应用。 第5步:emWin的多任务应用,加入到你的操作系统中 如果你的系统有可能多个任务同时对显示进行操作,这时就要用到GUITask.C文件中的GUI_MAXTASK 和GUI_OS宏。 第6步:采用emWin编写你自己的应用 到这一步你应该对怎样使用emWin有一个清楚的了解了。考虑如何采用emWin提供的函数来构建你的应用,并通过阅读手册来获得各函数更详细的功能和使用上的信息。 emWin的移植 移植是指对emWin进行配置和修改,使它能够在你的目标系统上运行。参考第3.4节中的第一步和第二步,移植工作主要是针对配置头文件中的宏定义进行修改。 这些宏包括: 1. LCD宏,定义了显示的尺寸和一些可选择的特性(例如镜像,等等)

ARMLinux移植基本概念

ARM的嵌入式Linux移植体验之基本概念 日前,笔者作为某嵌入式ARM(硬件)/Linux(软件)系统的项目负责人,带领项目组成员进行了下述工作: (1)基于ARM920T内核S3C2410A CPU的电路板设计; (2)ARM处理下底层软件平台搭建: a.Bootloader的移植; b.嵌入式Linux操作系统内核的移植; c.嵌入式Linux操作系统根文件系统的创建; d.电路板上外设Linux驱动程序的编写。 本文将真实地再现本项目开发过程中作者的心得,以便与广大读者共勉。第一章将简单地介绍本ARM开发板的硬件设计,第二章分析Bootloader的移植方法,第三章叙述嵌入式mizi Linux的移植及文件系统的构建方法,第四章讲解外设的驱动程序设计,第五章给出一个已构建好的软硬件平台上应用开发的实例。 如果您有嵌入式系统的开发基础,您将非常容易领会本文讲解地内容。即便是您从来没有嵌入式系统的开发经历,本文读起来也不会生涩。您可以通过如下email与作者联系:21cnbao@https://www.360docs.net/doc/5b13520954.html,。 2.ARM体系结构 作为一种RISC体系结构的微处理器,ARM微处理器具有RISC体系结构的典型特征。还具有如下增强特点:

(l)在每条数据处理指令当中,都控制算术逻辑单元(ALU)和移位器,以使ALU和移位器获得最大的利用率; (2)自动递增和自动递减的寻址模式,以优化程序中的循环; (3)同时Load和Store多条指令,以增加数据吞吐量; (4)所有指令都条件执行,以增大执行吞吐量。 ARM体系结构的字长为32位,它们都支持Byte(8位)、Halfword(16位)和Word(32位)3种数据类型。 ARM处理器支持7种处理器模式,如下表: 大部分应用程序都在User模式下运行。当处理器处于User模式下时,执行的程序无法访问一些被保护的系统资源,也不能改变模式,否则就会导致一次异常。对系统资源的使用由操作系统来控制。 User模式之外的其它几种模式也称为特权模式,它们可以完全访问系统资源,可以自由地改变模式。其中的FIQ、IRQ、supervisor、Abort和undefined 5种模式也被称为异常模

白桦的移植技术-最新文档资料

白桦的移植技术 随着现代城市对景观环境的不断提高,大树移植以其优化城市绿地结构,改善城市绿地景观等特点逐渐被采用。白桦枝叶扶疏,姿态优美,尤其是树干修直,洁白雅致,十分引人注目,是园林绿化的优选树种。这几年,我们在移植白桦的过程时总结了以下几个技术要点。 、前期准备 1)掌握白桦特性、生态习性及苗木地、种植地的土壤等 环境因素。 2)准备好必须的机械设施(如吊车,运输车等)、人力 及辅助材料,运输路线,并制定合理的起运栽植方案。 3)号苗及苗木处理:选择生长强健,无病虫害的、符合 绿化设要求的苗木,预先进行疏枝及修剪,修剪时剪口必须平滑,截面尽量缩小,修剪2 公分以上的枝条,剪口应涂沫防腐剂(涂白调和漆或石灰乳)。 4)白桦栽植穴的处理:如白桦树穴除考虑土坨大小外, 还要预留出人工坑内作业空间,树穴基部土壤保持水平。新换的土,一定要将虚土夯实并用水下沉,以防止土壤不平白桦放入后发生倾斜。 二、起运栽植 1、时间

栽植白桦的时间根据北方的气候条件选在3 月20日到4 月 10 日。此时白桦还在休眠,树液尚未流动。白桦移植应做到随 2、起苗 这次移栽的白桦树胸径在距地面一米三处达到20 厘米左右,按着技术规定,根系要保证不小于胸径的10-12 倍,这次我们起的树坨直径是2 米,土坨的高度为直径的0.6 倍。土坨要完好、平整。土坨形似苹果,底部不超过土坨直径的三分之一。起挖前以白桦树干为中心,按规定尺寸划出圆圈,在圈外挖60-80 厘米的操作沟,至规定深度,挖时先去表土,见表土为准,再行下挖,挖时遇粗根必须用锯锯断再削平,不得硬铲,以免造成散 坨。修坨,用铣将所留土坨修成上大下小呈截头圆锥型的土球。 收底,土球底部不应留的过大,一般为土球直径的1/3 左右。土球修成圆形之后,立即用预先湿润的草包将土球围住,并用湿润的草绳横腰绕, 7-10 圈,捆紧。将围腰草绳捆好后就开始包扎土球,一般需要2-3 人同时操作。用草绳包土球时,将双股草绳的一头系在树干基部,然后从土球上部往下绕过土球底部,从土球的对面再绕上去,将草绳每隔5-8 绕1 圈,这样从上绕到下,再从下绕到上,反复缠绕,就能将整个土球包住。拉草绳的人每拉一次草绳就用小木锤顺着草绳前进的方向锤好土球肩部的草绳,使草绳紧紧套住底部。土球包好以后,将草绳拴绕在树干的根基处,并在土球腰部密集绕捆草绳 10-14 圈,在腰箍上打成

微型计算机原理作业第六章习题与思考题

第六章习题与思考题 典型例题解析 例6-1 试述PC微机中断系统的分类与特点。 答:PC微机系统中断包括硬件(外部)中断和软件(内部)中断两大类。硬件中断包括不可屏蔽中断NMI和可屏蔽中断INTR。它们都由外部硬件产生。软件中断包括软件中断INT nH和CPU内部特殊中断,它们由内部中断指令或执行程序过程中出现异常产生的。软件中断又有DOS中断和BIOS中断之分。 硬件中断的特点是: (1)硬中断是外部事件而引起的中断,因此,硬件中断具有随机性和突发性。 (2)在硬件中断响应周期,CPU需要发中断回答信号(非屏蔽硬件中断不发中断回答信号)。 (3)硬件中断的中断号由中断控制器提供(非屏蔽硬件中断的中断号由系统指定为02H) (4)硬件中断一般是可屏蔽的(非屏蔽硬件中断是不可屏蔽的)。 软件中断的特点是: (1)软件中断是执行中断指令而产生的,无需外部施加中断请求信号。在程序需要调用某个中断服务程序时,只要安排一条相应中断指令,就可转去执行所需要的中断程序,因此,中断的发生不是随机的,而是由程序安排好的。 (2)在软件中断响应周期,CPU不需要发中断回答信号。 (3)软件中断的中断类型号是在指令中直接给出,因此,不需要使用中断控制器。 (4)软件中断是不可屏蔽的。 例6-2 试述可编程控制器8259A的作用。 答:可编程控制器8259A在协助CPU处理中断事务中所起的作用主要是: (1)接受和扩充外部设备的中断请求。外设的中断请求,并非直接送到CPU,而是通过8259A接受进来,再由它向CPU提出中断请求。一片8259A可授受8个中断请求,经过级联可扩展到8片8259A,能接受64个中断请求。 (2)进行中断优先级排队。外设的中断优先级排队,并不是CPU安排,而是由8259A安排的。即由8259A中断请求输入引脚(IR)的编号决定的。连到IR0上的外设中断优先级最高,连到IR7上的外设中断优先级最低。 (3)向CPU提供中断类型号。其过程是先在8259A初始化时,将中断源的中断类型号写入8259A的ICW2,当CPU响应中断,进入中断响应周期,用中断回答信号INTA2,再从8259A读取这个中断类型号。 例6-3 试述中断向量表的作用及构成。 答:中断向量也即中断服务程序入口地址,系统中所有的中断服务程序入口地址集中起来放到存储器的某一区域内,这个存放中断向量的存储区就叫中断矢量表。中断向量表提供了每一个中断服务程序唯一的确定的入口地址,该入口地址包括4个字节,低2个字节的内容为中断服务程序的偏移地址IP,高2个字节的内容为中断服务程序的段基值CS。.把系统中所有的中断向量集中起来存入到存储器的某一存储区内,这个存放中断向量的存储区就叫中断向量表或中断服务程序入口地址表(中断服务程序首址表)。实模式下,规定把存储器的0000~3FFH共1024个地址单元作为中断向量存储区。

Linux C语言 socket编程 聊天室 可移植到arm开发板

sockets聊天室 1.1介绍 包括一个客户端和一个服务器。可实现多人聊天和两人一对一单独聊天。 1.2开发环境和工具 Linux gcc 1.3程序设计 服务器: 1. 声明一个client结构体,包含用户自己的socket描述符mid,自己的用户名name以及 与自己聊天对象的Socket描述符fid(默认是-1,即公共聊天室)。并定义一个结构体数组。 2. 服务器新建一个socket设置默认的ip为自动获取,调用bind()函数绑定服务器socket 与ip。 3. 开启listen()监听客户端的连接请求。 4. 在while循环里,用accept()等待连接,连接成功后,把accept()返回的socket描述 符存入client结构体数组中。 5. 每成功新建一个连接,就创建一个对应的子线程,接收并转发消息。 6. 定义void rec_snd(int n)这个函数,用于接收和转发消息。可选择公共聊天室和私聊, 私聊需要正确输入对方的名字。连接建立以后就可以发送消息。当接收的消息为bye 时,断开当前连接,如果是一对一私聊,一方断开另一方自动转入公共聊天室。 客户端: 1.新建一个socket,并与ip,端口进行绑定。 2.调用connect连接服务器。连接成功后新建一个线程用于发送消息, 主线程在while中调用read()接收服务器消息。 3.Snd()函数用于向服务器发送消息。 4._select()函数用于选择功能。 1.4应用演示 服务器端成功开启等待连接:

当有客户端连接时,会显示ip端口,socket标识符信息。客户端成功连接上服务器时会收到提示输入用户名: 输入姓名后会提示选择功能:

系统移植方案

文档作者:cyt2005 提交时间:2007年7月06日 系统移植方案 Mysql的版本是mysql-5.1.19-win32 操作系统是WINXP2 移植过程中重点问题 数据类型差异 ORACLE数据库和MYSQL数据库在数据类型方面差异比较大,而且数据类型也是一个数据库存储数据的基础,所以找到数据类型之间的对应是整个系统进行移植的基础。以下给出了ORACLE →MYSQL数据类型的对应关系。b5E2RGbCAP 数值类型: NUMBER → DECIMAL,精度刻度都不变 注:如果是序列用BIGINT 字符串类型: VARCHAR2 → VARCHAR长度不变。 LONG → LONGTEXT 这里有可能遇到的问题是超过主键key长度的问题,根据实际情况适当修改,如果是TEXT类型也需要指名长度,否则建立key会报错p1EanqFDPw 日期类型: DATE→DATETIME

TIMESTAMP(N> TIMESTAMP SQL语法差异 SEQUENCE: MYSQL没有ORACLE中的SEQUENCE对象,我们在迁移的时候需要特别注意,一般SEQUENCE有两种用途:DXDiTa9E3d 1、作为表中自增字段的序列号。 2、程序中获得自动编号。 MYSQL数据类型中存在 AUTO_INCREMENT为自增数据类型。我们可以利用该数据类型变通一下来满足我们现有系统中的SEQUENCE功能。RTCrpUDGiT 对于ORACLE中SEQUENCE作为表的自增列一般是通过与触发器绑定实现的,在MYSQL中我们可以直接利用MYSQL的AUTO_INCREMENT类型来实现。5PCzVD7HxA ORACLE开发的应用程序中直接SELECT SEQUENCT来获得自动编号,对于这个功能我们也可以利用MYSQL的AUTO_INCREMENT类型来实现。jLBHrnAILg 首先介绍一个函数,我们可以利用如下函数查询最后一个序列号的值: mysql> SELECT LAST_INSERT_ID(>。 +------------------+ | LAST_INSERT_ID(> | +------------------+

linux arm 移植手册(分享)

Linux系统移植 目 录 第一部分 前言 (8) 1 硬件环境 (8) 1.1主机硬件环境 (8) 1.2 目标板硬件环境 (8) 1.3工具介绍 (8) 2软件环境 (8) 2.1主机软件环境 (8) 2.1.1 Windows 操作系统 (8) 2.1.2 Linux操作系统 (8) 2.1.3 目标板最后运行的环境 (9) 2.2 Linux下工作用户及环境 (9) 2.2.1 交叉工具的安装 (9) 2.2.2 u-boot移植工作目录 (9) 2.2.3 内核及应用程序移植工作 (9) 2.3 配置系统服务 (10) 2.3.1 tftp服务器的配置 (10) 2.4 工具使用 (12) 2.4.1 minicom的使用 (12) 3 作者介绍 (13) 3.1 策划, 组织, 指导, 发布者 (13) 3.2 ADS bootloader部分 (13) 3.3 交叉工具部分 (13) 3.4 uboot部分 (13) 3.5 内核部分 (13) 3.6 应用程序部分 (13) 3.7 网卡驱动部分 (13) 3.8 Nand Flash 驱动部分 (13) 第二部分 系统启动bootloader的编写(ADS) (14) 1 工具介绍 (14) 1.1 ADS 命令行命令介绍 (14) 1.1.1 armasm (14) 1.1.2 armcc, armcpp (14) 1.1.3 armlink (14) 2 基本原理 (15) 2.1 可执行文件组成及内存映射 (15) 2.1.1 可执行文件的组成 (15)

2.1.3 启动过程的汇编部分 (17) 2.1.4 启动过程的C部分 (17) 3 AXD的使用以及源代码说明 (18) 3.1 源代码说明 (18) 3.1.1 汇编源代码说明 (18) 3.1.2 C语言源代码说明 (23) 3.1.3 源代码下载 (23) 3.2 AXD的使用 (23) 3.2.1 配置仿真器 (23) 3.2.2 启动AXD 配置开发板 (23) 第三部分 GNU交叉工具链 (25) 1 设置环境变量,准备源码及相关补丁 (25) 1.1 设置环境变量 (25) 1. 2 准备源码包 (25) 1.2.1 binuils (25) 1.2.2 gcc (25) 1.2.3 glibc (25) 1.2.4 linux kernel (26) 1.3 准备补丁 (26) 1.3.1 ioperm.c.diff (26) 1.3.2 flow.c.diff (26) 1.3.3 t-linux.diff (26) 1.4 编译 GNU binutils (26) 1.5 准备内核头文件 (26) 1.5.1 使用当前平台的gcc编译内核头文件 (26) 1.5.2 复制内核头文件 (27) 1.6 译编glibc头文件 (27) 1.7 编译gcc第一阶段 (27) 1.8 编译完整的glibc (27) 1.9 编译完整的gcc (28) 2 GNU交叉工具链的下载 (28) 2.1 ARM官方网站 (28) 2.2 本文档提供的下载 (28) 3 GNU交叉工具链的介绍与使用 (29) 3.1 常用工具介绍 (29) 3.2.1 arm-linux-gcc的使用 (29) 3.2.2 arm-linux-ar 和 arm-linux-ranlib的使用 (30) 3.2.3 arm-linux-objdump的使用 (30) 3.2.4 arm-linux-readelf的使用 (31) 3.2.6 arm-linux-copydump的使用 (32) 4 ARM GNU常用汇编语言介绍 (32)

NB-IoT协议SDK移植说明文档docx.docx

NB-IOT 协议接入说明文档 Version: 1.0

1、资源模型介绍 1.1协议介绍 OneNET提供了采用LWM2M+CoAP协议接入设备的说明文档,用户可以下载学习相关的具体内容,其中包括: LWM2M协议的介绍 LWM2M是OMA组织制定的轻量化的M2M协议。LwM2M定义了三个逻辑实体: ?LWM2M Server 服务器; ?LWM2M Client 客户端,负责执行服务器的命令和上报执行结果; ?LWM2M 引导服务器Bootstrap Server,负责配置LWM2M客户端。 在这三个逻辑实体之间有4个逻辑接口: ?Device Discovery and Registration:客户端注册到服务器并通知服务器客户端所支持的能力; ?Bootstrap:Bootstrap Server配置Client; ?Device Management and Service Enablement:指令发送和接收; ?Information Reporting:上报其资源信息。 图1-1 LWM2M协议栈 ?LWM2M Objects:每个对象对应客户端的某个特定功能实体。LWM2M 规范定义

了以下标准Objects,比如 o urn:oma:lwm2m:oma:2; (LWM2M Server Object); o urn:oma:lwm2m:oma:3; (LWM2M Access Control Object); o每个object下可以有很多resource,比如Firmware object可以有Firmware版本号,size等resource; o Vendor可以自己定义object。 LWM2M Protocol:定义了一些逻辑操作,比如Read, Write, Execute, Discover or Observe等。 LWM2M协议的具体内容和消息格式可以参考OMA的网站 https://https://www.360docs.net/doc/5b13520954.html,/wiki/OMA_LWM2M CoAP协议的说明 CoAP(Constrained Application Protocol)协议是IETF提出的一种面向网络的协议,采用了与HTTP类似的特征,核心内容为资源抽象、REST式交互以及可扩展的头选项等。CoAP协议基于REST构架,REST是指表述性状态转换架构,是互联网资源访问协议的一般性设计风格。为了克服HTTP对于受限环境的劣势,CoAP既考虑到数据报长度的最优化,又考虑到提供可靠通信。一方面,CoAP提供URI,REST式的方法如GET、POST、PUT和DELETE,以及可以独立定义的头选项提供的可扩展性。另一方面,CoAP基于轻量级的UDP协议,并且允许IP多播。为了弥补UDP传输的不可靠性,CoAP定义了带有重传机制的事务处理机制。并且提供资源发现机制,并带有资源描述。

移植树木请示文档3篇

移植树木请示文档3篇Request document for transplanting trees

移植树木请示文档3篇 小泰温馨提示:请示报告是机关、事业和企业单位在公文往来中经常用到的重要评议体之一。主要用于向上级机关请求指示、请示批准某一事项的报告。本文档根据请示报告内容要求展开说明,具有实践指导意义,便于学习和使用,本文下载后内容可随意修改调整及打印。 本文简要目录如下:【下载该文档后使用Word打开,按住键盘Ctrl键且鼠标单击目录内容即可跳转到对应篇章】 1、篇章1:移植树木请示文档 2、篇章2:移植树木请示文档 3、篇章3:移植树木请示文档 规划先行,重点工程铺开,树木逐步移栽。移植树木的请示该怎么写?下文是移植树木请示,欢迎阅读! 篇章1:移植树木请示文档 汲取6.6南山火灾教训,根据电力线路规程的要求,需将南山电杆、线路附近的树木全部移植或裁剪,共计处理树木1668余颗;其中110kv进线区的178颗柏树和35kv出线处190颗松柏要求修剪到1米高度,剩余的要求裁剪或移植。(树木数量详见附表:南山站周边树木明细表),本请示报告,已于

六月十三日上报绿化办,因资金问题,一直未能解决,请上级领导协助督促处理为盼。 篇章2:移植树木请示文档【按住Ctrl键点此返回目录】小组,因县乡规划自然沙洲退洲返田,原来沙洲一些零星树木(包括花果树、人工栽培樟树、)尽快移植,为加强生态文明建设,合理保护资源,恳请贵局批复XXX组xxx有限公司)。 篇章3:移植树木请示文档【按住Ctrl键点此返回目录】东花园提升改造工程已于20XX年4月2日正式开工,今年园区铺开的主要基础设施工程为:打通西口学府街通往园区内的360米施工道路;开挖400亩生态如意形水系;形成园区4.8公里内8字形主干道路基工程;6000米左右的排污管网铺设,百亩绿化示范区建设等工程,计划完成投资额1亿元人民币。 按照规划先行,重点工程铺开,树木逐步移栽的原则,施工单位并云湖工程部反复调查,递交了《关于花园提升改造工程并涉及树木移栽情况报告》见附件。

在STM32中移植FATFS文件系统

STM32的FATFS文件系统移植笔记 一、序言 经常在网上、群里看到很多人问关于STM32的FATFS文件系统移植的问题,刚好自己最近也在调试这个程序,为了让大家少走弯路,我把我的调试过程和方法也贡献给大家。 二、FATFS简介 FatFs Module是一种完全免费开源的FAT文件系统模块,专门为小型的嵌入式系统而设计。它完全用标准C语言编写,所以具有良好的硬件平台独立性,可以移植到8051、PIC、AVR、SH、Z80、H8、ARM等系列单片机上而只需做简单的修改。它支持FATl2、FATl6和FAT32,支持多个存储媒介;有独立的缓冲区,可以对多个文件进行读/写,并特别对8位单片机和16位单片机做了优化。 三、移植准备 1、FATFS源代码的获取,可以到官网下载:https://www.360docs.net/doc/5b13520954.html,/fsw/ff/00index_e.html最新版本是R0.09版本,我们就移植这个版本的。 2、解压文件会得到两个文件夹,一个是doc文件夹,这里是FATFS的一些使用文档和说明,以后在文件编程的时候可以查看该文档。另一个是src文件夹,里面就是我们所要的源文件。 3、建立一个STM32的工程,为方便调试,我们应重载printf()底层函数实现串口打印输出。可以参考已经建立好的printf()打印输出工程:.viewtool./bbs/foru ... d=77&extra=page%3D1 四、开始移植 1、在已经建立好的工程目录User文件夹下新建两个文件夹,FATFS_V0.09和 SPI_SD_Card,FATFS_V0.09用于存放FATFS源文件,SPI_SD_Card用于存放SPI的驱动文件。 2、如图1将ff.c添加到工程文件夹中,并新建diskio.c文件,在diskio.c文件中实现五个函数: 1.DSTATUS disk_initialize (BYTE);//SD卡的初始化 2. DSTATUS disk_status (BYTE);//获取SD卡的状态,这里可以不用管 3. DRESULT disk_read (BYTE, BYTE*, DWORD, BYTE);//从SD卡读取数据 4. DRESULT disk_write (BYTE, const BYTE*, DWORD, BYTE);//将数据写入 SD卡,若该文件系统为只读文件系统则不用实现该函数 5. DRESULT disk_ioctl (BYTE, BYTE, void*);//获取SD卡文件系统相关信息 6. 复制代码

基于ARM的嵌入式linux内核的裁剪与移植.

基于ARM的嵌入式linux内核的裁剪与 移植 0引言微处理器的产生为价格低廉、结构小巧的CPU和外设的连接提供了稳定可靠的硬件架构,这样,限制嵌入式系统发展的瓶颈就突出表现在了软件方面。尽管从八十年代末开始,已经陆续出现了一些嵌入式操作系统(比较著名的有Vxwork、pSOS、Neculeus和WindowsCE)。但这些专用操作系统都是商业化产品,其高昂的价格使许多低端产品的小公司望而却步;而且,源代码封闭性也大大限制了开发者的积极性。而Linux的开放性,使得许多人都认为Linu 0 引言 微处理器的产生为价格低廉、结构小巧的CPU和外设的连接提供了稳定可靠的硬件架构,这样,限制嵌入式系统发展的瓶颈就突出表现在了软件方面。尽管从八十年代末开始,已经陆续出现了一些嵌入式操作系统(比较著名的有Vxwork、pSOS、Nec uleus和Windows CE)。但这些专用操作系统都是商业化产品,其高昂的价格使许多低端产品的小公司望而却步;而且,源代码封闭性也大大限制了开发者的积极性。而Linux的开放性,使得许多人都认为Linux 非常适合多数Intemet设备。Linux操作系统可以支持不同的设备和不同的配置。Linux对厂商不偏不倚,而且成本极低,因而很快成为用于各种设备的操作系统。嵌入式linux是大势所趋,其巨大的市场潜力与酝酿的无限商机必然会吸引众多的厂商进入这一领域。 1 嵌入式linux操作系统 Linux为嵌入操作系统提供了一个极有吸引力的选择,它是个和Unix 相似、以核心为基础、全内存保护、多任务、多进程的操作系统。可以支持广泛的计算机硬件,包括X86、Alpha、Sparc、MIPS、PPC、ARM、NEC、MOTOROLA 等现有的大部分芯片。Linux的程序源码全部公开,任何人都可以根据自己的需要裁剪内核,以适应自己的系统。文章以将linux移植到ARM920T内核的 s3c2410处理器芯片为例,介绍了嵌入式linux内核的裁剪以及移植过程,文中介绍的基本原理与方法技巧也可用于其它芯片。 2 内核移植过程 2.1 建立交叉编译环境 交叉编译的任务主要是在一个平台上生成可以在另一个平台上执行的程序代码。不同的CPU需要有不同的编译器,交叉编译如同翻译一样,它可以把相同的程序代码翻译成不同的CPU对应语言。 交叉编译器完整的安装涉及到多个软件安装,最重要的有binutils、gcc、glibc三个。其中,binutils主要用于生成一些辅助工具;gcc则用来生成交叉编译器,主要生成arm—linux—gcc交叉编译工具;glibc主要是提供用户程序所使用的一些基本的函数库。 自行搭建交叉编译环境通常比较复杂,而且很容易出错。本文使用的是

微型计算机原理习题及解答

微机原理习题 1、微处理器、微型计算机和微型计算机系统三者之间有什么不同 答: 微型计算机系统:包括微型计算机的硬件系统和必要的系统软件。 微型计算机的硬件系统包括:微型计算机和外围设备。 微型计算机:主要是由微处理器(MPU)、存储器(ROM、RAM)、I/O接口、系统总线组成。 微处理器(MPU):是用微电子技术将中央处理器(CPU)集成在一块芯片中制 成的超大规模集成电路(IC),从逻辑的角度看,其内部 主要包括:运算器(或称算术逻辑单元(ALU))、控制 器和一定数量的寄存器组成。 2、控制总线传输的信号大致有哪几种 答:控制总线用来传输控制信号,协调各部件之间的工作;控制总线是双向的; 控制总线包括CPU送往存储器和输入/输出接口电路的控制信号,如读信号、写信号和中断响应信号等;控制总线还包括其他部件送到CPU的信号,比如,时钟信号、中断请求信号和准备就绪信号等。 3、微型计算机采用总线结构有什么优点 答:采用总线结构的优越性主要表现在两个方面:①简化系统的设计,使CPU、RAM、ROM、I/O接口的设计简单化、标准化,使复杂的硬件系统变为面向总线的单一关系。②方便系统的硬件扩充——一个部件只要符合总线标准,就可以连接到采用这种总线标准的系统中。

4、简述8086 CPU的逻辑结构。 答:从逻辑功能上,8086分为两部分:总线接口部件BIU(Bus Interface Unit); 执行部件EU(Execution Unit)。其中,总线接口部件包括:地址加法器、段寄存器组、IP指针、指令队列缓冲器、和输入输出控制电路;执行部件包括:运算器、通用寄存器组、标志寄存器、和执行部分的控制电路。 5、 8086/8088 和传统的计算机相比在执行指令方面有什么不同这样的设计思 想有什么优点 答:传统的计算机都是按照下面3个步骤循环工作的: ①从指令指针所指的内存单元中取一条指令送到指令寄存器。 ②对指令进行译码,而指令指针进行增值,以指向下一条指令的地址。 ③执行指令。如果所执行的是转移指令、调用指令或者返回指令,则重 新设置指令指针的值,以指向下一条要执行的指令。 而8086/8088指令的执行是流水线方式,取指令和执行指令是并行工作的,工作效率大大提高,从而大大提高了CPU的执行速度。6、总线周期的含义是什么 8086/8088的基本总线周期由几个时钟组成如一个CPU 的时钟频率为10MHz,那么,它的一个时钟周期为多少一个基本总线周期为多少 答:为了取得指令或进行数据的传送,CPU的总线接口部件需要执行一系列的操作,这些操作所经历的时间叫一个总线周期。在8086/8088中,一个最基本的总线周期由4个时钟周期组成,分别称为4个状态,即T1状态、T2状态、T3状态和T4状态。时钟周期是CPU的时序基本时间计量单位,它由计算机主频决定。如果8086的主频为10MHz,1个时钟周期就是100ns;1个最基本的总线周期是400ns 。7、在对存储器和I/O设备读写时,要用到IOR、IOW、

相关文档
最新文档