关于ramdisk
文件系统层: <....>
块设备层: <... block device>
文件系统层构建于设备层之上。所以,如果你的系统,如果已经做好mtd等驱动,那么ramdisk就完全没必要存在了。
nfs set:
1.在/etc/exports 中加 /home/lyf/nfs 192.168.1.156(rw,sync)
2.在/etc/hosts 中加 192.168.1.156 artech
将共享的文件夹的属性设置为777
3.在终端中,/etc/init。d/portmap start
4.在终端中,/etc/init。d/nfs-kernel-server start
mount -t nfs 192.168.1.154:/home/lyf/nfs /tmp -o nolock
smbmount:
mount -t smbfs -o username=garyliu,password=123456, -l //192.168.1.8/garyliu /home/lyf/smb
u盘的挂载:
需要选择上:
File systems -->
DOS/FAT/NT Filesystems --->
[*] MSDOS fs support
[*] VFAT (Windows-95) fs support
(437) Default codepage for FAT
(iso8859-1) Default iocharset for FAT
Native Language Support -->
(iso8859-1) Default NLS Option
[*] Codepage 437 (United States, Canada)
[*] NLS ISO 8859-1 (Latin 1; Western European Languages)
device driveres---->
scsi device support----->
<*>scsi device support
另外需要在/etc/udev/rules.rules/usb.rules 加上相应的udev的规则。
对于区分const int *pa和int *const pa这两者,
前者中,const直接修饰*(不考虑int,因为类型在这里是没影响的),说明*(解引用)这种行为具有常量性,即“不能靠解引用改变它指向的对象的值”,即指向常量的指针。
后者中,const直接修饰pa,说明pa本身的值具有常量性,即常量指针。
2440 uboot patch 打补丁:
拷贝 patch-u-boot-1.2.0-nand-v1 到uboot目录下边
patch -p1 < patch-u-boot-1.2.0-nand-v1
make distclean
ARCH=arm CROSS_COMPILE=arm-linux- make
强制打补丁:
patch -f -p1 < ***.patch
__FILE__,__LINE__,FUNCTION__实现代码跟踪调试
#include "global.h"
int main(int argc, char **argv)
{
printf("%s(%d)-%s: this is main\n",__FILE__,__LINE__,__FUNCTION__);
funca();
printf("%s(%d)-%s: this is main\n",__FILE__,__LINE__,__FUNCTION__);
funcb();
printf("%s(%d)-%s: this is main\n",__FILE__,__LINE__,__FUNCTION__);
return 0;
}
root@xuanfei-desktop:~/cpropram/2# gcc -Wall funca.c funcb.c main.c
root@xuanfei-desktop:~/cpropram/2# ./a.out
main.c(4)-main: this is main
this is function
main.c(6)-main: this is main
this is function
main.c(8)-main: this is main
增加系统调用:
1.在/kernel/sys。c中添加调用的函数。
2.在/include/asm-arm/unistd。h中增加调用的号码
3.在/arch/arm/kernel/calls。S中添加
详情可以参看: http://blog.chinaunix.net/u/30686/showart_311485.html
虚拟文件系统的基本原理
从ramfs中可以看出,虚拟文件系统确实可看成将内存的分页机制作为块设备的内存文件系统,
正象物理内存可动态地映射成进程的虚拟内存那样,外部文件系统可动态地映射成虚拟文件系统,
或者说,外部文件系统中的文件可动态地映射成虚拟文件系统中的文件。
说得更精确些,就是外部文件系统中某一文件的某一物理块可以动态映射成虚拟文件系统中该文件的页块。
虚拟文件系统中文件的页块可能会映射成进程的虚拟内存,
也可能被外部文件系统映射为块设备缓冲区,用来对文件系统的块设备的进行读写。
由于VFS所拥有的内存页面是有限的,因此VFS还必须能够及时将自身那些已变得不活跃的映射删除。
不同类型的文件系统映射到VFS时,它们具有各自的目录结构,之间是不相交叉链接相互混叠的。
当一个文件系统安装到另一个文件系统的某个目录下时,这两个文件系统之间将形成一个由vfsmount结构表达的"桥梁",
将被安装的文件系统的根目录与安装点的子目录"连接"起来。当从VFS的根目录下降到某个子目录时,可能会经过很多这样的桥梁。
mb() rmb() wmb() 疑问
#define X86_FEATURE_XMM2 (0*32+26) /* ... [/quote]
内存屏障主要解决的问题是编译器的优化和CPU的乱序执行。
编译器在优化的时候,生成的汇编指令可能和c语言程序的执行顺序不一样,在需要程序严格按照c语言顺序执行时,需要显式的告诉编译不需要优化,这在 linux下是通过barrier()宏完成的,它依靠volidate关键字和memory关键字,前者告诉编译barrier()周围的指令不要被优化,后者作用是告诉编译器汇编代码会使内存里面的值更改,编译器应使用内存里的新值而非寄存器里保存的老值。
同样,CPU执行会通过乱序以提高性能。汇编里的指令不一定是按照我们看到的顺序执行的。linux中通过mb()系列宏来保证执行的顺序。具体做法是通过mfence/lfence指令(它们是奔4后引进的,早期x86没有)以及x86指令中带有串行特性的指令(这样的指令很多,例如linux中实现时用到的lock指令,I/O指令,操作控制寄存器、系统寄存器、调试寄存器的指令、iret指令等等)。简单的说,如果在程序某处插入了mb()/rmb ()/wmb()宏,则宏之前的程序保证比宏之后的程序先执行,从而实现串行化。wmb的实现和barrier()类似,是因为在x86平台上,写内存的操作不会被乱序执行。
实际上在RSIC平台上,这些串行工作都有专门的指令由程序员显式的完成,比如在需要的地方调用串行指令,而不像x86上有这么多隐性的带有串行特性指令(例如lock指令)。所以在risc平台下工作的朋友通常对串行化操作理解的容易些。
exit()与_exit()区别:
exit()除了停止进程的运行外,它还有一些其它作用,其中最重要的是,它将关闭所有
已打开的文件。如果父进程因执行了 wait()调用而处于睡眠状态,那么子进程执行 exit()会
重新启动父进程运行。另外,exit()还将完成一些系统内部的清除工作,例如缓冲区的清除
工作等
void _exit(int status)
其使用方法与 exit()完全相同,但是它执行终止进程的动作而没有系统内部的清除工
作。因此,只有那些对系统内部了解比较深的程序员才使用它
路由命令使用:
首先应使用“route -n”命令列出当前路由表的内容,删除所有不正确的路由。删除路由的命令如下:
#route del -net| -host xxx.xxx. xxx.xxx netmask xxx.xxx.xxx.xxx;-net删除到网络的路由,-host删除到主机的路由。
然后添加以下两项:
#route add -net 192.168.12.0 netmask 255.255.255.0 eth0
#route add -net 192.168.13.0 netmask 255.255.255.0 eth1
这两行命令的含义是,所有发往192.168.12.0网络的数据包都应通过网卡eth0发出去,而发往192.168.13.0网络的数据包都应通过网卡eth1发出去。
请检查自己的网络系统,一般安装完毕之后,缺省值是将IP转发功能关闭,可以使用命令来启动系统的IP转发功能:
#echo 1 > /proc/sys/net/ipv4/ip_forward
如果希望关闭IP转发,则用下面的命令即可:
#echo 0 > /proc/sys/net/ipv4/ip_forward
telnet:
我们在学校机房telnet到老师的linux服务器,大家不知道怎么开启telnet服务吧?现在弄好了,整理一下资料,供大家学习参考。
1、安装xinetd 以及telnetd
liceven@liceven-laptop:~$ sudo apt-get install xinetd telnetd
获取:1 feisty/main xinetd 1:2.3.14-1ubuntu1 [135kB]
获取:2 feisty/universe telnetd 0.17-35ubuntu1 [42.0kB]
下载 177kB,耗时 7s (25.2kB/s)
选中了曾被取消选择的软件包 xinetd。
(正在读取数据库 ... 系统当前总共安装有 123141 个文件和目录。)
正在解压缩 xinetd (从 .../xinetd_1%3a2.3.14-1ubuntu1_i386.deb) ...
选中了曾被取消选择的软件包 telnetd。
正在解压缩 telnetd (从 .../telnetd_0.17-35ubuntu1_i386.deb) ...
正在设置 xinetd (2.3.14-1ubuntu1) ...
Stopping internet superserver: xinetd.
增加 `diversion of /etc/init.d/inetd to /etc/init.d/inetd.real by xinetd'
Starting internet superserver: xinetd.
正在设置 telnetd (0.17-35ubuntu1) ...
--------- IMPORTANT INFORMATION FOR XINETD USERS ----------
The following line will be added to your /etc/inetd.conf file:
telnet stream tcp nowait telnetd /usr/sbin/tcpd /usr/sbin/in.telnetd
If you are indeed using xinetd, you will have to convert the
above into /etc/xinetd.conf format, and add it manually. See
/usr/share/doc/xinetd/README.Debian for more information.
-----------------------------------------------------------
2、配置文件
A。 /etc/inetd.conf
liceven@liceven-laptop:~$ cat /etc/inetd.conf (如果存在就不需要了)
telnet stream tcp nowait telnetd /usr/sbin/tcpd /usr/sbin/in.telnetd
B. 修改/etc/xinetd.conf
root@liceven-laptop:/etc# cat xinetd.conf
# Simple configuration file for xinetd
#
# Some defaults, and include /etc/xinetd.d/
defaults
{
# Please note that you need a log_type line to be able to use log_on_success
# and log_on_failure. The default is the following :
# log_type = SYSLOG daemon info(插入红色部分)
instances = 60
log_type = SYSLOG authpriv
log_on_success = HOST PID
log_on_failure = HOST
cps = 25 30
}
includedir /etc/xinetd.d
C。/etc/xinetd.d/telnet并加入以下内容:
# default: on
# description: The telnet server serves telnet sessions; it uses \
# unencrypted username/password pairs for authentication.
service telnet
{
disable = no
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.telnetd
log_on_failure += USERID
}
5. 重启机器或重启网络服务sudo /etc/init.d/xinetd restart
6. 使用TELNET客户端远程登录;ifconfig -a显示本机地址;
阅读(1909) | 评论(0) | 转发(0) |