Showing posts with label kernel. Show all posts
Showing posts with label kernel. Show all posts

2008-09-28

用kexec快速切换内核

详见:http://www.linuxsir.org/main/node/296

总的来说:



  1. 内核版本必需为 2.6.13 或以上,因为自该版本起内置了 kexec 系统调用的程序。

  2. 内核编译需加入 kexec 支援
    Processor type and features --->

    [*] kexec system call (EXPERIMENTAL)


  3. 系统需要安装 kexec-tools

  4. 用 /sbin/kexec 加载另一内核,语法是:
    kexec -l <kernel-image> --append="<command-line-options>" 
    如:
    kexec -l /boot/lfskernel-2.6.25.4 --append="root=/dev/sda6 ro nomce vga=0x317"

  5. 想重启内核,就以 kexec -e 来切换。




//EOF Read More...

2007-09-12

sys_calls

/usr/include/asm/unistd.h (sys/syscall.h)
the system call numbers:

sys_call namesys_call num.(hex)
restart_syscall0
_exit1
fork2
read3
write4
open5
close6
waitpid7
create8
link9
unlinka
execveb
chdirc
timed
mknode
chmodf
lchown10
break11
oldstat12
lseek13
getpid14
mount15
oldumount16
setuid17
getuid18
stime19
ptrace1a
alarm1b
oldfstat1c
pause1d
utime1e
stty1f
gtty20
access21
nice22
ftime23
sync24
kill25
rename26
mkdir27
rmdir28
dup29
pipe2a
times2b
prof2c
brk2d
setgid2e
getgid2f
signal30
geteuid31
getegid32
acct33
umount234
lock35
ioctl36
fcntl37
mpx38
setpgid39
ulimit3a
oldolduname3b
umask3c
chroot3d
ustat3e
dup23f
getppid40
getpgrp41
setsid42
sigaction43
sgetmask44
ssetmask45
setreuid46
setregid47
sigsuspend48
sigpending49
sethostname4a
setrlimit4b
getrlimit4c /* Back compatible 2Gig limited rlimit */
getrusage4d
gettimeofday4e
settimeofday4f
getgroups50
setgroups51
select52
symlink53
oldlstat54
readlink55
uselib56
swapon57
reboot58
readdir59
mmap5a
munmap5b
truncate5c
ftruncate5d
fchmod5e
fchown5f
getpriority60
setpriority61
profil62
statfs63
fstatfs64
ioperm65
socketcall66
syslog67
settimer68
gettimer69
stat6a
lstat6b
fstat6c
olduname6d
iopl6e
vhangup6f
idle70
vm86old71
wait472
swapoff73
sysinfo74
ipc75
fsync76
sigreturn77
clone78
setdomainname79
uname7a
modify_ldt7b
adjtimex7c
mprotect7d
sigprocmask7e
create_module7f
init_module80
delete_module81
get_kernel_syms82
quotactl83
getpgid84
fchdir85
dbflush86
sysfs87
personality88
afs_syscall89 /* Syscall for Andrew File System */
setfsuid8a
setfsgid8b
_llseek8c
getdents8d
_newselect8e
flock8f
msync90
readv91
writev92
getsid93
fdatasync94
_sysctl95
mlock96
munlock97
mlockall98
munlockall99
sched_setparam9a
sched_getparam9b
sched_setscheduler9c
sched_getscheduler9d
sched_yield9e
sched_get_priority_max9f
sched_set_priority_mina0
sched_rr_get_intervala1
nanosleepa2
mremapa3
setresuida4
getresuida5
vm86a6
query_modulea7
polla8
nfsservctla9
setresgidaa
getresgidab
prctlac
rt_sigreturnad
rt_sigactionae
rt_sigprocmaskaf
rt_sigpendingb0
rt_sigtimedwaitb1
rt_sigqueueinfob2
rt_sigsuspendb3
pread64b4
pwrite64b5
chownb6
getcwdb7
capgetb8
capsetb9
sigaltstackba
sendfilebb
getpmsgbc /* some people actually want streams */
putpmsgbd /* some people actually want streams */
vforkbe
ugetrlimitbf /* SuS compliant getrlimit */
mmap2c0
truncate64c1
ftruncate64c3
tkillee
io_setupf5
io_destoryf6
io_geteventsf7
io_submitf8
io_cancelf9
exit_groupfc
timer_create103
timer_settime104
timer_gettime105
timer_getoverrun106
timer_delete107
clock_settime108
clock_gettime109
clock_getres10a
clock_nanosleep10b
tgkill10e
utimes10f
kexec_load11b
waitid11c
/* sys_setaltroot11d */
add_key11e
request_key11f
keyctl120
ioprio_set121
ioprio_get122
inotify_init123
inotify_add_watch124
inotify_rm_watch125
migrate_pages126
openat127
mkdirat128
mknodat129
fchownat12a
futimesat12b
fstatat6412c
unlinkat12d
renameat12e
linkat12f
symlinkat130
readlinkat131
fchmodat132
faccessat133
getcpu13e


//EOF Read More...

2007-09-03

位域

位域是C语言里面比较高级的特性,在结构体中比较常见。
现在在嵌入式开发中还比较常用,主要是能够节约内存空间。
如:

