1.新建文件
指令:①> 文件名
②touch 文件名
2.删除文件
指令:rm
参数:-d 直接把欲删除的目录的硬连接数据删成0,删除目录
-f 强制删除文件或目录
-i 删除既有文件或目录之前先询问用户
-r 递归处理,将指定目录下的所有文件及子目录一并处理
-v 显示指令执行过程
......
练手, 第一个字符驱动.
用模块加载方法
华清远见<嵌入式linux设备驱动开发详解>的代码拿来改的.
编译过程发现很多错误.
最后发现 这本书带的驱动代码都是基于linux2.4的...目前我用的linux2.6, 代码部分需要做修改.
我的板子是 友善之臂的 2410. vmware+ubuntu nfs交叉编译
首先
linux2.6内核编译里面要打开loadable modules, 以及 unload 的选项也要选上 否则用不到rmmod命令 呵呵.
第二 (和上面第一条一样,今后写驱动都会要用到这个)
要制作linux 内核树(linux2.6必须)
在linux2.6.14.1的代码目录
make bzImage
会生成一个新文件 vmlinux
然后 make modules //编译模块
make modules install //安装模块
结束之后会在/lib/modules下生成2.6.14.1文件夹, 这个就是内核树了. 主要用到的就是里面的头文件.
第三
修改书上带的代码, 主要是改端口号, 以及部分代码基于linux2.6会不同, , 请见我提供的下载, 里面包括了 makefile, 驱动源代码, 测试程序源代码.
注意会用到ioremap()函数, 绝对地址到虚拟地址的转换, 然后用指针来 ......
<1> 任务0的堆栈问题
一直不明白schedule.c里的task_union的stack和user_stack是什么关系,head.s里就设置了esp指向user_stack, 却一直没有用到task_union,直到看到INIT_TASK才明白,从进入保护模式到跳转进用户态都是用的user_stack这个栈,而任务0的tss中的esp0指向task_union的stack, 也就是当任务0再跳转进内核态时才用task_union的栈。总结起来就是从进入保护模式到初始化完成,user_stack用作内核态栈,进入用户态后user_stack用做用户态栈,task_union的stack用做内核态栈。
<2> 内核态寻址问题
内核代码段和数据段基址为0, 段限长为16M,而且在head.s中所设置的前四个页表与物理内存页是一一对应的,所以在内核态可以直接寻址16M内存(0.11版只支持16M内存),也即线性地址和物理地址相等。
<3>物理地址分配
<4>线性地址分配
每个任务占64M的线性地址空间,任务0实际只用了0-64M的前640KB,因为段限长被设成了640KB。因为最多支持64个任务,所以总共使用了4G的线性地址空间。 ......
Covtool
是一个用对
C++
代码进行运行时覆盖率检查的工具,可以以行为单位检查出那些代码在运行中被使用,那些没有使用。
1.
安装
make
make tests
make install
将
/usr/local/covtool
添加到
PATH
将
/usr/local/covtools
添加到
MANPATH(此步很重要,它的man比文档靠谱得多)
我一般是添加在/etc/profile中
2.
使用
如果是使用
makefile
:
(1).
将
g++
替换为
cov++
即可。
(2).
重新
build
(3).
运行所有的测试(请尽量全的测试各种情况)
(4).
合并
*.covexp
文件(
cov++
系统设计为可以运行多次测试程序的各种情况生成多个
*.covexp
,然后将多次结果统合起来形成一个报告):
covmerge.exe find * -name ‘*.covexp’ –print
‘\
>merged.db
退出。
(5).
用
*.db
文件生成
html
文档。
gen_html merged.db
(6).
生成的文档在
coverage_html
目录 ......
SQL Server 系统全局变量
@@CONNECTIONS
返回自上次启动以来连接或试图连接的次数。
@@CURSOR_ROWS
返回连接上最后打开的游标中当前存在的合格行的数量(返回被打开的游标中还未被读取的有效数据行的行数)
@@DATEFIRST
返回每周第一天的数字
@@ERROR
返回最后执行的SQL 语句的错误代码。
@@FETCH_STATUS
返回被 FETCH 语句执行的最后游标的状态,而不是任何当前被连接打开的游标的状态。
@@IDENTITY
返回最后插入的标识值
@@LANGID
返回当前所使用语言的本地语言标识符(ID)。
@@LANGUAGE
返回当前使用的语言名。
@@LOCK_TIMEOUT
返回当前会话的当前锁超时设置,单位为毫秒。
@@PROCID
返回当前过程的存储过程标识符 (ID) 。
@@ROWCOUNT
返回受上一语句影响的行数。
@@SERVERNAME
返回运行 的本地服务器名称。
@@SPID
返回当前用户进程的服务器进程标识符 (ID)。
@@TRANCOUNT
返回当前连接的活动事务数。
@@VERSION
返回当前安装的日期、版本和处理器类型。
@@CPU_BUSY
返回自SQL Server 最近一次启动以来CPU 的工作时间其单位为毫秒
@@DATEFIRST
返回使用SET DATEFIRST 命令而被赋值的DATAFIRST 参数值SET DATEFIRST,命令用 ......
本文从多个角度阐述了SQL Server与存储过程的比较。
①为什么要使用存储过程?
因为它比SQL语句执行快。
②存储过程是什么?
把一堆SQL语句罗在一起,还可以根据条件执行不通SQL语句。
③来一个最简单的存储过程:
CREATE PROCEDURE dbo.testProcedure_AX
AS
select userID from
USERS order by userid desc
注:dbo.testProcedure_AX是你创建的存储过程名,可以改为:AXzhz等,别跟关键字冲突就行了.AS下面就是一条SQL语句,不会写SQL语句的请回避。
④怎么在ASP.NET中调用这个存储过程:
public static string GetCustomerCName
(ref ArrayList arrayCName,ref ArrayList arrayID)
{
SqlConnection con=ADConnection.createConnection();
SqlCommand cmd=new SqlCommand("testProcedure_AX",con);
cmd.CommandType=CommandType.StoredProcedure;
......