自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(4)
  • 资源 (56)
  • 收藏
  • 关注

原创 SecureCRT.v.6.7.2破解版下载地址

http://d.download.csdn.net/download/x5928/3778124

2011-11-29 10:52:36 2037 2

原创 SquashFS HOWTO

http://tldp.org/HOWTO/SquashFS-HOWTO/index.htmlSquashFS HOWTOArtemiy I. PavlovSinevibesMarco Cecchettimrc (dot) ildp (dot) com>Revision HistoryRev

2011-11-24 13:20:05 840

转载 如何在vb.net中取得两时间的毫秒差

最近在做一个项目,其中有个测试老方法的性能,最简单的测试方法就是测试此方法的总运行时间,这个方法的代码行有1200行(包括End if之类的),在方法dim之前就定义一个时间参数dim dtStartTime as datetime = now     ’2010-08-09 14:35:25.421。。。。在方法最后面定义一个时间参数

2011-11-23 10:44:14 1868

原创 NFS挂载步骤

1.修改linux的/etc/exports   / *2.linux 上service nfs restart3.开发板上mount -n -o nolock,rsize=1024,wsize=1024,timeo=15 192.168.0.22:/  /mnt

2011-11-03 10:02:35 707

vs6.0 vb日文版安装程序

vb6 日文版 安装程序

2020-07-29