typedef struct {
    short int    flag_a: 1;    /* 在内存中只占 1 bit
                               * 超出可能会向高位覆写
                               * 但也可能丢失高位,由编译器而定 */

    short int    flag_b: 1;    /* 占 1 bit */
    short int    flag_c: 4;    /* 占 4 bits */
    short int    flag_d: 2;    /* 占 2 bits */
    short int    flag_e;       /* 占 16 bits */
} flags;
/* 这里整个结构体在内存中只占用了 4 Bytes */
/* 但还要注意:分配内存时还要考虑内存对齐原则,
 * 如,上面 flag_d 之后到 flag_e 之间,内存还有 8bits 的空余。
 * 所以 请尽量把位域字段放在一块儿!
 * 如果在 flag_e 之后再添加一个 flag_f: 8 的话,空间是只会向后扩展
 * 而不会插入 flag_d 和 flag_e 之间空余空间的。
 */

// EOF Read More...

2007-08-14

ALD

ALD(Assembly Language Debugger)

is a simple beautiful baseline POSIX debugger.
if you wanna debug a asm program this will be a better choice

http://ald.sourceforge.net

//EOF Read More...

2007-02-25

VirtualBox桥接局域网

一般情况下用VirtualBox虚拟个东西上网直接用"NAT"(guest安装VBoxGuestAdditions.iso后)就可以了,可以实现guest<->host及guest<->Intenet。
但要guest和局域网内的机器互访,还是虚拟个网卡后用bridge好些。

首先,需要内核的支持,在编译的时候加入"802.1d Ethernet Bridging" (in "Networking options") <CONFIG_BRIDGE>支持bridge 和 "Universal TUN/TAP device driver support" (in "Network device support")<CONFIG_TUN>支持tun设备(虚拟网卡)。

以下用到的命令tunctl在包uml-utilities中,brctl在包bridge-utils中。
(uml-utilities可以在 http://user-mode-linux.sourceforge.net/dl-sf.html 下载到,我只编译了uml_utilities_20040406.tar.bz2中的./tools/tunctl)

(注:其中'davy'是我的用户名,已加入'vboxusers'组)

# ifconfig eth0 down
# modprobe tun #如果没有/dev/net/tun的话用这个加载tun模块
# tunctl -t tap1 -u davy #创建虚拟网卡tap1
# brctl addbr br_vm #创建一个网桥br_vm
# brctl addif br_vm eth0 #向网桥br_vm添加物理网卡eth0
# brctl addif br_vm tap1 #向网桥br_vm添加虚拟网卡tap1
# ifconfig eth0 0.0.0.0 promisc up
#网桥的每个物理网卡作为一个端口,运行于混杂模式,而且是在链路层工作,所以就不需要IP了。
# ifconfig br_vm 192.168.1.21 netmask 255.255.255.0 broadcast 192.168.1.255 up
#然后给br_vm的虚拟网卡配置IP:192.168.1.21,那样就能远程管理网桥。
# route add default gw 192.168.1.2 dev br_vm #为br_vm添加网关
# ifconfig tap1 up
# chown root:vboxusers /dev/net/tun
# chmod 660 /dev/net/tun


VirtualBox中把Adapter0改成 Host interface,把Interface Name 那一栏添上tap1,然后启动虚拟系统,设置好IP,就可以访问局域网上的资源了。

用完后,删除桥接:
# ifconfig br_vm down
# brctl delif br_vm eth0 #移除和网桥间的关系
# brctl delif br_vm tap1
# brctl delbr br_vm #删除br_vm
# tunctl -d tap1 #删除虚拟网卡tap1
# ifconfig eth0 192.168.1.21 netmask 255.255.255.0 broadcast 192.168.1.255 up
# route add default gw 192.168.1.2 # 重新设置IP和网关


参考资料:
http://edeca.net/articles/bridging/index.html
http://linux-net.osdl.org/index.php/Bridge (http://bridge.sourceforge.net/)

//EOF Read More...

2007-01-07

kernel video option

1. Framebuffer:
用 vesafb ,别的 xxfb 都不要。只留 vesafb ,还不能是 m 。

2.xorg rendering:

Processor type and features --->
<*> MTRR (Memory Type Range Register) support
Character devices --->
<M> /dev/agpgart (AGP Support)
[M] SIS... support
(Enable your chipset instead of the above.)
< > Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)
**注意我这里还是要"M"后xorg才有"rendering enabled"
(看网上说的不要选,我想可能是指使用ATI官方驱动的时候吧?)
(Make sure the Direct Rendering Manager (DRM) is off. The X11-DRM package will provide its own.)

还有xorg7.1的driver里xf86-video除了ati还要编译chips才行。(rendition那个我也编译了)
//EOF Read More...

2006-12-03

拷贝.config的必要性

以前我一直以为kernel安装好后# cp .config /boot/config-<version> 可做可不做,到今天我才发现是一定要做的(为了今后的方便)
$ make ... xxxconfig/menu 时会优先load目标目录中的.config,如果没有的话对应当前内核的/boot/config-<version>文件。
这样将大大简化配置过程,毕竟大多数情况下相对上次的配置只需要修改少量的设置或不需要修改。
//EOF Read More...