Linux 2.6.28版本内核的几个改动

Changes in Linux Kernel 2.6.28

The GEM Memory Manager for GPU memory
长期以来显存管理代码分散在Kernel, Xorg和专有驱动里,相对比较混乱。社区一直在讨论是否要加入Tungsten Graphics的TTM内存管理器。
现在加入的GEM内存管理器是由Intel的Keith Packard提出的。相对于TTM,GEM简化了设计,更加轻量级。目前只支持Intel i915驱动。

Memory management for graphics processors
http://lwn.net/Articles/257417/
GEM v. TTM
http://lwn.net/Articles/283793/
GEM – the Graphics Execution Manager
http://lwn.net/Articles/283798/

Memory management Scalability improvements
主要的改动是加入了virtual memory scalability improvement patch和VM scalability patch。主要针对大容量内存的机器(如128G)在页面换出时在LRU list搜索时间过长的问题。
前一个patch把file-backed page和anonymous page分别存放在两个LRU list上,优先对前者做换出。
VM scalability patch,只在inactive list上维护一定百分比的anonymous page。当对anonymous page回收时,只检查inactive list上匿名页的引用情况,而避免对所有的匿名页做操作。

Memory management Scalability improvements
http://lwn.net/Articles/286472/

Disk Shock Protection
ATA/ATAPI-7规范定义了IDLE IMMEDIATE命令可以切换驱动器至idle模式并复位磁头。2.6.28为每个ATA设备添加了/sys/block/*/device/unload_heads接口,
向这个接口中写一个整数值n可以复位磁头并延时所有IO操作n毫秒。当这个时间结束,再恢复IO操作。最大允许的延时值为30000毫秒。
磁盘振动保护功能需要结合accelerometers驱动和应用软件才能发挥作用。2.6.28的这个feature只是提供了操作接口。

Boot tracer
主要来自Arjan van de Ven和Frédéric Weisbecker在Linux快速启动方面的工作。去年Arjan在Linux Plumbers Conference上展示了5秒启动上网本的demo。
然而fast boot patch暂时未被Linus接纳进mainline代码树。这次2.6.28加入的Boot tracer用于性能分析,可以更方便地让开发者跟踪kernel在各部分启动所耗费的时间,以便调优。

参考

http://kernelnewbies.org/LinuxChanges

Driver porting: the workqueue interface.

http://lwn.net/Articles/23634/

Debian笔记(4) - 内核编译

传入编译所需变量
% MAKEFLAGS=”CC=gcc-3.2″ make-kpkg …

/etc/mkinitrd/mkinitrd.conf中更改initrd使用cramfs之外的其他fs
$Get_Root make-kpkg –revision=custom.1.0 kernel_image
$Get_Root make-kpkg –initrd –revision=custom.1.0 kernel_image

make-kpkg clean
make-kpkg -rootcmd fakeroot –append-to-version -custom.${VER} \
–revision custom.${VER} kernel_image modules-image

To create a source or header package, run
% make-kpkg clean
% $Get_Root make-kpkg –revision=custom.1.0 kernel_source
% $Get_Root make-kpkg –revision=custom.1.0 kernel_headers

Similarly, the documentation package is built by:
% $Get_Root make-kpkg –revision=custom.1.0 kernel_doc

Or if you want to generate the whole package,
% $Get_Root make-kpkg –revision=custom.1.0 \
–pgpsign=”Your pgp ID” buildpackage
Note that this needs a pgp key.
(Get_Root is whatever you need to become root — fakeroot or
sudo are examples that come to mind).
Here is a nice, practical example:
% make-kpkg -rfakeroot –append-to-version $(hostname) \
–revision $(date +’%Y%m%d’)

/etc/kernel-pkg.conf

摘自:
http://debian.linuxsir.org/book/reference/lyoo/ch-kernel.html
/usr/share/doc/kernel-package/README.gz

scull例子程序与devfs,ldd2

问题描述:

scull编译通过以后,insmod安装,并创建了/dev/scull文件。但对/dev/scull操作时,系统提示bash: /dev/scull: No such device

问题分析:

lsmod可以见到scull模块已加载,但cat /proc/devices没有scull。检查发现,CONFIG_DEVFS_FS宏已在内核中打开,所以设备采用devfs_register注册,而不是register_chrdev。查看内核编译配置.config文件,发现:

CONFIG_DEVFS_FS=y
# CONFIG_DEVFS_MOUNT is not set

尽管内核支持devfs,但并未在系统启动时加载。

解决:

scull.h中#undef CONFIG_DEVFS_FS;
或内核中关闭devfs配置;
或使用devfsd虚拟文件系统支持devfs

通用线程: 高级文件系统实现者指南,第 5 部分
http://www-128.ibm.com/developerworks/cn/linux/filesystem/l-fs5/
通用线程: 高级文件系统实现者指南,第 6 部分
http://www-128.ibm.com/developerworks/cn/linux/filesystem/l-fs6/
Using devfs with Debian GNU/Linux and kernel 2.4.0
http://www.yk.rim.or.jp/~ishikawa/devfsd-2nd.txt

Linux驱动一共有多少作者?

读Linux Device Driver,知道了MODULE_AUTHOR(name)宏会将模块作者加入目标文件。于是自找没趣,把所有的作者名字搜了出来,并写了个小程序简单统计了一下。

步骤如下:

  1. 在驱动源码目录/usr/src/linux/drivers下,分别执行下面三条命令:
  2. grep -nHr MODULE_AUTHOR * > module_author.txt
    grep -nHr DRIVER_AUTHOR * > driver_author.txt
    grep -nHr MODULEAUTHOR * > module_author2.txt

  3. 然后运行
  4. python get_author_list.py

  5. 结果生成到driver_author_list.txt。

python源码下载
结果列表下载

vmware下将RH9内核升级至2.6

虚拟机版本vmware:4.5.1 build-7568
原内核版本Redhat 9 linux-2.4.20-8
待升级版本linux-2.6.11.7

下载内核linux-2.6.11.7.tar.bz2至/usr/src并解压
ln -s linux-2.6.11.7 linux-2.6
在/usr/src/linux/Documentation/Changes查看相应软件的版本要求

下载并安装module-init-tools-3.1.tar.bz2
# configure –prefix=/
# make moveold
# make all install
# ./generate-modprobe.conf /etc/modprobe.conf
下载并安装device-mapper-1.00.19-2.i386.rpm
下载并安装lvm2-2.00.25-1.01.i386.rpm,用rpm -ivph –nodeps –force
下载并安装mkinitrd-4.1.18-2.i386.rpm

在/usr/src/linux-2.6下make mrproper(如果之前未编译过,此步骤可省)
make menuconfig,选择编译的模块。
Device Drivers
Block devices
Default RAM disk size 改为8192
USB support
UHCI HCD 选中(或OHCI,EHCI单独无法工作)
其余模块根据实际情况选择
make all
make modules_install
make install
/etc/modprobe.conf中相应部分更改为
alias usbfs usbcore
alias usb-controller uhci-hcd
鼠标键盘部分(hid, mousedev, keybdev)等部分酌情修改
/etc/rc.sysinit中
usbdevfs改为usbfs
hid改为usbhid
mousedev和keybdev酌情修改(分别改为usbmouse和usbkeybd或注释掉)
/etc/grub.conf中
更改default
2.6内核部分加一句elevator=deadline
reboot

学习总结
openssl+openssh的设置,配合PuTTY的使用
/etc/inetd.conf增加ssh stream tcp nowait root /usr/sbin/tcpd sshd -i
密钥对的生成ssh-keygen(Linux/Win)
公钥拷贝至~/.ssh/authorized_keys,密钥在客户端使用
grep -rnH “pattern” *
find ./ -name ‘*name*’ -print
vim
set foldmethod=indent
zf%; zi; zo; zO; .,$ d
dmesg
cat /proc/version
insmod; lsmod; modprobe -l | grep usb
useradd -s /bin/bash -g lfs -m -k /dev/null lfs

cat > ~/.bash_profile << “EOF”
exec env -i HOME=$HOME TERM=$TERM PS1=’u:w$ ‘ /bin/bash
EOF

cat > ~/.bashrc << “EOF”
set +h
umask 022
LFS=/mnt/lfs
LC_ALL=POSIX
PATH=/tools/bin:/bin:/usr/bin
export LFS LC_ALL PATH
EOF

readelf -l filename | grep interpreter
ld –verbose | grep SEARCH

Page 1 of 11