Instant VB (C# to VB.NET)

c#代码转vb Download the latest build of any of our converters below. Our converters run on Windows with version 4.5 or higher of the .NET Framework. The Free Edition limits conversion output to 100 lines per file or snippet.

2019-02-11

CountStepV2.71 (C,ASM,Java,SQL,VB)

统计代码行数工具

2019-02-03

Oracle12c(開発環境)構築手順

Oracle12c(開発環境)構築手順,讲述0racle11导出的数据如何导入到oracle12

2018-11-17

icsharpcode.sharpziplib

Assemblies for .NET 1.1, .NET 2.0 (3.5, 4.0),

2014-07-14

文件对比代码

C# 文件 对比 代码 DiffPlex - a .NET Diff Generator http://diffplex.codeplex.com/SourceControl/changeset/view/052fd342999b 原网站dll下载 http://diffplex.codeplex.com/ 简介: 具体使用可以参考http://diffplex.codeplex.com/wikipage?title=library&referringTitle=Home IDiffer是差异比较的核心类,提供了两个文本的低精度的大致比较 ISidebySideDiff:提供了高精度的比较以及可以用两栏对比显示差异

2014-06-26

利用ghostscript把C# pdf转换成图片

利用ghostscript把C# pdf转换成图片

2014-05-13

Citrix手机移动办公解决方案

基于Citrix mobile sdk手机移动办公解决方案

2012-09-04

如何现实CITRIX XenAPP内容重定向

如何现实CITRIX XenAPP内容重定向

2012-09-04

XenApp远程桌面网页虚拟化接口程序开发源码

citrix XenApp 远程服务器的应用程序在网页虚拟化显示出来,调用citrix自身的接口程序开发,实现远程桌面网页虚拟化,内附设计源码

2012-09-04

GNUmake中文手册

GNU make 中文 手册 v3.8 v1.5

2011-11-28

虚拟机和windows共享文件夹设置.rar

虚拟机和windows共享文件夹设置.rar虚拟机和windows共享文件夹设置.rar

2011-11-03

飞凌教你如何挂在虚拟机的NFS

飞凌教你如何挂在虚拟机的NFS.rar飞凌教你如何挂在虚拟机的NFS.rar

2011-11-03

linux设备驱动程序(中文第三版)内核

jfsky.com-linux设备驱动程序(中文第三版)内核.rar ,learn and smart

2011-09-20

linux内核驱动第三版

这是一个chm文档 Linux 设备驱动 Edition 3 By Jonathan Corbet, Alessandro Rubini, and Greg Kroah-Hartman 由 quickwhale 翻译的简体中文版 V0.1.0 2006-6-2 作为蓝本, 由 Dean 进行校验修正部分翻译段落。 遵循原版的版权声明. 文档还在完善中. 欢迎您的任何建议或者意见, 请发信联系我们。 版权 © 2005, 2001, 1998 O’Reilly Media, Inc. All rights reserved. Printed in the United States of America. Published by O’Reilly Media, Inc., 1005 Gravenstein Highway North, Sebastopol, CA 95472. O’Reilly books may be purchased for educational, business, or sales promotional use. Online editions are also available for most titles (safari.oreilly.com). For more information, contact our corporate/insti-tutional sales department: (800) 998-9938 or [email protected]. This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 2.0 License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/2.0/ or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. -------------------------------------------------------------------------------- 感谢 感谢本书原版的作者 Jonathan Corbet, Alessandro Rubini 和 Greg Kroah-Hartman 感谢我的家人 爸爸2, 妈妈2, PIGYnuonuo 群号:51498670 欢迎您加入 无私奉献,共同进取,走嵌入LINUX之路。 目录 1. 第一章 设备驱动简介 1.1. 驱动程序的角色 1.2. 划分内核 1.2.1. 可加载模块 1.3. 设备和模块的分类 1.4. 安全问题 1.5. 版本编号 1.6. 版权条款 1.7. 加入内核开发社团 1.8. 本书的内容 2. 建立和运行模块 2.1. 设置你的测试系统 2.2. Hello World 模块 2.3. 内核模块相比于应用程序 2.3.1. 用户空间和内核空间 2.3.2. 内核的并发 2.3.3. 当前进程 2.3.4. 几个别的细节 2.4. 编译和加载 2.4.1. 编译模块 2.4.2. 加载和卸载模块 2.4.3. 版本依赖 2.4.4. 平台依赖性 2.5. 内核符号表 2.6. 预备知识 2.7. 初始化和关停 2.7.1. 清理函数 2.7.2. 初始化中的错误处理 2.7.3. 模块加载竞争 2.8. 模块参数 2.9. 在用户空间做 2.10. 快速参考 3. 字符驱动 3.1. scull 的设计 3.2. 主次编号 3.2.1. 设备编号的内部表示 3.2.2. 分配和释放设备编号 3.2.3. 主编号的动态分配 3.3. 一些重要数据结构 3.3.1. 文件操作 3.3.2. 文件结构 3.3.3. inode 结构 3.4. 字符设备注册 3.4.1. scull 中的设备注册 3.4.2. 老方法 3.5. open 和 release 3.5.1. open 方法 3.5.2. release 方法 3.6. scull 的内存使用 3.7. 读和写 3.7.1. read 方法 3.7.2. write 方法 3.7.3. readv 和 writev 3.8. 使用新设备 3.9. 快速参考 4. 调试技术 4.1. 内核中的调试支持 4.2. 用打印调试 4.2.1. printk 4.2.2. 重定向控制台消息 4.2.3. 消息是如何记录的 4.2.4. 打开和关闭消息 4.2.5. 速率限制 4.2.6. 打印设备编号 4.3. 用查询来调试 4.3.1. 使用 /proc 文件系统 4.3.2. ioctl 方法 4.4. 使用观察来调试 4.5. 调试系统故障 4.5.1. oops 消息 4.5.2. 系统挂起 4.6. 调试器和相关工具 4.6.1. 使用 gdb 4.6.2. kdb 内核调试器 4.6.3. kgdb 补丁 4.6.4. 用户模式 Linux 移植 4.6.5. Linux 追踪工具 4.6.6. 动态探针 5. 并发和竞争情况 5.1. scull 中的缺陷 5.2. 并发和它的管理 5.3. 旗标和互斥体 5.3.1. Linux 旗标实现 5.3.2. 在 scull 中使用旗标 5.3.3. 读者/写者旗标 5.4. Completions 机制 5.5. 自旋锁 5.5.1. 自旋锁 API 简介 5.5.2. 自旋锁和原子上下文 5.5.3. 自旋锁函数 5.5.4. 读者/写者自旋锁 5.6. 锁陷阱 5.6.1. 模糊的规则 5.6.2. 加锁顺序规则 5.6.3. 细 -粗- 粒度加锁 5.7. 加锁的各种选择 5.7.1. 不加锁算法 5.7.2. 原子变量 5.7.3. 位操作 5.7.4. seqlock 锁 5.7.5. 读取-拷贝-更新 5.8. 快速参考 6. 高级字符驱动操作 6.1. ioctl 接口 6.1.1. 选择 ioctl 命令 6.1.2. 返回值 6.1.3. 预定义的命令 6.1.4. 使用 ioctl 参数 6.1.5. 兼容性和受限操作 6.1.6. ioctl 命令的实现 6.1.7. 不用 ioctl 的设备控制 6.2. 阻塞 I/O 6.2.1. 睡眠的介绍 6.2.2. 简单睡眠 6.2.3. 阻塞和非阻塞操作 6.2.4. 一个阻塞 I/O 的例子 6.2.5. 高级睡眠 6.2.6. 测试 scullpipe 驱动 6.3. poll 和 select 6.3.1. 与 read 和 write 的交互 6.3.2. 底层的数据结构 6.4. 异步通知 6.4.1. 驱动的观点 6.5. 移位一个设备 6.5.1. llseek 实现 6.6. 在一个设备文件上的存取控制 6.6.1. 单 open 设备 6.6.2. 一次对一个用户限制存取 6.6.3. 阻塞 open 作为对 EBUSY 的替代 6.6.4. 在 open 时复制设备 6.7. 快速参考 7. 时间, 延时, 和延后工作 7.1. 测量时间流失 7.1.1. 使用 jiffies 计数器 7.1.2. 处理器特定的寄存器 7.2. 获知当前时间 7.3. 延后执行 7.3.1. 长延时 7.3.2. 短延时 7.4. 内核定时器 7.4.1. 定时器 API 7.4.2. 内核定时器的实现 7.5. Tasklets 机制 7.6. 工作队列 7.6.1. 共享队列 7.7. 快速参考 7.7.1. 时间管理 7.7.2. 延迟 7.7.3. 内核定时器 7.7.4. Tasklets 机制 7.7.5. 工作队列 8. 分配内存 8.1. kmalloc 的真实故事 8.1.1. flags 参数 8.1.2. size 参数 8.2. 后备缓存 8.2.1. 一个基于 Slab 缓存的 scull: scullc 8.2.2. 内存池 8.3. get_free_page 和其友 8.3.1. 一个使用整页的 scull: scullp 8.3.2. alloc_pages 接口 8.3.3. vmalloc 和 其友 8.3.4. 一个使用虚拟地址的 scull : scullv 8.4. 每-CPU 的变量 8.5. 获得大量缓冲 8.5.1. 在启动时获得专用的缓冲 8.6. 快速参考 9. 与硬件通讯 9.1. I/O 端口和 I/O 内存 9.1.1. I/O 寄存器和常规内存 9.2. 使用 I/O 端口 9.2.1. I/O 端口分配 9.2.2. 操作 I/O 端口 9.2.3. 从用户空间的 I/O 存取 9.2.4. 字串操作 9.2.5. 暂停 I/O 9.2.6. 平台依赖性 9.3. 一个 I/O 端口例子 9.3.1. 并口纵览 9.3.2. 一个例子驱动 9.4. 使用 I/O 内存 9.4.1. I/O 内存分配和映射 9.4.2. 存取 I/O 内存 9.4.3. 作为 I/O 内存的端口 9.4.4. 重用 short 为 I/O 内存 9.4.5. 在 1 MB 之下的 ISA 内存 9.4.6. isa_readb 和其友 9.5. 快速参考 10. 中断处理 10.1. 准备并口 10.2. 安装一个中断处理 10.2.1. /proc 接口 10.2.2. 自动检测 IRQ 号 10.2.3. 快速和慢速处理 10.2.4. 实现一个处理 10.2.5. 处理者的参数和返回值 10.2.6. 使能和禁止中断 10.3. 前和后半部 10.3.1. Tasklet 实现 10.3.2. 工作队列 10.4. 中断共享 10.4.1. 安装一个共享的处理者 10.4.2. 运行处理者 10.4.3. /proc 接口和共享中断 10.5. 中断驱动 I/O 10.5.1. 一个写缓存例子 10.6. 快速参考 11. 内核中的数据类型 11.1. 标准 C 类型的使用 11.2. 安排一个明确大小给数据项 11.3. 接口特定的类型 11.4. 其他移植性问题 11.4.1. 时间间隔 11.4.2. 页大小 11.4.3. 字节序 11.4.4. 数据对齐 11.4.5. 指针和错误值 11.5. 链表 11.6. 快速参考 12. PCI 驱动 12.1. PCI 接口 12.1.1. PCI 寻址 12.1.2. 启动时间 12.1.3. 配置寄存器和初始化 12.1.4. MODULEDEVICETABLE 宏 12.1.5. 注册一个 PCI 驱动 12.1.6. 老式 PCI 探测 12.1.7. 使能 PCI 设备 12.1.8. 存取配置空间 12.1.9. 存取 I/O 和内存空间 12.1.10. PCI 中断 12.1.11. 硬件抽象 12.2. 回顾: ISA 12.2.1. 硬件资源 12.2.2. ISA 编程 12.2.3. 即插即用规范 12.3. PC/104 和 PC/104+ 12.4. 其他的 PC 总线 12.4.1. MCA 总线 12.4.2. EISA 总线 12.4.3. VLB 总线 12.5. SBus 12.6. NuBus 总线 12.7. 外部总线 12.8. 快速参考 13. USB 驱动 13.1. USB 设备基础知识 13.1.1. 端点 13.1.2. 接口 13.1.3. 配置 13.2. USB 和 sysfs 13.3. USB 的 Urbs 13.3.1. 结构 struct urb 13.3.2. 创建和销毁 urb 13.3.3. 提交 urb 13.3.4. 完成 urb: 完成回调处理者 13.3.5. 取消 urb 13.4. 编写一个 USB 驱动 13.4.1. 驱动支持什么设备 13.4.2. 注册一个 USB 驱动 13.4.3. 提交和控制一个 urb 13.5. 无 urb 的 USB 传送 13.5.1. usb_bulk_msg 接口 13.5.2. usb_control_msg 接口 13.5.3. 使用 USB 数据函数 13.6. 快速参考 14. Linux 设备模型 14.1. Kobjects, Ksets 和 Subsystems 14.1.1. Kobject 基础 14.1.2. kobject 层次, kset, 和子系统 14.2. 低级 sysfs 操作 14.2.1. 缺省属性 14.2.2. 非缺省属性 14.2.3. 二进制属性 14.2.4. 符号连接 14.3. 热插拔事件产生 14.3.1. 热插拔操作 14.4. 总线, 设备, 和驱动 14.4.1. 总线 14.4.2. 设备 14.4.3. 设备驱动 14.5. 类 14.5.1. class_simple 接口 14.5.2. 完整的类接口 14.6. 集成起来 14.6.1. 添加一个设备 14.6.2. 去除一个设备 14.6.3. 添加一个驱动 14.6.4. 去除一个驱动 14.7. 热插拔 14.7.1. 动态设备 14.7.2. /sbin/hotplug 工具 14.7.3. 使用 /sbin/hotplug 14.8. 处理固件 14.8.1. 内核固件接口 14.8.2. 它如何工作 14.9. 快速参考 14.9.1. Kobjects结构 14.9.2. sysfs 操作 14.9.3. 总线, 设备, 和驱动 14.9.4. 类 14.9.5. 固件 15. 内存映射和 DMA 15.1. Linux 中的内存管理 15.1.1. 地址类型 15.1.2. 物理地址和页 15.1.3. 高和低内存 15.1.4. 内存映射和 struct page 15.1.5. 页表 15.1.6. 虚拟内存区 15.1.7. 进程内存映射 15.2. mmap 设备操作 15.2.1. 使用 remap_pfn_range 15.2.2. 一个简单的实现 15.2.3. 添加 VMA 的操作 15.2.4. 使用 nopage 映射内存 15.2.5. 重新映射特定 I/O 区 15.2.6. 重新映射 RAM 15.2.7. 重映射内核虚拟地址 15.3. 进行直接 I/O 15.3.1. 异步 I/O 15.4. 直接内存存取 15.4.1. 一个 DMA 数据传输的概况 15.4.2. 分配 DMA 缓冲 15.4.3. 总线地址 15.4.4. 通用 DMA 层 15.4.5. ISA 设备的 DMA 15.5. 快速参考 15.5.1. 介绍性材料 15.5.2. 实现 mmap 15.5.3. 实现直接 I/O 15.5.4. 直接内存存取 16. 块驱动 16.1. 注册 16.1.1. 块驱动注册 16.1.2. 磁盘注册 16.1.3. 在 sbull 中的初始化 16.1.4. 注意扇区大小 16.2. 块设备操作 16.2.1. open 和 release 方法 16.2.2. 支持可移出的介质 16.2.3. ioctl 方法 16.3. 请求处理 16.3.1. 对请求方法的介绍 16.3.2. 一个简单的请求方法 16.3.3. 请求队列 16.3.4. 请求的分析 16.3.5. 请求完成函数 16.4. 一些其他的细节 16.4.1. 命令预准备 16.4.2. 被标识的命令排队 16.5. 快速参考 17. 网络驱动 17.1. snull 是如何设计的 17.1.1. 分配 IP 号 17.1.2. 报文的物理传送 17.2. 连接到内核 17.2.1. 设备注册 17.2.2. 初始化每一个设备 17.2.3. 模块卸载 17.3. net_device 结构的详情 17.3.1. 全局信息 17.3.2. 硬件信息 17.3.3. 接口信息 17.3.4. 设备方法 17.3.5. 公用成员 17.4. 打开与关闭 17.5. 报文传送 17.5.1. 控制发送并发 17.5.2. 传送超时 17.5.3. 发散/汇聚 I/O 17.6. 报文接收 17.7. 中断处理 17.8. 接收中断缓解 17.9. 连接状态的改变 17.10. Socket 缓存 17.10.1. 重要成员变量 17.10.2. 作用于 socket 缓存的函数 17.11. MAC 地址解析 17.11.1. 以太网使用 ARP 17.11.2. 不考虑 ARP 17.11.3. 非以太网头部 17.12. 定制 ioctl 命令 17.13. 统计信息 17.14. 多播 17.14.1. 多播的内核支持 17.14.2. 典型实现 17.15. 几个其他细节 17.15.1. 独立于媒介的接口支持 17.15.2. ethtool 支持 17.15.3. netpoll 17.16. 快速参考 18. TTY 驱动 18.1. 一个小 TTY 驱动 18.1.1. 结构 struct termios 18.2. tty_driver 函数指针 18.2.1. open 和 close 18.2.2. 数据流 18.2.3. 其他缓冲函数 18.2.4. 无 read 函数? 18.3. TTY 线路设置 18.3.1. set_termios 函数 18.3.2. tiocmget 和 tiocmset 18.4. ioctls 函数 18.5. TTY 设备的 proc 和 sysfs 处理 18.6. tty_driver 结构的细节 18.7. tty_operaions 结构的细节 18.8. tty_struct 结构的细节 18.9. 快速参考

2011-09-20

mkyaffs2image.rar

mkyaffs2image.rar yaffs2文件系统制作工具

2011-09-16

yaffs2源码 包含mkyaffs2image工具

yaffs2官方源代码,android文件系统yaffs2文件系统源码,含制作Nand flash的yaffs2根文件系统所需的工具mkyaffs2image

2011-09-16

嵌入式linux系统开发标准教程(华清远见培训教程)

嵌入式linux系统开发标准教程(华清远见培训教程)

2011-05-12

LINUX制作文件系统.cramfs .jffs2

在Linux环境下制作.cramfs 和.jfss2两种格式,步骤具体!

2010-12-01

source insight 多行注释及反注释宏 Ver 2.0

source insight注释宏,实现类似VC IDE的多行注释及反注释功能。使用方法:打开source insight的Base工程,选择Add and Remove Project Files,将Comments.em文件添加进Base工程,保存即可退出。打开其他任一工程,点击Options->Menu Assignments,在弹出对话框的左栏找到刚刚添加的Macro:Code2Comments并选中,在右栏的Menu下拉菜单中选择Work菜单,选中菜单中想要加入的位置后点击右侧Insert按钮即可。 Ver1.0宏的升级版 解决在一行内全是空格情况下的小BUG

2010-07-27

GNU make 指南

翻译: 哈少 译者按: 本文是一篇介绍 GNU Make 的文章,读完后读者应该基本掌握了 make 的用法。而 make 是所有想在 Unix (当然也包括 Linux )系统上编程的用户必须掌握的工具。如果你写的程序中没有用到 make ,则说明你写的程序只是个人的练习程序,不具有任何实用的价值。也许这么说有点儿偏激,但 make 实在是应该用在任何稍具规模的程序中的。希望本文可以为中国的 Unix 编程初学者提供一点儿有用的资料。中国的 Linux 用户除了学会安装红帽子以外, 实在应该尝试写一些有用的程序。个人想法,大家参考。

2010-06-24

uboot的makefile 详细分析

uboot的makefile 详细分析,为初学者提供一个详细的解释,让你从顶层了解uboot

2010-06-11

用NET-SNMP软件包开发简单客户端代理

对于net-snmp我也是一个初学者,开始学习时也碰到了很多低级的问题。在很多论坛上(事实上比较少^_^, 建议大家直接去sourcefoge社区看关于net-snmp的mail-list),都没有比较初级入门的文章,本着开源学习的精神,把自己的一点收获,共享给大家。通过参考一些前辈的文章和帮助文档,本文实现了一个简单的mib,并编写了文档。本文主要面向初级学习者(我也是个菜鸟),欢迎大家留言讨论。

2010-05-27

Net-snmp agent扩展开发示例

在net-snmp环境下的agent扩展开发示例,包括net-snmp环境的安装与配置,agent程序开发的一般流程示例,有详尽的说明。

2010-05-24

samba-3.0.4-0.5.1.i386.rpm包(包含common和client)

压缩包包含: samba-common-3.0.0.15.i386.rpm samba-client-3.0.0-15.i386.rpm samba-3.0.0-15.i386.rpm 安装前检验是否已安装samba服务:rpm –qa |grep samba 安装命令: rpm -ivh 路径/文件名

2010-05-24

net-snmp安装配置手册

第1章 net-snmp安装及配置...................................................................................................1-1 1.1 安装...................................................................................................................................1-1 1.2 设置net-snmp自启动..........................................................................................................1-3 1.3 设置环境变量.....................................................................................................................1-3 第2章 net-snmp测试..............................................................................................................2-3 2.1 本地通过localhost测试.......................................................................................................2-3 2.2 本地通过IP测试..................................................................................................................2-4 2.3 远程通过IP测试..................................................................................................................2-5 第3章 snmpd.conf详解..........................................................................................................3-6 3.1 通道控制配置.....................................................................................................................3-7 3.1.1 定义安全体名称.......................................................................................................3-7 3.1.2 定义安全组..............................................................................................................3-7 3.1.3 定义视图..................................................................................................................3-8 3.1.4 向安全组授权相应的视图.........................................................................................3-8 3.2 系统联系人信息..................................................................................................................3-9 3.3 进程检查...........................................................................................................................3-10 3.4 可执行脚本.......................................................................................................................3-11 3.5 磁盘检查...........................................................................................................................3-12 3.6 负载均衡检查...................................................................................................................3-13 3.7 可扩展部分.......................................................................................................................3-14 3.8 通过控制...........................................................................................................................3-15 3.9 其它.................................................................................................................................3-16 第4章 net-snmp指令............................................................................................................4-16 4.1 snmpget..........................................................................................................................4-16 4.2 snmpwalk........................................................................................................................4-16 4.3 snmpconf........................................................................................................................4-16 4.4 snmpd.............................................................................................................................4-17 4.5 snmpgetnext....................................................................................................................4-17 4.6 snmpset..........................................................................................................................4-17 4.7 snmpbulkget....................................................................................................................4-17 4.8 snmptrap.........................................................................................................................4-17 4.9 snmptrapd.......................................................................................................................4-17 4.10 snmpinform....................................................................................................................4-17 4.11 snmptable......................................................................................................................4-17 ii4.12 snmpstatus.....................................................................................................................4-18 4.13 snmpbulkwalk................................................................................................................4-18 4.14 snmpdelta......................................................................................................................4-18 4.15 snmptest.......................................................................................................................4-18

2010-05-21

用mib2c生成C代码的mib2c.scalar.conf脚本

写好自定义的MIB之后,就需要用mib2c工具生成C代码再编译snmp才可以getset自定义的MIBsnmp自带了很多生成C代码的脚本,在local目录下,如果用mib2c.int_watch.conf的话,执行如下命令:env MIBS="....../share/snmp/mibs/IPSTB-MIB.txt" mib2c -c mib2c.int_watch.conf ipstb从生成的C代码中,发现只有Integer32类型的结点,所有的OCTET STRING类型的结点都没有了。于是改用mib2c.scalar.conf, env MIBS="....../share/snmp/mibs/IPSTB-MIB.txt" mib2c -c mib2c.scalar.conf ipstb生成的代码中包含了所有的结点,但是有很多地方需要我们往里面填代码,结点少的话,可以一个个填,但一个实用的MIB的结点应该不会太少、五十个?一百个?这样加起来工作量可就不小了,于是,我改了一下mib2c.scalar.conf,用我改过之后的脚本,生成的C代码可以直接编译通过,可以只更改各个结点的初值,然后建立结点与设备的联系就可以了。

2010-05-19

xinetd-2.3.14-11.i386.rpm

xinetd-2.3.14-11.i386.rpm

2010-05-18

tftp-server-0.42-4

tftp-server-0.42-4 tftp server 0.42- 4

2010-05-17

systemtap elfutils

elfutils-0.144.tar.bz2 SystemTap_Beginners_Guide.pdf systemtap-langref.pdf systemtap-tutorial.pdf

2010-05-11

BeeCrypt 4.2.1

BeeCrypt是一个正在进行的项目,提供强有力的和快速的加密形式的工具包使用的商业和开放源代码项目。库包括:随机数生成器,分组密码,散列函数,消息认证码, multiprecision整数例程和公共密钥元。

2010-05-11

利用SNMP#NET做trap接收器

利用SNMP#NET做的trap接收器例子

2010-05-06

snmp MIB库扩展

转来的,snmp MIB库扩展,里面有简单的例子,觉的不错

2010-04-13

Advanced Bash-Scripting Guide <>

目录 ++++ 第一部分. 热身 1. 为什么使用shell 编程 2. 带着一个Sha-Bang 出发(Sha-Bang 指的是#!) 2.1. 调用一个脚本 2.2. 初步的练习 第二部分. 基本 3. 特殊字符 4. 变量和参数的介绍 4.1. 变量替换 4.2. 变量赋值 4.3. Bash 变量是不分类型的 4.4. 特殊的变量类型 5. 引用(翻译的可能有问题,特指引号) 5.1. 引用变量 5.2. 转义(\) 6. 退出和退出状态 7. Tests 7.1. Test 结构 7.2. 文件测试操作 7.3. 其他比较操作 7.4. 嵌套的if/then 条件test 7.5. 检查你的test 知识 8. 操作符和相关的主题 8.1. 操作符 8.2. 数字常量 第三部分. 超越基本 9. 变量重游 9.1. 内部变量 9.2. 操作字符串 9.3. 参数替换 9.4. 指定类型的变量:declare 或者typeset 9.5. 变量的间接引用 9.6. $RANDOM: 产生随机整数 9.7. 双圆括号结构 10. 循环和分支 10.1. 循环 10.2. 嵌套循环 10.3. 循环控制 10.4. 测试与分支(case 和select 结构) 11. 内部命令与内建 11.1. 作业控制命令 12. 外部过滤器,程序和命令 12.1. 基本命令 12.2. 复杂命令 12.3. 时间/日期 命令 12.4. 文本处理命令 12.5. 文件与归档命令 12.6. 通讯命令 12.7. 终端控制命令 12.8. 数学计算命令 12.9. 混杂命令 13. 系统与管理命令 13.1. 分析一个系统脚本 14. 命令替换 15. 算术扩展 16. I/O 重定向 16.1. 使用exec 16.2. 代码块的重定向 16.3. 应用 17. Here Documents 17.1. Here Strings 18. 休息时间 Part 4. 高级 19. 正则表达式 19.1. 一个简要的正则表达式介绍 19.2. 通配 20. 子shell(Subshells) 21. 受限shell(Restricted Shells) 22. 进程替换 23. 函数 23.1. 复杂函数和函数复杂性 23.2. 局部变量 23.3. 不使用局部变量的递归 24. 别名(Aliases) 25. 列表结构 26. 数组 27. /dev 和 /proc 27.1. /dev 27.2. /proc 28. 关于Zeros 和Nulls 29. 调试 30. 选项 31. Gotchas 32. 脚本编程风格 32.1. 非官方的Shell 脚本风格 33. 杂项 33.1. 交互式和非交互式的shells 和脚本 33.2. Shell 包装 33.3. 测试和比较: 另一种方法 33.4. 递归 33.5. 彩色脚本 33.6. 优化 33.7. 各种小技巧 33.8. 安全话题 33.8.1. 被感染的脚本 33.8.2. 隐藏Shell 脚本源码 33.9. 移植话题 33.10. 在Windows 下进行Shell 编程 34. Bash, 版本 2 和 3 34.1. Bash, 版本2 34.2. Bash, 版本3 35. 后记 35.1. 作者后记 35.2. 关于作者 35.3. 哪里可以取得帮助? 35.4. 制作这本书的工具 35.4.1. 硬件 35.4.2. 软件和排版软件 35.5. Credits Bibliography A. Contributed Scripts B. Reference Cards C. A Sed and Awk Micro-Primer C.1. Sed C.2. Awk D. Exit Codes With Special Meanings E. A Detailed Introduction to I/O and I/O Redirection F. Standard Command-Line Options G. Important Files H. Important System Directories I. Localization J. History Commands K. A Sample .bashrc File L. Converting DOS Batch Files to Shell Scripts M. Exercises M.1. Analyzing Scripts M.2. Writing Scripts N. Revision History O. Mirror Sites P. To Do List Q. Copyright 表格清单: 11-1. 作业标识符 30-1. Bash 选项 33-1. 转义序列中数值和彩色的对应 B-1. Special Shell Variables B-2. TEST Operators: Binary Comparison B-3. TEST Operators: Files B-4. Parameter Substitution and Expansion B-5. String Operations B-6. Miscellaneous Constructs C-1. Basic sed operators C-2. Examples of sed operators D-1. "Reserved" Exit Codes L-1. Batch file keywords / variables / operators, and their shell equivalents L-2. DOS commands and their UNIX equivalents N-1. Revision History 例子清单: 2-1. 清除:清除/var/log 下的log 文件 2-2. 清除:一个改良的清除脚本 2-3. cleanup:一个增强的和广义的删除logfile 的脚本 3-1. 代码块和I/O 重定向 3-2. 将一个代码块的结果保存到文件 3-3. 在后台运行一个循环 3-4. 备份最后一天所有修改的文件. 4-1. 变量赋值和替换 4-2. 一般的变量赋值 4-3. 变量赋值,一般的和比较特殊的 4-4. 整型还是string? 4-5. 位置参数 4-6. wh,whois 节点名字查询 4-7. 使用shift 5-1. echo 一些诡异的变量 5-2. 转义符 6-1. exit/exit 状态 6-2. 否定一个条件使用! 7-1. 什么情况下为真? 7-2. 几个等效命令test,/usr/bin/test,[],和/usr/bin/[ 7-3. 算数测试使用(( )) 7-4. test 死的链接文件 7-5. 数字和字符串比较 7-6. 测试字符串是否为null 7-7. zmore 8-1. 最大公约数 8-2. 使用算术操作符 8-3. 使用&&和||进行混合状态的test 8-4. 数字常量的处理 9-1. $IFS 和空白 9-2. 时间输入 9-3. 再来一个时间输入 9-4. Timed read 9-5. 我是root? 9-6. arglist:通过$*和$@列出所有的参数 9-7. 不一致的$*和$@行为 9-8. 当$IFS 为空时的$*和$@ 9-9. 下划线变量 9-10. 在一个文本文件的段间插入空行 9-11. 利用修改文件名,来转换图片格式 9-12. 模仿getopt 命令 9-13. 提取字符串的一种可选的方法 9-14. 使用参数替换和error messages 9-15. 参数替换和"usage"messages 9-16. 变量长度 9-17. 参数替换中的模式匹配 9-18. 重命名文件扩展名 9-19. 使用模式匹配来分析比较特殊的字符串 9-20. 对字符串的前缀或后缀使用匹配模式 9-21. 使用declare 来指定变量的类型 9-22. 间接引用 9-23. 传递一个间接引用给awk 9-24. 产生随机数 9-25. 从一副扑克牌中取出一张随机的牌 9-26. 两个指定值之间的随机数 9-27. 使用随机数来摇一个骰子 9-28. 重新分配随机数种子 9-29. 使用awk 产生伪随机数 9-30. C 风格的变量处理 10-1. 循环的一个简单例子 10-2. 每个[list]元素带两个参数的for 循环 10-3. 文件信息:对包含在变量中的文件列表进行操作 10-4. 在for 循环中操作文件 10-5. 在for 循环中省略[list] 10-6. 使用命令替换来产生for 循环的[list] 10-7. 对于二进制文件的一个grep 替换 10-8. 列出系统上的所有用户 10-9. 在目录的所有文件中查找源字串 10-10. 列出目录中所有的符号连接文件 10-11. 将目录中的符号连接文件名保存到一个文件中 10-12. 一个C 风格的for 循环 10-13. 在batch mode 中使用efax 10-14. 简单的while 循环 10-15. 另一个while 循环 10-16. 多条件的while 循环 10-17. C 风格的while 循环 10-18. until 循环 10-19. 嵌套循环 10-20. break 和continue 命令在循环中的效果 10-21. 多层循环的退出 10-22. 多层循环的continue 10-23. 在实际的任务中使用"continue N" 10-24. 使用case 10-25. 使用case 来创建菜单 10-26. 使用命令替换来产生case 变量 10-27. 简单字符串匹配 10-28. 检查是否是字母输入 10-29. 用select 来创建菜单 10-30. 用函数中select 结构来创建菜单 11-1. 一个fork 出多个自己实例的脚本 11-2. printf 11-3. 使用read,变量分配 11-4. 当使用一个不带变量参数的read 命令时,将会发生什么? 11-5. read 命令的多行输入 11-6. 检测方向键 11-7. 通过文件重定向来使用read 11-8. 管道输出到read 中的问题 11-9. 修改当前的工作目录 11-10. 用"let"命令来作算术操作. 11-11. 显示eval 命令的效果 11-12. 强制登出(log-off) 11-13. 另一个"rot13"的版本 11-14. 在Perl 脚本中使用eval 命令来强制变量替换 11-15. 使用set 来改变脚本的位置参数 11-16. 重新分配位置参数 11-17. Unset 一个变量 11-18. 使用export 命令传递一个变量到一个内嵌awk 的脚本中 11-19. 使用getopts 命令来读取传递给脚本的选项/参数. 11-20. "Including"一个数据文件 11-21. 一个没什么用的,source 自身的脚本 11-22. exec 的效果 11-23. 一个exec 自身的脚本 11-24. 在继续处理之前,等待一个进程的结束 11-25. 一个结束自身的脚本. 12-1. 使用ls 命令来创建一个烧录CDR 的内容列表 12-2. Hello or Good-bye 12-3. 删除当前目录下文件名中包含一些特殊字符(包括空白)的文件.. 12-4. 通过文件的 inode 号来删除文件 12-5. Logfile: 使用 xargs 来监控系统 log 12-6. 把当前目录下的文件拷贝到另一个文件中 12-7. 通过名字Kill 进程 12-8. 使用xargs 分析单词出现的频率 12-9. 使用 expr 12-10. 使用 date 命令 12-11. 分析单词出现的频率 12-12. 那个文件是脚本? 12-13. 产生10 进制随机数 12-14. 使用 tail 命令来监控系统log 12-15. 在一个脚本中模仿 "grep" 的行为 12-16. 在1913 年的韦氏词典中查找定义 12-17. 检查列表中单词的正确性 12-18. 转换大写: 把一个文件的内容全部转换为大写. 12-19. 转换小写: 将当前目录下的所有文全部转换为小写. 12-20. Du: DOS 到 UNIX 文本文件的转换. 12-21. rot13: rot13, 弱智加密. 12-22. Generating "Crypto-Quote" Puzzles 12-23. 格式化文件列表. 12-24. 使用 column 来格式化目录列表 12-25. nl: 一个自己计算行号的脚本. 12-26. manview: 查看格式化的man 页 12-27. 使用 cpio 来拷贝一个目录树 12-28. 解包一个 rpm 归档文件 12-29. 从 C 文件中去掉注释 12-30. Exploring /usr/X11R6/bin 12-31. 一个"改进过"的 strings 命令 12-32. 在一个脚本中使用 cmp 来比较2 个文件. 12-33. basename 和 dirname 12-34. 检查文件完整性 12-35. Uudecod 编码后的文件 12-36. 查找滥用的连接来报告垃圾邮件发送者 12-37. 分析一个垃圾邮件域 12-38. 获得一份股票报价 12-39. 更新 Fedora Core 4 12-40. 使用 ssh 12-41. 一个可以mail 自己的脚本 12-42. 按月偿还贷款 12-43. 数制转换 12-44. 使用 "here document" 来调用 bc 12-45. 计算圆周率 12-46. 将10 进制数字转换为16 进制数字 12-47. 因子分解 12-48. 计算直角三角形的斜边 12-49. 使用 seq 来产生循环参数 12-50. 字母统计 12-51. 使用getopt 来分析命令行选项 12-52. 一个拷贝自身的脚本 12-53. 练习dd 12-54. 记录按键 12-55. 安全的删除一个文件 12-56. 文件名产生器 12-57. 将米转换为英里 12-58. 使用 m4 13-1. 设置一个新密码 13-2. 设置一个擦除字符 13-3. 关掉终端对于密码的echo 13-4. 按键检测 13-5. Checking a remote server for identd 13-6. pidof 帮助杀掉一个进程 13-7. 检查一个CD 镜像 13-8. 在一个文件中创建文件系统 13-9. 添加一个新的硬盘驱动器 13-10. 使用umask 来将输出文件隐藏起来 13-11. killall, 来自于 /etc/rc.d/init.d 14-1. 愚蠢的脚本策略 14-2. 从循环的输出中产生一个变量 14-3. 找anagram(回文构词法, 可以将一个有意义的单词, 变换为1 个或多个有意义的单词, 但 是还是原来的子母集合) 16-1. 使用exec 重定向标准输入 16-2. 使用exec 来重定向stdout 16-3. 使用exec 在同一脚本中重定向stdin 和stdout 16-4. 避免子shell 16-5. while 循环的重定向 16-6. 另一种while 循环的重定向 16-7. until 循环重定向 16-8. for 循环重定向 16-9. for 循环重定向 loop (将标准输入和标准输出都重定向了) 16-10. 重定向if/then 测试结构 16-11. 用于上面例子的"names.data"数据文件 16-12. 记录日志事件 17-1. 广播: 发送消息给每个登录上的用户 17-2. 仿造文件: 创建一个两行的仿造文件 17-3. 使用cat 的多行消息 17-4. 带有抑制tab 功能的多行消息 17-5. 使用参数替换的here document 17-6. 上传一个文件对到"Sunsite"的incoming 目录 17-7. 关闭参数替换 17-8. 一个产生另外一个脚本的脚本 17-9. Here documents 与函数 17-10. "匿名" here Document 17-11. 注释掉一段代码块 17-12. 一个自文档化(self-documenting)的脚本 17-13. 在一个文件的开头添加文本 20-1. 子shell 中的变量作用域 20-2. 列出用户的配置文件 20-3. 在子shell 里进行串行处理 21-1. 在受限的情况下运行脚本 23-1. 简单函数 23-2. 带着参数的函数 23-3. 函数和被传给脚本的命令行参数 23-4. 传递间接引用给函数 23-5. 解除传递给函数的参数引用 23-6. 再次尝试解除传递给函数的参数引用 23-7. 两个数中的最大者 23-8. 把数字转化成罗马数字 23-9. 测试函数最大的返回值 23-10. 比较两个大整数 23-11. 用户名的真实名 23-12. 局部变量的可见范围 23-13. 用局部变量来递归 23-14. 汉诺塔 24-1. 脚本中的别名 24-2. unalias: 设置和删除别名 25-1. 使用"与列表(and list)"来测试命令行参数 25-2. 用"与列表"的另一个命令行参数测试 25-3. "或列表"和"与列表"的结合使用 26-1. 简单的数组用法 26-2. 格式化一首诗 26-3. 多种数组操作 26-4. 用于数组的字符串操作符 26-5. 将脚本的内容传给数组 26-6. 一些数组专用的工具 26-7. 关于空数组和空数组元素 26-8. 初始化数组 26-9. 复制和连接数组 26-10. 关于连接数组的更多信息 26-11. 一位老朋友: 冒泡排序 26-12. 内嵌数组和间接引用 26-13. 复杂数组应用: 埃拉托色尼素数筛子 26-14. 模拟下推的堆栈 26-15. 复杂的数组应用: 列出一种怪异的数学序列 26-16. 模拟二维数组,并使它倾斜 27-1. 利用/dev/tcp 来检修故障 27-2. 搜索与一个PID 相关的进程 27-3. 网络连接状态 28-1. 隐藏cookie 而不再使用 28-2. 用/dev/zero 创建一个交换临时文件 28-3. 创建ramdisk 29-1. 一个错误的脚本 29-2. 丢失关键字(keyword) 29-3. 另一个错误脚本 29-4. 用"assert"测试条件 29-5. 捕捉 exit 29-6. 在Control-C 后清除垃圾 29-7. 跟踪变量 29-8. 运行多进程 (在多处理器的机器里) 31-1. 数字和字符串比较是不相等同的 31-2. 子SHELL 缺陷 31-3. 把echo 的输出用管道输送给read 命令 33-1. shell 包装 33-2. 稍微复杂一些的shell 包装 33-3. 写到日志文件的shell 包装 33-4. 包装awk 的脚本 33-5. 另一个包装awk 的脚本 33-6. 把Perl 嵌入Bash 脚本 33-7. Bash 和 Perl 脚本联合使用 33-8. 递归调用自己本身的(无用)脚本 33-9. 递归调用自己本身的(有用)脚本 33-10. 另一个递归调用自己本身的(有用)脚本 33-11. 一个 "彩色的" 地址资料库 33-12. 画盒子 33-13. 显示彩色文本 33-14. "赛马" 游戏 33-15. 返回值技巧 33-16. 整型还是string? 33-17. 传递和返回数组 33-18. anagrams 游戏 33-19. 在shell 脚本中调用的窗口部件 34-1. 字符串扩展 34-2. 间接变量引用 - 新方法 34-3. 使用间接变量引用的简单数据库应用 34-4. 用数组和其他的小技巧来处理四人随机打牌 A-1. mailformat: Formatting an e-mail message A-2. rn: A simple-minded file rename utility A-3. blank-rename: renames filenames containing blanks A-4. encryptedpw: Uploading to an ftp site, using a locally encrypted password A-5. copy-cd: Copying a data CD A-6. Collatz series A-7. days-between: Calculate number of days between two dates A-8. Make a "dictionary" A-9. Soundex conversion A-10. "Game of Life" A-11. Data file for "Game of Life" A-12. behead: Removing mail and news message headers A-13. ftpget: Downloading files via ftp A-14. password: Generating random 8-character passwords A-15. fifo: Making daily backups, using named pipes A-16. Generating prime numbers using the modulo operator A-17. tree: Displaying a directory tree A-18. string functions: C-like string functions A-19. Directory information A-20. Object-oriented database A-21. Library of hash functions A-22. Colorizing text using hash functions A-23. Mounting USB keychain storage devices A-24. Preserving weblogs A-25. Protecting literal strings A-26. Unprotecting literal strings A-27. Spammer Identification A-28. Spammer Hunt A-29. Making wget easier to use A-30. A "podcasting" script A-31. Basics Reviewed A-32. An expanded cd command C-1. Counting Letter Occurrences K-1. Sample .bashrc file L-1. VIEWDATA.BAT: DOS Batch File L-2. viewdata.sh: Shell Script Conversion of VIEWDATA.BAT P-1. Print the server environment

2010-03-25

Linux移植step by step

全面介绍了嵌入式 Linux 系统的开发过程中,各种驱动的源码获取、源码修改、配置和移植,驱动测试程序的编写,根文件系统的构造(包括移植 busybox、glibc、制作映像文件等),DIY自己的驱动程序和测试程序的编写。

2010-03-16

linux系统移植开发文档

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 uboot 移植工作目录....................................................................................................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.2 装载过程.....................................................................................................................16 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 tlinux. 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 armlinuxgcc 的使用.................................................................................................29 3.2.2 armlinuxar 和 armlinuxranlib 的使用..................................................................30 3.2.3 armlinuxobjdump 的使用.........................................................................................30 3.2.4 armlinuxreadelf 的使用............................................................................................31 3.2.6 armlinuxcopydump 的使用......................................................................................32 4 ARM GNU常用汇编语言介绍.................................................................................................32 4.1 ARM GNU常用汇编伪指令介绍.....................................................................................32 4.2 ARM GNU专有符号.........................................................................................................33 4.3 操作码................................................................................................................................33 5 可执行生成说明........................................................................................................................33 5.1 lds文件说明.......................................................................................................................33 5.1.1 主要符号说明.............................................................................................................33 5.1.2 段定义说明.................................................................................................................34 第四部分 uboot 的移植...................................................................................................................35 1 uboot 的介绍及系统结构.........................................................................................................35 1.1 uboot 介绍.........................................................................................................................35 1.2 获取uboot......................................................................................................................... 35 1.3 uboot 体系结构.................................................................................................................35 1.3.1 uboot 目录结构..........................................................................................................35 2 uboot的启动过程及工作原理...................................................................................................36 2.1 启动模式介绍.....................................................................................................................36 2.2 阶段1介绍.........................................................................................................................36 2.2.1 定义入口.....................................................................................................................36 2.2.2 设置异常向量.............................................................................................................37 2.2.3 设置CPU的模式为SVC模式..................................................................................37 2.2.4 关闭看门狗.................................................................................................................37 2.2.5 禁掉所有中断.............................................................................................................37 2.2.6 设置以CPU的频率....................................................................................................37 2.2.7 设置CP15...................................................................................................................37 2.2.8 配置内存区控制寄存器.............................................................................................38 2.2.9 安装UBOOT 使的栈空间........................................................................................38 2.2.10 BSS段清0................................................................................................................38 2.2.11 搬移Nand Flash代码...............................................................................................39 2.2.12 进入C代码部分.......................................................................................................39 2.3 阶段2的C语言代码部分 .............................................................................................39 2.3.1调用一系列的初始化函数.........................................................................................39 2.3.2 初始化网络设备.........................................................................................................41 2.3.3 进入主UBOOT命令行..............................................................................................41 2.4 代码搬运.............................................................................................................................41 3 uboot的移植过程.......................................................................................................................42 3.1 环境....................................................................................................................................42 3.2 步骤....................................................................................................................................42 3.2.1 修改Makefile..............................................................................................................42 3.2.2 在board子目录中建立crane2410.............................................................................42 3.2.3 在include/configs/中建立配置头文件......................................................................42 3.2.4 指定交叉编译工具的路径.........................................................................................42 3.2.5 测试编译能否成功.....................................................................................................42 3.2.6 修改lowlevel_init.S文件...........................................................................................43 3.2.9 UBOOT的Nand Flash移植......................................................................................45 3.2.8重新编译uboot.......................................................................................................... 45 3.2.9 把uboot 烧入flash....................................................................................................45 4 UBOOT 命令的使用................................................................................................................46 4.1 UBOOT 命令的介绍.........................................................................................................46 4.1.1 获得帮助信息.............................................................................................................46 4.2 常用命令使用说明.............................................................................................................47 4.2.1 askenv(F).....................................................................................................................47 4.2.2 autoscr........................................................................................................................47 4.2.3 base ...........................................................................................................................47 4.2.4 bdinfo..........................................................................................................................47 4.2.5 bootp...........................................................................................................................47 4.2.8 tftp(tftpboot)................................................................................................................48 4.2.9 bootm..........................................................................................................................48 4.2.10 go..............................................................................................................................48 4.2.11 cmp .........................................................................................................................48 4.2.12 coninfo .....................................................................................................................48 4.2.13 cp..............................................................................................................................48 4.2.14 date...........................................................................................................................49 4.2.15 erase(F)......................................................................................................................49 4.2.16 flinfo(F).....................................................................................................................49 4.2.17 iminfo........................................................................................................................49 4.2.18 loadb..........................................................................................................................49 4.2.19 md.............................................................................................................................49 4.2.20 mm ............................................................................................................................50 4.2.21 mtest .......................................................................................................................50 4.2.22 mw.............................................................................................................................50 4.2.23 nm ...........................................................................................................................50 4.2.24 printenv......................................................................................................................50 4.2.25 ping ..........................................................................................................................51 4.2.26 reset..........................................................................................................................51 4.2.27 run ...........................................................................................................................51 4.2.28 saveenv(F).................................................................................................................51 4.2.29 setenv.........................................................................................................................51 4.2.30 sleep..........................................................................................................................51 4.2.31 version.......................................................................................................................51 4.2.32 nand info....................................................................................................................51 4.2.33 nand device <n>........................................................................................................51 4.2.34 nand bad....................................................................................................................51 4.2.35 nand read...................................................................................................................52 4.2.36 nand erease................................................................................................................52 4.2.37 nand write..................................................................................................................52 4.3 命令简写说明.....................................................................................................................52 4.4 把文件写入NandFlash.......................................................................................................53 4.5 下载提供.............................................................................................................................53 5 参考资料...................................................................................................................................53 第五部分 linux 2.6内核的移植.......................................................................................................53 1 内核移植过程............................................................................................................................53 1.1 下载linux内核...................................................................................................................53 1.2 修改Makefile.....................................................................................................................53 1.3 设置flash分区...................................................................................................................54 1.3.1指明分区信息.............................................................................................................54 1.3.2 指定启动时初始化.....................................................................................................56 1.3.3 禁止Flash ECC校验 ................................................................................................56 1.4 配置内核.............................................................................................................................56 1.4.1 支持启动时挂载devfs................................................................................................56 1.4.2配置内核产生.config文件.........................................................................................57 1.4.3编译内核.....................................................................................................................58 1.4.4 下载zImage到开发板................................................................................................58 2 创建uImage...............................................................................................................................61 2.1 相关技术背景介绍.............................................................................................................61 2.2 在内核中创建uImage的方法...........................................................................................61 2.2.1 获取mkimage工具.....................................................................................................61 2.2.2 修改内核的Makefile文件.........................................................................................61 3追加实验记录.............................................................................................................................62 3.1移植linux2.6.15.7.............................................................................................................. 62 3.2移植linux2.6.16.21............................................................................................................ 62 3.3 移植linux2.6.17................................................................................................................ 62 4 参考资料...................................................................................................................................62 第六部分 应用程序的移植..............................................................................................................63 1构造目标板的根目录及文件系统.............................................................................................63 1.1 建立一个目标板的空根目录.............................................................................................63 1.2 在my_rootfs中建立Linux目录树...................................................................................63 1.3 创建linuxrc文件................................................................................................................63 2 移植Busybox............................................................................................................................64 2.1 下载busybox......................................................................................................................64 2.3 编译并安装Busybox..........................................................................................................65 3 移植TinyLogin..........................................................................................................................66 3.1 下载....................................................................................................................................66 3.2 修改tinyLogin的Makefile................................................................................................66 3.3 编译并安装.........................................................................................................................66 4 相关配置文件的创建................................................................................................................66 4.1 创建帐号及密码文件.........................................................................................................66 4.2 创建profile文件................................................................................................................67 4.4 创建fstab文件...................................................................................................................67 4.5 创建inetd.conf配置文件...................................................................................................67 5 移植inetd...................................................................................................................................67 5.1 inetd的选择及获取............................................................................................................67 5.1.1 获取inetd....................................................................................................................67 5.2 编译inetd...........................................................................................................................67 5.2.1 修改configure文件....................................................................................................67 5.2.2 编译 ...........................................................................................................................68 5.3 配置inetd...........................................................................................................................68 5.3.1 拷贝inetd到根文件系统的usr/sbin目录中.............................................................68 6 移植thttpd Web服务器.............................................................................................................69 6.1 下载....................................................................................................................................69 6.2 编译thttpd..........................................................................................................................69 6.3 配置....................................................................................................................................69 6.3.1 拷贝thttpd二进制可执行文件到根文件系统/usr/sbin/目录中...............................69 6.3.2 修改thttpd配置文件..................................................................................................69 6.3.3 转移到根文件系统目录,创建相应的文件.............................................................69 7 建立根目录文件系统包............................................................................................................70 7.1 建立CRAMFS包...............................................................................................................70 7.1.1 下载cramfs工具........................................................................................................70 7.1.2 制作cramfs包............................................................................................................70 7.1.3 写cramfs包到Nand Flash.........................................................................................70 8 参考资料...................................................................................................................................70 第七部分 Nand flash驱动的编写与移植........................................................................................71 1 Nand flash工作原理..................................................................................................................71 1.1 Nand flash芯片工作原理..................................................................................................71 1.1.1 芯片内部存储布局及存储操作特点.........................................................................71 1.1.2 重要芯片引脚功能.....................................................................................................71 1.1.3 寻址方式.....................................................................................................................71 1.1.4 Nand flash主要内设命令详细介绍...........................................................................72 1.2 Nand Flash 控制器工作原理.............................................................................................72 1.2.1 Nand Flash控制器特性..............................................................................................72 1.2.2 Nand Flash控制器工作原理......................................................................................72 1.3 Nand flash 控制器中特殊功能寄存器详细介绍 ............................................................72 1.4 Nand Flash 控制器中的硬件ECC介绍............................................................................73 1.4.1 ECC产生方法............................................................................................................73 1.4.2 ECC生成器工作过程................................................................................................74 1.4.3 ECC的运用................................................................................................................74 2 在ADS下flash烧写程序.........................................................................................................74 2.1 ADS下flash烧写程序原理及结构...................................................................................74 2.2 第三层实现说明.................................................................................................................74 2.1.1 特殊功能寄存器定义.................................................................................................74 2.1.2 操作的函数实现.........................................................................................................74 2.3 第二层实现说明.................................................................................................................75 2.3.1 Nand Flash 初始化......................................................................................................75 2.3.3 获取Nand flash ID......................................................................................................75 2.3.4 Nand flash写入...........................................................................................................76 2.3.5 Nand flash读取...........................................................................................................77 2.3.6 Nand flash标记坏块...................................................................................................78 2.3.7 Nand Flash检查坏块..................................................................................................79 2.3.8 擦除指定块中数据.....................................................................................................79 2.4 第一层的实现....................................................................................................................80 3 在UBOOT 对Nand Flash的支持............................................................................................82 3.1 UBOOT 对从Nand Flash启动的支持.............................................................................82 3.1.1 从Nand Flash启动UBOOT 的基本原理................................................................82 3.1.2 支持Nand Flash启动代码说明.................................................................................82 3.2 UBOOT 对Nand Flash命令的支持.................................................................................84 3.2.1 主要数据结构介绍.....................................................................................................84 3.2.2 支持的命令函数说明.................................................................................................85 4 在Linux对Nand Flash的支持.................................................................................................87 4.1 Linux下Nand Flash调用关系..........................................................................................87 4.1.1 Nand Flash设备添加时数据结构包含关系..............................................................87 4.1.2 Nand Flash设备注册时数据结构包含关系..............................................................87 4.2 Linux下Nand Flash驱动主要数据结构说明..................................................................88 4.2.1 s3c2410专有数据结构...............................................................................................88 4.2.2 Linux 通用数据结构说明..........................................................................................89 4.3.1 注册driver_register....................................................................................................94 4.3.2 探测设备probe...........................................................................................................94 4.3.3 初始化Nand Flash控制器.........................................................................................94 4.3.4 移除设备.....................................................................................................................94 4.3.5 Nand Flash芯片初始化..............................................................................................94 4.3.6 读Nand Flash............................................................................................................95 4.3.7 写Nand Flash.............................................................................................................95 第八部分 Cs8900a网卡驱动的编写与移植...................................................................................95 1 Cs8900a工作原理......................................................................................................................95 2 在ADS下cs8900a的实现........................................................................................................95 2.1 在cs8900a下实现的ping 工具.........................................................................................95 3 在uboot 下cs8900a的支持......................................................................................................96 3.1 uboot 下cs8900a的驱动介绍...........................................................................................96 3.2 uboot 下cs8900a的移植说明...........................................................................................96 4 在linux下cs8900a驱动的编写与移植....................................................................................96 4.1 Linux下cs8900a的驱动说明............................................................................................96 4.2 Linux 下cs8900a的移植说明...........................................................................................96 4.2.1 为cs8900a建立编译菜单..........................................................................................96 4.2.2 修改S3C2410相关信息............................................................................................97 序 该文档的目的是总结我们在工作中的一些经验,并把它们分享给喜欢ARM和Linux的朋友, 如有错误 之处,请大家多多指点. 同样, 我们也希望更多人能把自己的工作经验和体会加入该文档,让大家共同进步. 该文档是一份交流性文档, 只供个人学习与交流,不允许公司和企业用于商业行为. 第一部分 前言 1 硬件环境 1.1主机硬件环境 开发机:Pentium-4 CPU 内存: 512MB 硬盘: 60GB 1.2 目标板硬件环境 CPU: S3C2410 SDRAM: HY57V561620 Nand flash: K9F1208U0B(64MB) 以太网芯片:CS8900A (10M/100MB) 1.3工具介绍 仿真器:Dragon-ICE 电缆:串口线,并口线 2软件环境 2.1主机软件环境 2.1.1 Windows 操作系统 ADS编译工具:ADS1.2 仿真器软件: Dragon-ICE daemon程序 2.1.2 Linux操作系统 GNU交叉编译工具: 2.95.3: 作用:编译u-boot 3.3.2, 3.4.4: 作用:编译内核和应用程序 其它工作: tree工具: 作用:查看文件目录树 下载:从ftp://mama.indstate.edu/linux/tree/下载编译 2.1.3 目标板最后运行的环境 启动程序: u-boot-1.1.4 内核: linux-2.6.14.1 应用程序: 1. busybox-1.1.3 2. TinyLogin-1.4 3. Thttpd-2.25 2.2 Linux下工作用户及环境 2.2.1 交叉工具的安装 工具链的编译过程请参考第三部分. 1. 下载交叉工具 2.95.3 下载地址:ftp://ftp.arm.linux.org.uk/pub/armlinux/toolchain/cross- 2.95.3.tar.bz2 3.3.4 下载地址: 2. 编译交叉工具 [root@localhost ~]mkdir /usr/local/arm [root@localhost ~]cd /usr/local/arm 把cross-2.95.2.tar.bz2, cross-3.4.4.tar.gz 拷贝到/usr/local/arm目录中。解压这两个包。 [root@localhost ~]tar -xjvf cross-2.95.2.tar.bz2 [root@localhost ~]tar -xzvf cross-3.4.4.tar.gz 2.2.2 u-boot移植工作目录 1. 添加工作用户 [root@localhost ~]#useradd -G root -g root -d/home/uboot uboot 2. 建立工作目录 [uboot@localhost ~]$mkdir dev_home [uboot@localhost ~]$cd dev_home [uboot@localhost dev_home]$mkdir doc mybootloader uboot . |-- doc |-- mybootloader `-- uboot 3. 建立环境变量 [uboot@localhost ~]vi ~/.bashrc export PATH=/usr/local/arm/2.95.3/bin:$PATH 2.2.3 内核及应用程序移植工作 1. 添加工作用户 [root@localhost ~]#useradd -G root -g root -d/home/arm arm 2. 建立工作目录 [arm@localhost arm]$mkdir dev_home [arm@localhost arm]$cd dev_home [arm@localhost arm]$mkdir bootldr btools debug doc images kernel localapps \ rootfs sysapps tmp tools [arm@localhost arm]$tree -L 1 . |-- bootldr |-- btools |-- debug |-- doc |-- images |-- kernel |-- localapps |-- rootfs |-- sysapps |-- tmp `-- tools 可以看到如上树形结构。 注:tree命令 3. 建立环境变量设置脚本 [arm@localhost arm]$vi env_sh #!/bin/bash PRJROOT=~/dev_home KERNEL=$PRJROOT/kernel ROOTFS=$PRJROOT/rootfs LAPP=$PRJROOT/localapps DOC=$PRJROOT/doc TMP=$PRJROOT/tmp export PRJROOT KERNEL LAPP ROOTFS export PATH=/usr/local/arm/3.4.4/bin:$PATH 4. 登陆时启动环境变量 [arm@localhost arm]$vi ~/.bashrc . ~/dev_home/env_sh 重新登陆arm用户,环境变量生效 [arm@localhost arm]$su arm 2.3 配置系统服务 2.3.1 tftp服务器的配置 如果用下面一条命令能够看到服务已经启动, 则不用安装, 否则需要按1或2点安装tftp-server服务器. [arm@localhost arm]#netstat -a | grep tftp udp 0 0 *:tftp *:* 1. 从RPM包安装tftp-server 从对应Linux操作系统版本的安装光盘上找到tftp-server的安装包. 下面tftp-server-0.32-4.i386.rpm包为例,把rpm包拷贝到dev_home/btools/下. [arm@localhost arm]#cp tftp-server-0.32-4.i386.rpm /home/arm/dev_home/btools/ [arm@localhost arm]#su root [root@localhost arm]#rpm -q tftp-server 如果没有安装tftp-server,就要用下面命令安装,否则,直接进入第2步配置服务. [root@localhost arm]#cd /home/arm/dev_home/btools/ [root@localhost btools]#rpm -ivh tftp-server-0.32-4.i386.rpm 建立tftp的主工作目录 [root@localhost btools]#mkdir /tftpboot 2. 修改配置文件并启动服务 备份配置文件 [root@localhost btools]#if [ -f /etc/xinetd.d/tftp ] > then > cp /etc/xinetd.d/tftp /etc/xinetd.d/tftp.old > fi 修改配置文件 [root@localhost btools]#vi /etc/xinetd.d/tftp service tftp { disable = no socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /tftpboot per_source = 11 cps = 100 2 flags = IPv4 } 检查tftp服务是否打开 [root@localhost btools]#chkconfig --list 如果tftp的服务没有打开,则用下面命令打开tftp服务开关 [root@localhost btools]#chkconfig tftp on 重启服务 #/etc/init.d/xinetd restart #netstat -a | grep tftp udp 0 0 *:tftp *:* 2.3.2 NFS服务器的配置 1. 安装NFS服务器 [root@localhost btools]#rpm -q nfs-utils 如果没有安装,从对应Linux操作系统版本的安装光盘上找到nfs-utils的安装包.Fedora 5中的安装包 名称为nfs-utils-1.0.8.rc2-4.FC5.2.i386.rpm。下面以该安装包为例说明: [root@localhost btools]#rpm -ivh nfs-utils-1.0.8.rc2-4.FC5.2.i386.rpm 2. 配置NFS服务器 [root@localhost btools]#vi /etc/exports #加入要允许被另外计算机mount的目录: #/home/arm/dev_home/tmp 为被另外计算机mount的目录 #192.168.1.134 允许另外计算机mount的IP #rw,sync,no_root_squash表示访问限制,更详细说明见相关手册. /home/arm/dev_home/tmp 192.168.1.134(rw,sync,no_root_squash) 3. 启动NFS服务器 第一启动NFS服务器时用下面命令. [root@localhost btools]#/etc/init.d/nfs start 如果你已经启动了NFS服务器时,并且重新修改了/etc/exports文件,用如下命令使新加入的目录生效: [root@localhost btools]#/etc/init.d/nfs reload 4. 测试NFS服务器 [root@localhost btools]#netstat -a | grep nfs 5. 显示被export出的目录列表 [root@localhost btools]#exportfs 2.4 工具使用 2.4.1 minicom的使用 1.切换到root用户. [root@localhost btools]#su - 2. 查找有效的串设备. [root@localhost ~]#cat /proc/devices ... 4 ttyS ... 188 ttyUSB ... 如果是普通串口设备, 设备名前缀为ttyS, 第一串口为ttyS0, 第二串口为ttyS1,依次类推. 如果是USB转串口的设备, 设备名前缀为ttyUSB, 第一串口为ttyUSB0. 3. 配置ttyUSB设备 [root@localhost ~]#minicom -s ttyUSB0 会出现一个configuration窗口, ┌──[configuration]────┐ │ Filenames and paths │ │ File transfer protocols │ │ Serial port setup │ │ Modem and dialing │ │ Screen and keyboard │ │ Save setup as ttyUSB0 │ │ Save setup as.. │ │ Exit │ │ Exit from Minicom │ └───────────────┘ 选择Serial port setup配置. 会出现如下窗口: ┌────────────────────────────────────────────┐ │ A - Serial Device : /dev/ttyUSB0 │ │ B - Lockfile Location : /var/lock │ │ C - Callin Program : │ │ D - Callout Program : │ │ E - Bps/Par/Bits : 115200 8N1 │ │ F - Hardware Flow Control : No │ │ G - Software Flow Control : No │ │ │ │ Change which setting? │ └───────────────────────────────────────────┘ 我的设置如上所示, 设置完成后, Change which setting?项上按回车退出当前窗口, 回到第一个窗口.按 Save setup as ttyUSB0保存设置. 再按Exit from Minicom退出Minicom. 4. 启动minicom [root@localhost ~]#minicom 3 作者介绍 3.1 策划, 组织, 指导, 发布者 刘勇 email: [email protected] 如果您有新的内容,请发到这个电子邮件,我们会把您的内容加入文档,并在作者列表中加入您的名字. 3.2 ADS bootloader部分 作者:刘勇 email: [email protected] 3.3 交叉工具部分 作者:孙贺 email: [email protected] 3.4 uboot部分 作者:聂强 email: [email protected] 作者:孙贺 email: [email protected] 3.5 内核部分 作者:聂大鹏 email:[email protected] 作者:牛须乐(8900a网卡移植部分) email:[email protected] 3.6 应用程序部分 作者:聂大鹏 email:[email protected] 3.7 Nand Flash 驱动部分 作者:孙磊,刘勇 email:[email protected] 4 支持企业 4.1 尚观科技 为我们提供统许多套远峰公司的ARM开发板, 才能让我们做出统一的文档. 第部分 系统启动bootloader的编写(ADS) 1 工具介绍 1.1 ADS 命令行命令介绍 1.1.1 armasm 1. 命令:armasm [选项] -o 目标文件 源文件 2. 选项说明 -Errors 错误文件名 ;指定一个错误输出文件 -I 目录[,目录] ;指定源文件搜索目录 -PreDefine 预定义宏 ;指定预定义的宏 -NOCache ;编译源代码时禁止使用Cache进行优化 -MaxCache <n> ;编译源代码时使用Cache进行优化 -NOWarn ;关闭所有的警告信息 -G ;输出调试表 -keep ;在目标文件中保存本地符号表 -LIttleend ;生成小端(Little-endian) ARM代码 -BIgend ;生成大端(Big-endian) ARM代码 -CPU <target-cpu> ;设立目标板ARM核类型,如: arm920t. -16 ;建立16位的thumb指令. -32 ;建立32位的ARM指令. 3. 编译一个汇编文件 c:\adsloader>armasm -LIttleend -cpu ARM920T -32 bdinit.s 把汇编语言编译成小端, 32位, ARM920T CPU. 1.1.2 armcc, armcpp 1. 命令:armcc [选项] 源文件1 源文件2 ... 源文件n 2. 选项说明 -c ;编译但是不连接 -D ;指定一个编译时使用的预定义宏常量 -E ;仅仅对C源文件做预处理 -g ;产生调试信息表 -I ;指头文件的搜索路径 -o<file> ;指定一个输出的目标文件 -O[0/1/2] ;指定源代码的优化级别 -S ;输出汇编代码来代替目标文件 -CPU <target-cpu> ;设立目标板ARM核类型,如: arm920t. 3.编译一个C程序 c:\adsloader>armcc -c -O1 -cpu ARM920T bdisr.c 编译不连接, 二级优化, ARM920T CPU. 1.1.3 armlink 1. 命令:armlink [选项] 输入文件 2. 选项说明 -partial ;合并目标文件 -Output 文件 ;指定输出文件名 -scatter 文件 ;按照指定的文件为可执行文件建立内存映射 -ro-base 地址值 ;只读代码段的起始地址 -rw-base 地址值 ;RW/ZI段的起始地址 3. 把多个目标文件合并成一个目标文件 c:\adsloader>armlink -partial bdmain.o bdport.o bdserial.o bdmmu.o bdisr.o -o bd.o 4. 把几个目标文件编译一个可执地文件 c:\adsloader>armlink bd.o bdinit.o -scatter bdscf.scf -o bd.axf 1.1.4 fromelf 1. 命令:fromelf [选项] 输入文件 2. 选项说明 -bin 二进制文件名 ;产生的二进制文件 -elf elf文件名 ;产生一个elf文件 -text text文件名 ;产生text文件 3. 产生一个可执行的二进制代码 c:\adsloader>fromelf bd.axf bin o bd.bin 2 基本原理 2.1 可执行文件组成及内存映射 2.1.1 可执行文件的组成 在ADS下,可执行文件有两种,一种是.axf文件,带有调试信息,可供AXD调试工具使用.另一种是.bin 文件,可执行的二进制代码文件。我们重点是讲描.bin文件的组成。 我们把可执行文件分为两种情况:分别为存放态和运行态。 1. 存放态 存放态是指可执行文件通过fromelf产生后,在存储介质(flash或磁盘)上的分布. 此时可执行文件一 般由两部分组成:分别是代码段和数据段。代码段又分为可执行代码段(.text)和只读数据段(.rodata), 数据段又分为初始化数据段(.data)和未初始化数据段(.bss)。可执行文件的存放态如下: +-------------+----------- | .bss | +-------------+-- 数据段 | .data | +-------------+----------- | .rodata | |_____________| 代码段 | .text | +-------------+----------- 2. 运行态 可执行文件通过装载过程, 搬入到RAM中运行, 这时候可执行文件就变成运行态。在ADS下对可执行代 码各段有另一个名称: | ... | +-------------+----------- | .bss | ZI 段 +-------------+-- 数据段 | .data | RW 段 +-------------+----------- | .rodata | |_____________| 代码段(RO 段) | .text | +-------------+----------- | ... | 装载前 当可执行文件装载后, 在RAM中的分布如下: | ... | +-------------+-- ZI段结束地址 | ZI 段 | +-------------+-- ZI段起始地址 | 保留区2 | +-------------+-- RW段结束地址 | RW 段 | +-------------+-- RW段起始地址 | 保留区1 | +-------------+-- RO段结束地址 | RO 段 | +-------------+-- RO段起始地址 | ... | 装载后 所以装载过程必须完成把执行文件的各个段从存储介质上搬到RAM指定的位置。而这个装载过程由谁来完 成呢?由我们的启动程序来完成. 2.1.2 装载过程 在ADS中,可以通过两种方式来指定可执行代码各段在RAM中的位置,一个是用armlink来指定,一种是 用scatter文件来指定.RAM区的起始地址:0x30000000. 1. armlink指定代码段地址 我们通常的代码,只用指定两个段开始地址, RO段的起始地址和RW段的起始地址, ZI段紧接在RW段之 后.示例见该部分的1.1.3. 2. scatter指定代码段地址 我们也可以通过scatter文件指定可执行文件各段的详细地址. Scatter文件如下: MYLOADER 0x30000000 ;MYLOADER: 为可执行文件的名称, 可自定义 ;0x3000000: 起始地址 { RO 0x30000000 ;RO 只读代码段的名称 ;0x30000000: 只读代码段的起始地址 { init.o (Init, +First) ; Init代码段为可执行文件的第一部分. * (+RO) ;所有其它的代码段和只读数据段放在该部分 } RW +0 ;RW: RW段的名称 ;+0: 表示RW段紧接着RO段 { * (+RW) ;所有RW段放在该部分 } ZI +0 ;ZI: ZI段的名称 ;+0: 表示ZI段紧接着RW段 { *(+ZI) ;所有ZI段放在该部分 } } 3. ADS产生的各代码段宏 |Image$$RO$$Base| /* RO代码段起始地址 */ |Image$$RO$$Limit| /* RO 代码段结束地址 */ |Image$$RW$$Base| /* RW代码段起始地址 */ |Image$$RW$$Limit| /* RW 代码段结束地址 */ |Image$$ZI$$Base| /* ZI 代码段起始地址 */ |Image$$ZI$$Limit| /* ZI 代码段结束地址 */ 注意:在两个$$之间的名称, 与scatter中指定的段的名称相同. 4. 装载过程说明 当从NorFlash启动时, 要把flash芯片的首地址映射到0x00000000位置, 系统启动后, 启动程序本身把自己从 flash中搬到RAM中运行. 搬移后的各段起始地址, 由以上宏来确定. 当从NandFlash启动时, S3C2410会自动把前NandFlash的前4k搬到S3C2410的内部RAM中,并把内部 RAM的首地址设为0x00000000,CPU从0x00000000开始执行. 所以, 在nandFlash的前4k程序中,必须包含从 NandFlash把BootLoader的其余部分装入RAM的程序. 2.1.3 启动过程的汇编部分 当系统启动时, ARM CPU会跳到0x00000000去执行。一般BootLoader都包括如下几个部分: 1. 建立中断向量异常表 2. 显示的切换到SVC且32指令模式 3. 关闭S3C2410的内部看门狗 4. 禁止所有的中断 5. 配置系统时钟频率和总线频率 6. 设置内存区的控制寄存器 7. 初始化中断 8. 安装中断向表量 9. 把可执行文件的各个段搬到运行态的各个位置 10. 跳到C代码部分执行 2.1.4 启动过程的C部分 1. 初始化MMU 2.初始化外部端口 3. 中断处理程序表初始化 4. 串口初始化 5. 其它部分初始化(可选) 6. 主程序循环 3 AXD的使用以及源代码说明 3.1 源代码说明 3.1.1 汇编源代码说明 ;=============================================================================== ; 引用头文件 ;=============================================================================== get bdinit.h ;=============================================================================== ; 引用标准变量 ;=============================================================================== IMPORT |Image$$RO$$Base| ; Base address of RO section IMPORT |Image$$RO$$Limit| ; End address of RO section IMPORT |Image$$RW$$Base| ; Base address of RW section IMPORT |Image$$RW$$Limit| ; End address of RW section IMPORT |Image$$ZI$$Base| ; Base address of ZI section IMPORT |Image$$ZI$$Limit| ; End addresss of ZI section IMPORT bdmain ; The entry function of C program ;=============================================================================== ; 宏定义 ;=============================================================================== ; macro HANDLER MACRO $HandlerLabel HANDLER $HandleLabel $HandlerLabel sub sp,sp,#4 ;Decrement sp (to store jump address) stmfd sp!,{r0} ;PUSH the work register to stack ldr r0,=$HandleLabel;Load the address of HandleXXX to r0 ldr r0,[r0] ;Load the contents(service routine start address) of HandleXXX str r0,[sp,#4] ;Store the contents(ISR) of HandleXXX to stack ldmfd sp!,{r0,pc} ;POP the work register and pc(jump to ISR) MEND ;=============================================================================== ; 汇编语言的入口代码 ;=============================================================================== AREA Init,CODE,READONLY CODE32 ENTRY ;===================== ; 建立中断向量表 ;===================== b reset_handler ;0x00000000: Reset (SVC) b undef_handler ;0x00000004: Undefined instruction (Undef) b swi_handler ;0x00000008: Software Interrupt (SVC) b iabr_handler ;0x0000000C: Instruction Abort (Abort) b dabr_handler ;0x00000010: Data Abort (Abort) b no_handler ;0x00000014: b irq_handler ;0x00000018: IRQ (IRQ) b fiq_handler ;0x0000001C: FIQ (FIQ) LTORG undef_handler HANDLER HandleUndef swi_handler HANDLER HandleSWI iabr_handler HANDLER HandlePabort dabr_handler HANDLER HandleDabort no_handler HANDLER HandleReserved irq_handler HANDLER HandleIRQ fiq_handler HANDLER HandleFIQ ;============================= ; 复位时运行的主程序 ;============================= reset_handler ;Set the cpu to SVC32 mode mrs r0,cpsr bic r0,r0,#0x1f orr r0,r0,#0xd3 msr cpsr_cxsf,r0 ;Turn off watchdog ldr r0,=WTCON ldr r1,=0x0 str r1,[r0] ;Disable all the first level interrupts ldr r0,=INTMSK ldr r1,=0xffffffff str r1,[r0] ;Disable all the second level interrupts ldr r0,=INTSUBMSK ldr r1,=0x7ff str r1,[r0] ;Configure MPLL ldr r0,=MPLLCON ldr r1,=((M_MDIV<<12)+(M_PDIV<<4)+M_SDIV) ;Fin=12MHz,Fout=200MHz str r1,[r0] ;Set FCLK:HCLK:PCLK = 1:2:4 ldr r0, =CLKDIVN mov r1, #3 str r1, [r0] ;Set memory control registers ldrr0,=SMRDATA ldr r1,=BWSCON add r2, r0, #52 ;End address of SMRDATA 0 ldr r3, [r0], #4 str r3, [r1], #4 cmp r2, r0 bne %B0 ;Initialize stacks bl InitStacks ;Setup IRQ handler ldr r0,=HandleIRQ ;This routine is needed ldr r1,=IsrIRQ str r1,[r0] ;Copy RW/ZI section into RAM ldr r0, =|Image$$RO$$Limit|;Get pointer to ROM data ldr r1, =|Image$$RW$$Base| ;and RAM copy ldr r3, =|Image$$ZI$$Base| cmp r0, r1 ; Check that they are different beq %F2 1 cmp r1, r3 ; Copy init data ldrcc r2, [r0], #4 ;--> LDRCC r2, [r0] + ADD r0, r0, #4 strcc r2, [r1], #4 ;--> STRCC r2, [r1] + ADD r1, r1, #4 bcc %B1 2 ldr r1, =|Image$$ZI$$Limit| ; Top of zero init segment mov r2, #0 3 cmp r3, r1 ; Zero init strcc r2, [r3], #4 bcc %B3 bl bdmain ;Jump to the main function ;Dead loop 1 nop b %B1 ;=============================================================================== ; 初始中断处理程序 ;=============================================================================== IsrIRQ sub sp,sp,#4 ;reserved for PC stmfd sp!,{r8-r9} ldr r9,=INTOFFSET ldr r9,[r9] ldr r8,=HandleEINT0 add r8,r8,r9,lsl #2 ldr r8,[r8] str r8,[sp,#8] ldmfd sp!,{r8-r9,pc} ;=============================================================================== ; 初始化各个模式下堆栈 ;=============================================================================== InitStacks mrs r0,cpsr bic r0,r0,#MODEMASK orr r1,r0,#UNDEFMODE|NOINT msr cpsr_cxsf,r1 ;UndefMode ldr sp,=UndefStack orr r1,r0,#ABORTMODE|NOINT msr cpsr_cxsf,r1 ;AbortMode ldr sp,=AbortStack orr r1,r0,#IRQMODE|NOINT msr cpsr_cxsf,r1 ;IRQMode ldr sp,=IRQStack orr r1,r0,#FIQMODE|NOINT msr cpsr_cxsf,r1 ;FIQMode ldr sp,=FIQStack bic r0,r0,#MODEMASK|NOINT orr r1,r0,#SVCMODE msr cpsr_cxsf,r1 ;SVCMode ldr sp,=SVCStack mov pc,lr ;Return the call routine LTORG ;=============================================================================== ; 内存区控制寄存器值表; 你可根据需要修改bdinit.h文件, 下面代码不用做任何改动 ;=============================================================================== SMRDATA DATA DCD (0+(B1_BWSCON<<4)+(B2_BWSCON<<8)+(B3_BWSCON<<12)+(B4_BWSCON<<16)+(B5_BWSCON<<20)+(B6_BWSCON<<24)+( B7_BWSCON<<28)) DCD ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC)) ;GCS0 DCD ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC)) ;GCS1 DCD ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC)) ;GCS2 DCD ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC)) ;GCS3 DCD ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC)) ;GCS4 DCD ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC)) ;GCS5 DCD ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN)) ;GCS6 DCD ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN)) ;GCS7 DCD ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT) DCD 0x32 ;SCLK power saving mode, BANKSIZE 128M/128M DCD 0x30 ;MRSR6 CL=3clk DCD 0x30 ;MRSR7 ALIGN ;=============================================================================== ; 异常及中断向量表空间; 安装异常或中断处理程序在bdisr.c中,isr_setup()来完成. ;=============================================================================== AREA RamData, DATA, READWRITE ^ _ISR_STARTADDRESS ;表示下面数据区从_ISR_STARTADDRESS指定的位置开始 HandleReset # 4 HandleUndef # 4 HandleSWI # 4 HandlePabort # 4 HandleDabort # 4 HandleReserved # 4 HandleIRQ # 4 HandleFIQ # 4 ;============================= ; The Interrupt table ;============================= HandleEINT0 # 4 HandleEINT1 # 4 HandleEINT2 # 4 HandleEINT3 # 4 HandleEINT4_7 # 4 HandleEINT8_23 # 4 HandleRSV6 # 4 HandleBATFLT # 4 HandleTICK # 4 HandleWDT # 4 HandleTIMER0 # 4 HandleTIMER1 # 4 HandleTIMER2 # 4 HandleTIMER3 # 4 HandleTIMER4 # 4 HandleUART2 # 4 HandleLCD # 4 HandleDMA0 # 4 HandleDMA1 # 4 HandleDMA2 # 4 HandleDMA3 # 4 HandleMMC # 4 HandleSPI0 # 4 HandleUART1 # 4 HandleRSV24 # 4 HandleUSBD # 4 HandleUSBH # 4 HandleIIC # 4 HandleUART0 # 4 HandleSPI1 # 4 HandleRTC # 4 HandleADC # 4 END 3.1.2 C语言源代码说明 void bdmain(void) { /* 禁止Cache 和MMU */ cache_disable(); mmu_disable(); /* 端口初始化 */ port_init(); /* 中断处理程序 */ isr_init(); /* 串口初始化 */ serial_init(0, 115200); /* 输出信息进行主循环 */ serial_printf("is ok!\n"); while(1) { } } 通常基本ADS的测试程序都可以在这个架构上加入自己的代码. 3.2 AXD的使用 3.2.1 配置仿真器 1. 为仿真器安装Server 一般的仿真器都对应有一个Server程序,所以在使用在线仿真之前,必须先安装这个Server程序。我使用 是DragonICE 仿真器, 所以先要安装DragonICE Server程序。 2. 连接仿真器 把dragonICE 仿真器的JTAG口连接上ARM板(注意:ARM板要断电连接), 另一端通过并口连接到PC上, 有的仿真器是通过USB口连接到PC上, 这与仿真器的硬件相关。连接好后, 打开ARM电源,启动ARM板。 当ARM通电启动后,启动DragonICE Server检测ARM板,详细步骤及设置参见对应的仿真器手册。我的 dragonICE Server启动, 按”自动检测”可以检测到ARM920T。 3.2.2 启动AXD 配置开发板 1. 启动AXD 先启动DragonICE Server程序. 按如下步聚启动AXD: 开始> 所有程序> ARM Developer Suite v1.2> AXD Debugger 2. 装载仿真器库文件 从AXD菜单的Options> Configure Target...启动”Choose Target”目标板配置窗口. 在”Choose Target”窗口中,点击”Add”按钮,选择仿真器的库文件. 我的仿真器服务器程序安装在 c:\DragonICE 下,所以选择项c:\DragonICE\ dragonice. dll文件. 3. 为AXD在线仿真配置仿真器 在"Target Environments"中选中DragonICE 中,点击右边的"Configure"按钮. 在”FJB DragonICE Release v1.2”窗口点击"This computer..."按钮,再点击"OK"按钮。 回到”Choose Target”窗口,点击"OK"按钮。完成配置. 回到主界面, 在右边的”Target”窗口会出现ARM920T_0.这表明AXD已经进入ARM板的在线仿真状态. 点击菜单"System Views">" Controls Monitors".会出现"ARM920TRegister" 窗口.此时,会显示当前ARM板上所 有寄存器的状态。 4. 配置ARM板 如果ARM板通电后,没有程序运行并把内存区控制寄存器配置好的说,外部RAM是不能使用的. 所以必须 通过仿真器来设置这些寄存器. 如果ARM板已经有启动程序并且已经配置好, 这一步可以省略. 首先把2410cfg.txt拷贝到c:\下. 回到AXD主界面, 从菜单”System Views” > “Command Line Interface”。会出现一个Command Line Interface的调试命令行窗口,并显示如下提示符: Debug > 输入obey c:\2410cfg.txt装载所有配置命令. Debug >obey c:\2410cfg.txt 5. 2410cfg.txt文件说明 sreg psr, 0x00000013 ;设置当前CPSR的值, 把CPU的模式切换到SVC模式和32位指令集, 关闭IRQ和FIQ。 smem 0x53000000,0,32 ;设置看门狗控制寄存器WTCON ;禁止看门狗定时器 smem 0x4C000004,((0x74<<12)+(0x3<<4)+0x1),32 ;设置主频率设置寄存器MPLLCON ;目前CPU的工作频率FCLK是124.00MHz smem 0x4C000014,0x3,32 ;设置时钟分频寄存器CLKDIVN ;设置FCLK/HCLK/PCLK 的频率比例1:2:4 smem 0x48000000,((2<<28)+(2<<24)+(1<<20)+(1<<16)+(1<<12)+(1<<8)+(1<<4)+0),32 ;设置内存总线控制BWSCON ;SDRAM BANK 6&7 is 32位 ;其它BANK is 16位 smem 0x48000004,((3<<13)+(3<<11)+(7<<8)+(3<<6)+(3<<4)+(3<<2)+3),32 ;设置寄存器区0控制寄存器:BANKCON0 smem 0x4800001c,((3<<15)+(1<<2)+1),32 ;设置寄存器区6控制寄存器: BANKCON6(SDRAM) ;RAS to CAS 延时3 时钟周期 ;列地址是9位 smem 0x48000020,((3<<15)+(1<<2)+1),32 ;设置寄存器区7控制寄存器: BANKCON7(SDRAM) ;RAS to CAS 延时 3 时钟周期 ;列地址是9位 smem 0x48000024,((1<<23)+(3<<18)+(2<<16)+1113),32 ;set 外部RAM刷新寄存器:REFRESH ;允许自刷新 ;HCLK=FCLK/2, 60MHz,刷新计算器是1113 smem 0x48000028,0x31,32 ;设置寄存器的大小 ;禁止burst操作 ;允许SDRAM power down模式 ;SCLK在访问期间仍在活动状态 ;SDRAM模式寄存器设置 smem 0x4800002c,0x30,32 smem 0x48000030,0x30,32 3.2.3 使用AXD在线仿真调试程序 1. 装载可执行的文件 AXD只支持.axf格式的可执行文件. 启动AXD, 在菜单的File中,选择Load Image..., 选择c:\adsbloadter\prj\prj_Data\De

2010-03-16

vs2005全角问题补丁

vs2005 全角问题 补丁 ,修正了全角的bug

2010-02-28

Linux下Makefile的automake生成全攻略

Linux下Makefile的automake生成全攻略

2010-02-20

例解 autoconf 和 automake 生成 Makefile 文件

《例解 autoconf 和 automake 生成 Makefile 文件》,在IBM网站上看到的一个人写的这两种工具的使用,以及Makefile项目的生成。故将其文档格式做成PDF版的,传上来供大家参考!

2010-02-20

debug+the+makefile.pdf

debug+the+makefile.pdf,makefile的调试方法

2010-02-20

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除