本文讲解了怎样进行内核编译及模块相关命令的使用方法。
#查看Linux系统 [root@serv01 ~]# uname Linux #查看所有信息 [root@serv01 ~]# uname -a Linux serv01.host.com2.6.32-131.0.15.el6.x86_64 #1 SMP Tue May 10 15:42:40 EDT 2011 x86_64 x86_64 x86_64 GNU/Linux #内核信息 [root@serv01 ~]# uname -r 2.6.32-131.0.15.el6.x86_64 #/boot目录下 /boot #驱动 initrd-2.6.32-131.0.15.el6.x86_64kdump.img #内核 vmlinuz-2.6.32-131.0.15.el6.x86_64 #桌面版的内核存放位置 [root@larrywen boot]# cd/usr/src/kernels/2.6.32-131.0.15.el6.x86_64/ [root@larrywen 2.6.32-131.0.15.el6.x86_64]#ls arch crypto firmware include ipc lib Makefile.common Module.symvers samples security System.map usr block drivers fs init kernel Makefile mm net scripts sound tools virt #解压内核到/usr/src下 [root@serv01 ~]# tar -xvf linux-2.6.38.tar.gz-C /usr/src/ [root@serv01 ~]# cd /usr/src/linux-2.6.38/ [root@serv01 linux-2.6.38]# pwd /usr/src/linux-2.6.38 #已经安装好的版本有配置文件 [root@larrywen ule-sa2]# cd/usr/src/kernels/2.6.32-131.0.15.el6.x86_64/ [root@larrywen 2.6.32-131.0.15.el6.x86_64]#ls .config .config #查看配置文件 [root@serv01 linux-2.6.38]# vim/boot/config-2.6.32-131.0.15.el6.x86_64 #源码不区分32位和64位 #查看make帮助 #需要在linux-2.6.38目录下 [root@serv01 linux-2.6.38]# make help clean 清除,保留配置文件 mrproper 清除,不保留配置文件,更彻底 make menuconfig:图形界面 make xconfig:图形界面,需要安装QT #<*>:制作成内核 #<M>:制作成模块
二 编译配置
[root@serv01 linux-2.6.38]# make menuconfig HOSTCC scripts/basic/fixdep HOSTCC scripts/basic/docproc HOSTCC scripts/kconfig/conf.o HOSTCC scripts/kconfig/kxgettext.o ***Unable to find the ncurses libraries or the ***required header files. ***'make menuconfig' requires the ncurses libraries. *** ***Install ncurses (ncurses-devel) and try again. *** make[1]: ***[scripts/kconfig/dochecklxdialog] Error 1 make: *** [menuconfig] Error 2 [root@serv01 linux-2.6.38]# yum install"ncurses-devel" -y #OCFS:Oracle Class FileSystem #配置后生成.config文件 [root@serv01 linux-2.6.38]# ls .config [root@serv01 linux-2.6.38]# vim Makefile [root@serv01 linux-2.6.38]# lsarch/x86/boot/ -d arch/x86/boot/
三 编译
[root@serv01 linux-2.6.38]# make bzImage Root device is (8, 2) Setup is 14908 bytes (padded to 15360bytes). System is 3704 kB CRC 7521c374 Kernel: arch/x86/boot/bzImage is ready (#1)
四 编译模块
[root@serv01 linux-2.6.38]# make modules
五 安装模块
[root@serv01 linux-2.6.38]# makemoudule_install #make moudule_install拷贝到该目录 [root@serv01 linux-2.6.38]# ls/lib/modules/2.6.32-131.0.15.el6.x86_64/kernel/ [root@serv01 linux-2.6.38]# ls/lib/modules/2.6.38/kernel #出现这个错误是因为交换分区过小 /bin/sh: line 1: 10010 Killed /sbin/depmod -ae -F System.map2.6.38 make: *** [_modinst_post] Error 137六 安装
[root@serv01 linux-2.6.38]# make install #可以比较下已有版本和编译的版本的不同,(编译版本:没选防火墙) [root@serv01 linux-2.6.38]# ls/lib/modules/2.6.38/kernel/net/ 802 9p bluetooth can dccp ieee802154 ipv6 llc phonet rfkill sctp wimax xfrm 8021q atm bridge core dns_resolver ipv4 key mac80211 rds sched sunrpc wireless [root@serv01 linux-2.6.38]# ls/lib/modules/2.6.32-131.0.15.el6.x86_64/kernel/net/ 802 9p bluetooth can dccp ipv4 key mac80211 phonet rfkill sctp wimax xfrm 8021q atm bridge core ieee802154 ipv6 llc netfilter rds sched sunrpc wireless [root@serv01 linux-2.6.38]# ls /lib/modules/2.6.38/kernel/fs/ntfs/ntfs.ko [root@serv01 linux-2.6.38]# ls/boot/grub/grub.conf /boot/grub/grub.conf [root@serv01 linux-2.6.38]# cat/boot/grub/grub.conf # grub.conf generated by anaconda # # # # Note that you do not have to rerun grubafter making changes to this file # # NOTICE: You have a /boot partition. Thismeans that # # all kernel and initrd paths are relative to /boot/, eg. # # root (hd0,0) # # kernel /vmlinuz-version ro root=/dev/sda2 # # initrd /initrd-[generic-]version.img # #boot=/dev/sda default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title Red Hat Enterprise Linux(2.6.32-131.0.15.el6.x86_64) root(hd0,0) kernel/vmlinuz-2.6.32-131.0.15.el6.x86_64 ro root=UUID=110fab7c-85c4-4bae-9114-98bc2ada24d8rd_NO_LUKS rd_NO_LVM rd_NO_MD rd_NO_DMLANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16KEYBOARDTYPE=pc KEYTABLE=us crashkernel=auto rhgb quiet initrd/initramfs-2.6.32-131.0.15.el6.x86_64.img [root@serv01 linux-2.6.38]# cat/boot/grub/grub.conf #/boot目录下新生成的文件 initramfs-2.6.38.img vmlinuz-2.6.38 #会在这个文件中新加一个内核信息 [root@serv01 linux-2.6.38]# cat/boot/grub/grub.conf #出现错误一般是交换分区过小,我们可以增加交换分区。如何增加交换分区,请参考此文:系统运维技巧(三)——利用dd命令增加交换分区
七 模块相关命令使用
#查看当前系统加载的模块 [root@serv01 linux-2.6.38]# lsmod #手工加载模块 [root@serv01 linux-2.6.38]# cd/lib/modules/2.6.38 [root@serv01 linux-2.6.38]# cd kernel/ns [root@serv01 linux-2.6.38]# insmod/lib/modules/2.6.38/kernel/fs/fat/fat.ko [root@serv01 linux-2.6.38]# lsmod |grep fat [root@serv01 linux-2.6.38]# insmod/lib/modules/2.6.38/kernel/fs/fat/vfat.ko [root@serv01 linux-2.6.38]# lsmod |grep fat #卸载模块,可以跟模块名,也可以跟全路径 [root@serv01 linux-2.6.38]# rmmod fat ERROR:Module fat is in use by vfat [root@serv01 linux-2.6.38]# rmmod vfat [root@serv01 linux-2.6.38]# lsmod |grep fat #模块之间有依赖,先加这个不能加上 [root@serv01 linux-2.6.38]# insmod/lib/modules/2.6.38/kernel/fs/fat/vfat.ko #自动处理依赖关系,不需要加全路径 [root@serv01 linux-2.6.38]# modprobe vfat [root@serv01 linux-2.6.38]# lsmod |grep fat #-r参数,表示remove [root@serv01 linux-2.6.38]# modprobe -r fat [root@serv01 linux-2.6.38]# modprobe -rvfat #记录模块依赖 [root@serv01 linux-2.6.38]# vim/lib/modules/2.6.32-131.0.15.el6.x86_64/modules.dep [root@larrywen pdf]# pwd /opt/soft/ule-sa2/pdf [root@larrywen pdf]# ls ule-kerenl.pdf ule-kerenl.pdf [root@larrywen pdf]# ls ule-module.pdf ule-module.pdf #查看模块信息 [root@serv01 linux-2.6.38]# modinfo vfat filename: /lib/modules/2.6.32-131.0.15.el6.x86_64/kernel/fs/fat/vfat.ko author: Gordon Chaffee description: VFAT filesystem support license: GPL srcversion: ACCC2F7E9526F402F526976 depends: fat vermagic: 2.6.32-131.0.15.el6.x86_64 SMPmod_unload modversions
我的邮箱:wgbno27@163.com 新浪微博:@Wentasy27 微信公众平台:JustOracle(微信号:justoracle) 数据库技术交流群:336882565(加群时验证 From CSDN XXX) Oracle交流讨论组:https://groups.google.com/d/forum/justoracle By Larry Wen
XDoclet是一个通用的代码生成实用程序,是一个扩展的Javadoc Doclet引擎。它允许您 使用像JavaDoc标记之类的东西来向诸如类、方法和字段之类的语言特征添加元数据。随后,它利用这些额外的元数据来生成诸如部署描述符和源代码之类的相关文件。
XDoclet继承了JavaDoc引擎的思想,允许根据定制JavaDoc标记生成代码和其它文件。当然,XDoclet也可以访问整个解析树,这样,它就可以访问类、类的包结构和类的方法。开放源代码的XDoclet代码生成引擎,是许多先进的Java框架不可缺少的组成部分,常常被用作面向属性编程和持续集成的引擎。XDoclet能够很容易成为您的Java编程工具箱中的一个更加通用的跨技术代码生成工具。
上面提到了面向属性编程(Attribute-Oriented Programming),之前还提到了面向切面的编程(Aspect-Oriented Programming),二者的缩写都是AOP。但二者是不相等的。关于面向属性编程,不论你找度娘还是谷哥,几乎找不到中文资料,就是Attribute-Oriented Programming!=Aspect-Oriented Programming也是搜到了一个英文的资料才知道的。
而全英文的一本书讲解Attribute-Oriented Programming我搜到了一本书,是2010年的,可见我们所了解到的知识是多么的落后,在此,也呼吁大家好好学习英语,英语太重要了!!!
关于XDoclet的学习,我只是通过使用XDoclet生成Hibernate映射和配置文件找了一下规律。
XDoclet使用起来其实不难,我通过下面例子来大概总结一下:
<?xml version="1.0" encoding="GBK"?> <project name="OA系统构建脚本" default="生成Hibernate配置文件" basedir="."> <!-- 定义一些变量来保存路径路径 --> <property name="src.dir" value="${basedir}/src"/> <property name="build.dir" value="${basedir}/bin"/> <property name="webapp.dir" value="${basedir}/src/webapp"/> <property name="xdoclet.home" value="D:/xdoclet-plugins-1.0.3"/> <!-- 引用xdoclet的包 --> <path id="xdoclet.task.classpath"> <fileset dir="${xdoclet.home}/lib"> <include name="**/*.jar"/> </fileset> <fileset dir="${xdoclet.home}/plugins"> <include name="**/*.jar"/> </fileset> </path> <taskdef name="xdoclet" classname="org.xdoclet.ant.XDocletTask" classpathref=/blog_article/"xdoclet.task.classpath"/>/index.html <target name="生成Hibernate配置文件"> <xdoclet> <!-- 指定路径 --> <fileset dir="${src.dir}/com/jianxin/oa/model"> <include name="**/*.java"/> </fileset> <!-- 指定工具类,并配置配置文件都要生成什么 --> <component classname="org.xdoclet.plugin.hibernate.HibernateConfigPlugin" destdir="${src.dir}" version="3.0" hbm2ddlauto="update" jdbcurl="jdbc:mysql://localhost:3306/oa" jdbcdriver="com.mysql.jdbc.Driver" jdbcusername="root" jdbcpassword="admin" dialect="org.hibernate.dialect.MySQLDialect" showsql="true" /> </xdoclet> </target> <target name="生成hibernate映射文件"> <xdoclet> <!-- 指定路径 --> <fileset dir="${src.dir}/com/jianxin/oa/model"> <include name="**/*.java"/> </fileset> <!-- 指定工具类 --> <component classname="org.xdoclet.plugin.hibernate.HibernateMappingPlugin" version="3.0" destdir="${src.dir}" /> </xdoclet> </target> </project>
在配置的过程中,可以看下官网给的文档,对component中都需要配置什么都进行了说明。那么现在就来看一下实体类要怎么样编写,才能够通过XDoclet生成配置文件。
要想生成Hibernate的映射文件,那么映射文件中应该有的东西,在写JavaDoc的时候,是都需要写进去的,而且很相似。
通过一个简单的例子来看吧:
实体类文件:
/** * 公文 * @hibernate.class table="t_document" * */ public class Document { /** * @hibernate.id generator-class="native" */ private int id; /** * 标题 * @hibernate.property */ private String title; /** * 创建者 * @hibernate.many-to-one column="userId" */ private User creator; }
生成的映射文件:
<hibernate-mapping> <class table="t_document" name="com.jianxin.oa.model.Document"> <id name="id"> <generator class="native"/> </id> <property name="title"/> <many-to-one column="userId" name="creator"/> </class> </hibernate-mapping>
通过对比编写的类和生成的配置文件,不难发现:
1、name不指定,就是使用的变量名
2、@hibernate.标签 属性=“值”,生成的配置文件是<标签 属性=“值”>
3、当有多个属性时,只需要用空格分开即可
这样,就不用再多学习一个东西了,我们如果熟悉了hibernate的映射文件的编写,那么你在知道了这个规律后,轻轻松松的就可以熟悉XDoclet的JavaDoc的编写。
现在再来看使用XDoclet的好处,它减少了我们的工作量了么?
我觉得没有,有些人甚至还会说它在某方面还增加了我们的工作量,因为在有些地方,它和hibernate中的对应还是有不一致的地方,我们不得不用时间去查。
但是它的出现,使得你不需要再在类和配置文件之间切换,只需要通过类的编写,然后就可以写成类和配置文件的一致性。
对于XDoclet的使用,应该就像使用资源管理器创建表和使用脚本创建表的区别是一样一样的:
不论使用哪种方式,表名、列名、类型这些都需要写,但使用脚本时,不需要一起移动鼠标、不需要找东西,因为成竹在胸,所以会提高效率。如果你不会使用脚本,那么资源管理器是你的好选择。
而手动写映射文件和使用XDoclet不也是这样么?
标签、
###########从cu论坛中复制的####################http://bbs.chinaunix.net/thread-3610738-1-1.html
现在很多找到的软件都是tar.xz的格式的,xz 是一个使用 LZMA压缩算法的无损数据压缩文件格式。 和gzip与bzip2一样,同样支持多文件压缩,但是约定不能将多于一个的目标文件压缩进同一个档案文件。 相反,xz通常作为一种归档文件自身的压缩格式,例如使用tar或cpioUnix程序创建的归档。 xz 在GNU coreutils(版本 7.1 或更新) 中被使用。 xz 作为压缩软件包被收录在 Fedora (自Fedora 12起) , Arch Linux , FreeBSD、 Slackware Linux、CRUX 和 Funtoo中。
xz utils 是 lzma utils 的下一代lzma utils 改名 xz utils。
压缩时 xz utils 耗时比 bzip2 长一倍,
压缩时 xz utils 耗时是 lzma utils 一半,
压缩时 xz utils 生成文件体积是 bzip2 的一半,
压缩时 xz utils 生成文件体积比 lzma utils 略大,
解压时 xz utils 耗时是 bzip2 的三分之一,
解压时 xz utils 速度比 lzma utils 略快,
解压时 xz utils 耗时仅比 gzip 多一倍。
压缩时 xz utils 使用 *.xz 格式 生成文件 比 *.lzma 格式 略大,
测试样本较小,多次测试结果有出入,无法判断 xz utils 使用 *.xz 与 *.lzma 格式 压缩与解压时间 谁占优势。
到目前为止,lzma utils 的压缩率仍是最大的,xz utils 解压时间占优势。
一个 xz 文件格式的实现XZ 实用程序已可在网上自由获得。GNU tar自版本1.22起使用这一软件透明支持xz文件格式(就如同其处理gzip格式或者bzip2格式一样)。 随着大量软件进入了公有领域(例如 liblzma等) 程序的4.999.9beta版本实现在GNU LGPL 和 GNU GPL条款下发布。
7-Zip在9.04 beta版支持了xz文件格式。
首先到[url]http://download.chinaunix.net/download/0014000/13078.shtml[/url]
页面下载xz-5.0.3.tar.bz2解压工具,然后编译安装
tar -xf xz-5.0.3.tar cd xz-5.0.3 ./configure make make install
#######################复制结束##################################
解压方法一: 这样就可以用xz命令来解压tar.xz格式文件,
xz -d linux-3.1-rc4.tar.xz #会生成tar文件
tar -xf linux-3.1-rc4.tar #解压tar文件
这里是下载了linux的内核源码,可以明显的看到tar.xz只有几十M大小,而解压后是几百兆的,这个确实压缩比率很高的。
解压方法二:tar -xvJf *.tar.xz
看博客:http://blog.csdn.net/jk110333/article/details/7545523