在 Ubuntu 中如何安装或升级 Linux 内核到4.2

在 Ubuntu 中如何安装或升级 Linux 内核到4.2
在 Ubuntu 中如何安装或升级 Linux 内核到4.2

Linux 内核 4.2已经发布了。Linus Torvalds 在 lkml.org 上写到:

通过这周这么小的变动,看来在最后一周 发布 4.2 版本应该不会有问题,当然还有几个修正,但是看起来也并不需要延迟一周。 所以这就到了,而且 4.3 的合并窗口现已打开。我已经有了几个等待处理的合并请求,明天我开始处理它们,然后在适当的时候放出来。 从 rc8 以来的简短日志很小,已经附加。这个补丁也很小…

新内核 4.2 有哪些改进?:

  • 重写英特尔的x86汇编代码
  • 支持新的 ARM 板和 SoC
  • 对 F2FS 的 per-file 加密
  • AMDGPU 的内核 DRM 驱动程序
  • 对 Radeon DRM 驱动的 VCE1 视频编码支持
  • 初步支持英特尔的 Broxton Atom SoC
  • 支持 ARCv2 和 HS38 CPU 内核
  • 增加了队列自旋锁的支持
  • 许多其他的改进和驱动更新。

在 Ubuntu 中如何下载4.2内核 :

此内核版本的二进制包可供下载链接如下:

首先检查你的操作系统类型,32位(i386)的或64位(amd64)的,然后使用下面的方式依次下载并安装软件包:

  1. linux-headers-4.2.0-xxx_all.deb
  2. linux-headers-4.2.0-xxx-generic_xxx_i386/amd64.deb
  3. linux-image-4.2.0-xxx-generic_xxx_i386/amd64.deb

安装内核后,在终端((Ctrl+Alt+T))运行sudo update-grub命令来更新 grub boot-loader。

如果你需要一个低延迟系统(例如用于录制音频),请下载并安装下面的包:

  1. linux-headers-4.2.0_xxx_all.deb
  2. linux-headers-4.2.0-xxx-lowlatency_xxx_i386/amd64.deb
  3. linux-image-4.2.0-xxx-lowlatency_xxx_i386/amd64.deb

对于没有图形用户界面的 Ubuntu 服务器,你可以运行下面的命令通过 wget 来逐一抓下载,并通过 dpkg 来安装:

对于64位的系统请运行:

cd /tmp/

wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.2-unstable/linux-headers-4.2.0-040200_4.2.0-040200.201508301530_all.deb

wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.2-unstable/linux-headers-4.2.0-040200-generic_4.2.0-040200.201508301530_amd64.deb

wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.2-unstable/linux-image-4.2.0-040200-generic_4.2.0-040200.201508301530_amd64.deb

sudo dpkg -i linux-headers-4.2.0-*.deb linux-image-4.2.0-*.deb

对于32位的系统,请运行:

cd /tmp/

wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.2-unstable/linux-headers-4.2.0-040200_4.2.0-040200.201508301530_all.deb

wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.2-unstable/linux-headers-4.2.0-040200-generic_4.2.0-040200.201508301530_i386.deb

wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.2-unstable/linux-image-4.2.0-040200-generic_4.2.0-040200.201508301530_i386.deb

sudo dpkg -i linux-headers-4.2.0-*.deb linux-image-4.2.0-*.deb

最后,重新启动计算机才能生效。

要恢复或删除旧的内核,请参阅通过脚本安装内核


via: http://ubuntuhandbook.org/index.php/2015/08/upgrade-kernel-4-2-ubuntu/

作者:Ji m 译者:strugglingyouth 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Centos 中如何快速定制二进制的内核 RPM 包

随着Linux服务器越来越多了,底层系统内核想要保持版本统一就需要定制专门的二进制安装包来便捷的升级和管理。 RedHat系那当然就是使用rpmbuild来做定制化管理了。

今天我们分俩个部分(root和普通用户)来讲解如何制作内核的二进制rpm包。

Centos 中如何快速定制二进制的内核 RPM 包
Centos 中如何快速定制二进制的内核 RPM 包

Building主机系统环境约定:

  • OS : CentOS release 6.6

  • Arch : i686

一,rpm包简单定制

注意: 这里我们首先要预留至少20GB的临时文件空间。

1、rpm 制作前的环境准备:

yum -y groupinstall "Development Tools"
yum -y install ncurses-devel qt-devel
yum -y install rpm-build redhat-rpm-config asciidoc hmaccalc perl-ExtUtils-Embed xmlto
yum -y install audit-libs-devel binutils-devel elfutils-devel elfutils-libelf-devel
yum -y install newt-devel python-devel zlib-devel bc

2、准备内核的源代码组件

cd /usr/src
wget -c https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.19.1.tar.xz
tar -Jxvf linux-3.19.1.tar.xz
ln -s linux-3.19.1 linux
cd linux
make oldconfig     # 验证和更新配置.config配置文件(如果只想在原来内核配置的基础上修改一些小地方)
make menuconfig     # 简单图形化的内核配置管理

3、此时,我们就可以开始编译新内核rpm包了

make rpm     # 自动生成rpmtree,kernel.spec文件,自动编译, 会生成debug包在内的所有rpm包组件。

这个时候我们就等着吧,或者喝杯下午茶什么的。

好了, 我们找一下已经编译好的内核 rpm 包。

cd /root/rpmbuild/RPMS/`uname -m`/
tree RPMS/
RPMS/
└── i386
    ├── kernel-3.19.1-2.i386.rpm
    ├── kernel-devel-3.19.1-2.i386.rpm
    └── kernel-headers-3.19.1-2.i386.rpm

1 directory, 3 files

4、安装新内核

rpm -Uvh kernel-*-.rpm

5、重启,验证内核版本

uname -a 

二, rpm包深度定制化

1、我们先创建好rpm的“制作车间”(我觉得这样说可能更形象一些)。

yum install rpmdevtools     # rpm 制作车间快速创建工具
useradd -m builder     # 新建一个临时用户以便创建 RPM 包,如果有错误发生,构建程序不会破坏现有的系统环境。
su - builder
rpmdev-setuptree    # 创建”制作车间“

将会在builder用户的家目录下生成如下目录结构:

tree -L 1 ~/rpmbuild/
rpmbuild/
├── BUILD
├── RPMS
├── SOURCES
├── SPECS
└── SRPMS

2、编译前准备

此时我们需要包收集来的新版内核源码包放到 /home/builder/rpmbuild/SOURCES 目录下

su - builder
cd ~/rpmbuild/SOURCES
wget -c https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.19.1.tar.xz
# 注意: rpmbuild 是通过gzip来做building前源码包解压工作的,所以需要把这个压缩包转换成.tar.gz格式。
# 这里就不做记录了
cp /boot/config-`uname -r` .    # 将现有的内核配置文件 config-`uname -r` 拷贝到 SOURCES 目录下

切换到SPECS目录下, 生成 kernel.spec:

tar Jxvf ../SOURCES/linux-3.19.1.tar.xz -C .
bash ../linux-3.19.1/scripts/package/mkspec >./kernel.spec
rm -rf linux-3.19.1
# 这里需要我们手动利用源码包中提供的脚本生成 kernel.spec 文件
# 记得生成kernel.spec完之后,清理掉 linux-3.19.1 文件夹
vim kernel.spec    # 可以根据个人情况做深度定制化

到此,我们的准备工作基本完成,目录结构及内容如下:

tree rpmbuild/ -a
rpmbuild/
├── BUILD
├── RPMS
├── SOURCES
│   ├── config-`uname -r`
│   └── linux-3.19.1.tar.gz
├── SPECS
│   └── kernel.spec
└── SRPMS

5 directories, 3 files

3、好了,现在我们正式开始编译内核的二进制rpm包:

rpmbuild -bb --with baseonly --without debug --without debuginfo --target=`uname -m` kernel.spec

rpmbuild 参数说明:

(1) –with

(2) –without

完成以后,请到 ~/rpmbuild/RPMS/`uname -m`/ 目录中获取 rpm 安装包。

rpm 包 building 参考文档:

来源:http://sebastian.staff.tomatoengine.com/detail/16

如何向 Linux 内核提交驱动

当Linux驱动程序开发到一定阶段,向kernel.org提交代码是一个很好的选择。对于很多没有向上游提交过代码的开发者来说,还是有很多疑问需要解决的。比如,究竟我们向哪里提交驱动程序?提交时我们的代码应该处于什么状态?提交的过程又如何呢?

如何向 Linux 内核提交驱动
如何向 Linux 内核提交驱动

向哪里提交

Linux staging tree是Greg KH建立的用于提交驱动程序的git仓库。我们可以把staging tree看作是代码进入mainline内核之前的一个预科班,新增的驱动程序首先需要放到这里供社区review和测试。Staging tree是 Greg KH于2008年建立的一棵kernel tree,其建立之目的是用来放置一些未充分测试或者因为一些其他原因未能进入内核的新增驱动程序和新增文件系统。

Linux staging tree的URL是” git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging-2.6.git “或者” http://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging-2.6.git “。这里需要注意的是,git协议的端口号是9418,因为很多公司的防火墙只会开放80端口,clone代码仓库时如果git协议超时,不妨试试http协议。

关于Linux staging tree更详细的描述可以参考我前一篇博文《小议Linux staging tree》。

我们的代码

在我们向上游提交驱动程序之前,需要保证代码能够遵循Linux内核的coding style。当然,这个规定并不是强制的,如果您经常阅读Linux内核代码,就会发现很多驱动对内核coding style的遵循情况也并不是太好。但一致的代码风格对代码的维护大有裨益,所以对作为Linux内核驱动程序员的我们来说,遵循coding style是一个很好的习惯。关于Linux内核的coding style的详细信息,可以参考Linux内核里的Documentation/CodingStyle文档,或者我之前的博文《谈谈为 Linux 内核开发驱动代码的编码风格》。

我们在提交驱动之前还需要用静态代码检查工具sparse来检查一下代码。

sparse的源代码可以从“git://git.kernel.org/pub/scm/devel/sparse/sparse.git”获得,得到代码之后,执行”make; make install”来编译生成可执行程序。默认情况下,sparse程序会被放到目录“~/bin”下面,如果您不喜欢这个位置,可以修改Makefile来设定路径。需要注意的是,使用sparse之前,PATH环境变量要设置正确。

sparse的使用方法很简单,只要在make驱动程序时加上“C=N”的选项即可,其中N的取值是1或者2。当N=1时表示对需要重新编译的C文件进行代码检查,N=2时表示对所有的C文件进行代码检查。

对于staging目录下的驱动来说,我们还需要附上一个TODO文件,用来描述未来的维护计划。一般情况下,TODO文件可以这样写:

TODO:
- support more features
- use kernel coding style
- checkpatch.pl fixes

如何提交

我们可以通过patch的形式把驱动程序提交给staging tree。提交之前,需要首先把staging tree clone到本地,然后基于当前的工作目录制作patch。

Git提供了制作格式化的patch的功能,命令如下:

git format-patch -N

其中,N是整数,用来指定我们把最近N次提交做成N个patch。比如当N=1时,就表示把最近一次提交制作成patch。Git会根据提交的log信息来自动命名patch文件。

这里需要注意的是,每次提交的log的描述要遵循一定的格式。

Log的第一行是一个简短的描述。本文主要介绍如何向staging tree提交代码,我们需要在Log首行以“staging:”开头。Log的最后一行需要提供提交者的email信息,我们可以这样写:“Signed-off-by: wwang ”。

举个例子,假定我们的staging driver命名为hello_world,log的格式可以参考如下:

staging: hello_world: My first commit
This is my first commit.
Signed-off-by: wwang 

Patch生成之后,我们需要把它寄给staging tree的维护者,通常是Greg KH本人以及linux内核驱动的开发者列表。这个步骤也可以使用git来帮助我们完成,但首先需要确定系统里已经安装msmtp和git-email这两个包。这里还需提醒一下,如果您的邮件服务器是Exchange,很可能需要NTLM认证,这就要求msmtp支持NTLM。Ubuntu仓库里的msmtp默认支持NTLM,可以直接使用,但还有些其他的发行版的软件仓库里自带的msmtp并不支持NTLM(如Arch Linux),这种情况就需要自己编译了。

msmtp安装好之后,需要配置”~/.msmtprc”文件。以Gmail为例,”.msmtprc”可以这样配置:

# Set default values for all following accounts.
defaults
logfile ~/.msmtp.log

# gmail
account gmail
protocol smtp
host smtp.gmail.com
from my@gmail.com
user my@gmail.com
password mypasswd
port 587
auth on
tls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
syslog LOG_MAIL

# Set a default account
account default : gmail

用git发送patch的命令如下:

git send-email
  --smtp-server /usr/bin/msmtp
  --from my@gmail.com
  --to gregkh@suse.de
  --to devel@linuxdriverproject.org
  --to linux-kernel@vger.kernel.org
  ./my.patch

将patch发送出去只是提交驱动程序的第一步,之后还需要不断的维护与完善,把代码丢给内核然后就放手不管的做法是不可取的。提交代码还有一个原则,就是每次提交只做一件事情,这样才会比较方便内核维护者来review我们的代码。

来源:http://www.cnblogs.com/wwang/archive/2011/04/01/1951742.html

Linux:Centos 中如何快速定制二进制的内核 RPM 包

随着Linux服务器越来越多了,底层系统内核想要保持版本统一就需要定制专门的二进制安装包来便捷的升级和管理。 RedHat系那当然就是使用rpmbuild来做定制化管理了。

今天我们分俩个部分(root和普通用户)来讲解如何制作内核的二进制rpm包。

Linux:Centos 中如何快速定制二进制的内核 RPM 包
Linux:Centos 中如何快速定制二进制的内核 RPM 包

Building主机系统环境约定:

  • OS : CentOS release 6.6

  • Arch : i686

一,rpm包简单定制

注意: 这里我们首先要预留至少20GB的临时文件空间。

1、rpm 制作前的环境准备:

yum -y groupinstall "Development Tools"
yum -y install ncurses-devel qt-devel
yum -y install rpm-build redhat-rpm-config asciidoc hmaccalc perl-ExtUtils-Embed xmlto
yum -y install audit-libs-devel binutils-devel elfutils-devel elfutils-libelf-devel
yum -y install newt-devel python-devel zlib-devel bc

2、准备内核的源代码组件

cd /usr/src
wget -c https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.19.1.tar.xz
tar -Jxvf linux-3.19.1.tar.xz
ln -s linux-3.19.1 linux
cd linux
make oldconfig     # 验证和更新配置.config配置文件(如果只想在原来内核配置的基础上修改一些小地方)
make menuconfig     # 简单图形化的内核配置管理

3、此时,我们就可以开始编译新内核rpm包了

make rpm     # 自动生成rpmtree,kernel.spec文件,自动编译, 会生成debug包在内的所有rpm包组件。

这个时候我们就等着吧,或者喝杯下午茶什么的。

好了, 我们找一下已经编译好的内核 rpm 包。

cd /root/rpmbuild/RPMS/`uname -m`/
tree RPMS/
RPMS/
└── i386
    ├── kernel-3.19.1-2.i386.rpm
    ├── kernel-devel-3.19.1-2.i386.rpm
    └── kernel-headers-3.19.1-2.i386.rpm

1 directory, 3 files

4、安装新内核

rpm -Uvh kernel-*-.rpm

5、重启,验证内核版本

uname -a 

二, rpm包深度定制化

1、我们先创建好rpm的“制作车间”(我觉得这样说可能更形象一些)。

yum install rpmdevtools     # rpm 制作车间快速创建工具
useradd -m builder     # 新建一个临时用户以便创建 RPM 包,如果有错误发生,构建程序不会破坏现有的系统环境。
su - builder
rpmdev-setuptree    # 创建”制作车间“

将会在builder用户的家目录下生成如下目录结构:

tree -L 1 ~/rpmbuild/
rpmbuild/
├── BUILD
├── RPMS
├── SOURCES
├── SPECS
└── SRPMS

2、编译前准备

此时我们需要包收集来的新版内核源码包放到 /home/builder/rpmbuild/SOURCES 目录下

su - builder
cd ~/rpmbuild/SOURCES
wget -c https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.19.1.tar.xz
# 注意: rpmbuild 是通过gzip来做building前源码包解压工作的,所以需要把这个压缩包转换成.tar.gz格式。
# 这里就不做记录了
cp /boot/config-`uname -r` .    # 将现有的内核配置文件 config-`uname -r` 拷贝到 SOURCES 目录下

切换到SPECS目录下, 生成 kernel.spec:

tar Jxvf ../SOURCES/linux-3.19.1.tar.xz -C .
bash ../linux-3.19.1/scripts/package/mkspec >./kernel.spec
rm -rf linux-3.19.1
# 这里需要我们手动利用源码包中提供的脚本生成 kernel.spec 文件
# 记得生成kernel.spec完之后,清理掉 linux-3.19.1 文件夹
vim kernel.spec    # 可以根据个人情况做深度定制化

到此,我们的准备工作基本完成,目录结构及内容如下:

tree rpmbuild/ -a
rpmbuild/
├── BUILD
├── RPMS
├── SOURCES
│   ├── config-`uname -r`
│   └── linux-3.19.1.tar.gz
├── SPECS
│   └── kernel.spec
└── SRPMS

5 directories, 3 files

3、好了,现在我们正式开始编译内核的二进制rpm包:

rpmbuild -bb --with baseonly --without debug --without debuginfo --target=`uname -m` kernel.spec

rpmbuild 参数说明:

(1) –with

(2) –without

完成以后,请到 ~/rpmbuild/RPMS/`uname -m`/ 目录中获取 rpm 安装包。

rpm 包 building 参考文档:

来源:http://sebastian.staff.tomatoengine.com/detail/16

Linux:手动释放linux内存cache

总有很多朋友对于Linux的内存管理有疑问,之前一篇linux下的内存管理方式似乎也没能清除大家的疑虑。而在新版核心中,似乎对这个问题提供了新的解决方法,特转出来给大家参考一下。最后,还附上我对这方法的意见,欢迎各位一同讨论。当在Linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching。这个问题,貌似有不少人在问,不过都没有看到有什么很好解决的办法。那么我来谈谈这个问题。

一、通常情况

先来说说free命令:

# free -m
total used free shared buffers cached
Mem: 249 163 86 0 10 94
-/+ buffers/cache: 58 191
Swap: 511 0 511

其中:

total 内存总数used 已经使用的内存数free 空闲的内存数shared 多个进程共享的内存总额buffers Buffer Cache和cached Page Cache 磁盘缓存的大小-buffers/cache (已用)的内存数:used – buffers – cached+buffers/cache(可用)的内存数:free + buffers + cached可用的memory=free memory+buffers+cached

有了这个基础后,可以得知,我现在used为163MB,free为86MB,buffer和cached分别为10MB,94MB。那么我们来看看,如果我执行复制文件,内存会发生什么变化。

# cp -r /etc ~/test/
# free -m
total used free shared buffers cached
Mem: 249 244 4 0 8 174
-/+ buffers/cache: 62 187
Swap: 511 0 511

在我命令执行结束后,used为244MB,free为4MB,buffers为8MB,cached为174MB,天呐,都被cached吃掉了。别紧张,这是为了提高文件读取效率的做法。为了提高磁盘存取效率,Linux做了一些精心的设计,除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换),还采取了两种主要Cache方式:Buffer Cache和Page Cache。前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache有效缩短了 I/O系统调用(比如read,write,getdents)的时间。那么有人说过段时间,linux会自动释放掉所用的内存。等待一段时间后,我们使用free再来试试,看看是否有释放?

# free -m
total used free shared buffers cached
Mem: 249 244 5 0 8 174
-/+ buffers/cache: 61 188
Swap: 511 0 511

似乎没有任何变化。(实际情况下,内存的管理还与Swap有关)那么我能否手动释放掉这些内存呢?回答是可以的!

二、手动释放缓存

/proc是一个虚拟文件系统,我们可以通过对它的读写操作做为与kernel实体间进行通信的一种手段。也就是说可以通过修改/proc中的文件,来对当前kernel的行为做出调整。那么我们可以通过调整/proc/sys/vm/drop_caches来释放内存。操作如下:

# cat /proc/sys/vm/drop_caches
0

首先,/proc/sys/vm/drop_caches的值,默认为0。

# sync

手动执行sync命令(描述:sync 命令运行 sync 子例程。如果必须停止系统,则运行sync 命令以确保文件系统的完整性。sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件)

# echo 3 > /proc/sys/vm/drop_caches
# cat /proc/sys/vm/drop_caches
3

将/proc/sys/vm/drop_caches值设为3

# free -m
total used free shared buffers cached
Mem: 249 66 182 0 0 11
-/+ buffers/cache: 55 194
Swap: 511 0 511

再来运行free命令,会发现现在的used为66MB,free为182MB,buffers为0MB,cached为11MB。那么有效的释放了buffer和cache。有关/proc/sys/vm/drop_caches的用法在下面进行了说明

/proc/sys/vm/drop_caches (since Linux 2.6.16)Writing to this file causes the kernel to drop clean caches,dentries and inodes from memory, causing that memory to become free.To free pagecache, use echo 1 > /proc/sys/vm/drop_caches;to free dentries and inodes, use echo 2 > /proc/sys/vm/drop_caches;to free pagecache, dentries and inodes, use echo 3 > /proc/sys/vm/drop_caches.Because this is a non-destructive operation and dirty objects are not freeable, the user should run sync first

三、我的意见

上述文章就长期以来很多用户对Linux内存管理方面的疑问,给出了一个比较“直观”的回复,我更觉得有点像是核心开发小组的妥协。对于是否需要使用这个值,或向用户提及这个值,我是有保留意见的。从man可以看到,这值从2.6.16以后的核心版本才提供,也就是老版的操作系统,如红旗DC 5.0、RHEL 4.x之前的版本都没有;若对于系统内存是否够用的观察,我还是原意去看swap的使用率和si/so两个值的大小;用户常见的疑问是,为什么free这么小,是否关闭应用后内存没有释放?但实际上,我们都知道这是因为Linux对内存的管理与Windows不同,free小并不是说内存不够用了,应该看的是free的第二行最后一个值:-/+ buffers/cache: 58 191,这才是系统可用的内存大小。实际项目中告诉我们,如果因为是应用有像内存泄露、溢出的问题,从swap的使用情况是可以比较快速可以判断的,但free上面反而比较难查看。相反,如果在这个时候,我们告诉用户,修改系统的一个值,“可以”释放内存,free就大了。用户会怎么想?不会觉得操作系统“有问题”吗?所以说,我觉得既然核心是可以快速清空buffer或cache,也不难做到(这从上面的操作中可以明显看到),但核心并没有这样做(默认值是0),我们就不应该随便去改变它。一般情况下,应用在系统上稳定运行了,free值也会保持在一个稳定值的,虽然看上去可能比较小。当发生内存不足、应用获取不到可用内存、OOM错误等问题时,还是更应该去分析应用方面的原因,如用户量太大导致内存不足、发生应用内存溢出等情况,否则,清空buffer,强制腾出free的大小,可能只是把问题给暂时屏蔽了。我觉得,排除内存不足的情况外,除非是在软件开发阶段,需要临时清掉buffer,以判断应用的内存使用情况;或应用已经不再提供支持,即使应用对内存的时候确实有问题,而且无法避免的情况下,才考虑定时清空buffer。(可惜,这样的应用通常都是运行在老的操作系统版本上,上面的操作也解决不了)。而生产环境下的服务器可以不考虑手工释放内存,这样会带来更多的问题。记住内存是拿来用的,不是拿来看的。

不像windows,无论你的真实物理内存有多少,他都要拿硬盘交换文件来读。这也就是windows为什么常常提示虚拟空间不足的原因,你们想想多无聊,在内存还有大部分的时候,拿出一部分硬盘空间来充当内存。硬盘怎么会快过内存,所以我们看linux,只要不用swap的交换空间,就不用担心自己的内存太少。如果常常swap用很多,可能你就要考虑加物理内存了,这也是linux看内存是否够用的标准哦。当然这仅代表我个人意见,也欢迎大家来交流讨论。

Linux:CentOS Linux 升级内核步骤、方法

当前系统为CentOS Linux release 6.0 (Final),内核版本为2.6.32-71.el6.i686.由于最近内核出现最新的漏洞(linux kernel 又爆内存提权漏洞,2.6.39 内核无一幸免,所以将内核升级至3.2.2最新版本。

1. 查看当前系统内核

# uname -r
2 2.6.32-71.el6.i686

2. 下载linux-3.2.2内核包

# cd ~
# wget -c http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.2.2.tar.bz2
# tar jxvf  linux-3.2.2.tar.bz2
# cd linux-3.2.2

3. 配置内核并安装

# make mrproper  #清除环境变量,即清除配置文件
# make menuconfig  #在菜单模式下选择需要编译的内核模块

找到以下选中选项并选中networking support → networking options → network packet filtering framework(netfilter)

(1).Core netfilter configuration

  • 勾中”Netfilter connection tracking support” -m state相关模块是依赖它的,不选则没有。
  • 将netbios name service protocal support(new) 编译成模块,不然后面升级iptables后启动时会出错
  • 勾中“Netfilter Xtables support (required for ip_tables)”

(2).IP: Netfilter Configuration

  • 将 “IPv4 connection tracking support (require for NAT)” 编译成模块。
  • 勾中IP tables support (required for filtering/masq/NAT) 。
  • 将 “Full NAT” 下的 “MASQUERADE target support” 和 “REDIRECT target support” 编译成模块

(3).其它模块可以根据自己的需要进行选择,若不懂可以参考内核配置手册.

# make clean #确保所有东西均保持最新状态.
# make bzImage #生成内核文件
# make modules #编译模块
# make modules_install #安装模块
# make install #安装

4. 编辑 /etc/grub.conf 文件,将 default=1 改为 default=0

# cat /etc/grub.conf

 

# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/mapper/VolGroup-lv_root
# initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=1
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS Linux (3.2.2)
root (hd0,0)
kernel /vmlinuz-3.2.2 ro root=/dev/mapper/VolGroup-lv_root rd_LVM_LV=VolGroup/lv_root rd_LVM_LV=VolGroup/lv_swap rd_NO_LUKS rd_NO_MD rd_NO_DM LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us crashkernel=auto rhgb quiet
initrd /initramfs-3.2.2.img
title centos (2.6.32-71.el6.i686)
root (hd0,0)
kernel /vmlinuz-2.6.32-71.el6.i686 ro root=/dev/mapper/VolGroup-lv_root rd_LVM_LV=VolGroup/lv_root rd_LVM_LV=VolGroup/lv_swap rd_NO_LUKS rd_NO_MD rd_NO_DM LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us crashkernel=auto rhgb quiet
initrd /initramfs-2.6.32-71.el6.i686.img

5. 重启系统,并查看内核

# reboot
# uname -r
3.2.2
 

Linux:Linux 的启动流程详解

第一阶段:BIOS启动引导阶段

  1. 在该过程中实现硬件的初始化以及查找启动介质
  2. 从MBR中装载启动引导管理器(GRUB)并运行该启动引导管理

第二阶段:GRUB启动引导阶段

  1. 装载stage1
  2. 装载stage1.5
  3. 装载stage2
  4. 读取/boot/grub.conf文件并显示启动菜单
  5. 装载所选的kernel和initrd文件到内存中

第三阶段:内核阶段

  1. 运行内核启动参数
  2. 解压initrd文件并挂载initd文件系统,装载必须的驱动
  3. 挂载根文件系统

第四阶段:Sys V init初始化阶段

  1. 启动/sbin/init程序
  2. 运行rc.sysinit脚本,设置系统环境,启动swap分区,检查和挂载文件系统
  3. 读取/etc/inittab文件,运行在/et/rc.d/rc<#>.d中定义的不同运行级别的服务初始化脚本
  4. 打开字符终端1-6号控制台/打开图形显示管理的7号控制台

启动流程和细节详解  BIOS ==> bootloader ==> kernel & initrd.img ==> /sbin/init  1.bootloader (grub)

  /boot/grub/grub.conf    在/boot/grub目录中有两个stage文件,其中:    stage1      stage2    如果grub出现问题可能会有两种情况:  a.无法进入grub,屏幕左上角只出现一个光标。出现这种情况基本上MBR已经被破坏,需要进入rescue模式进行修复。

  –> chroot环境,执行 “grub-install /boot所在分区” 进行修复  –> 无grub相关命令时,安装grub.rpm包进行恢复  –> /boot目录下无相关的vmlinuz和initrd.img文件时,安装kernel.rpm包进行修复  –> 无grub.conf时需要手工修复

  b.grub成功加载,屏幕出现“grub>”,表示配置文件grub.conf找不到。

  –> 手工修复

  2.kernel & initrd.img

  在加载vmlinuz和initrd时出现:kernel panic情况,基本是grub.conf设置参数出问题。    –> 检查grub.conf编写是否出现问题    –> 也有可能是分区设置或者硬盘损坏等问题,需要进入rescue模式检查

  3./sbin/init

  /sbin/init的配置文件是/etc/inittab  按照这个配置文件,系统会依次执行以下脚本:    —> /etc/rc.d/rc.sysinit  定义hostname,重新挂载各分区,加载各模块    —> /etc/rc.d/rc[0-6].d/目录下以S开头的脚本  启动各runlevel的服务    —> mingetty /dev/tty[1-6]  启用终端

Linux:10 本 Linux 免费电子书

谁不喜欢免费的东东呢?本文收集整理了一些Linux电子书(多数都有可下载的PDF格式),可用作为参考书,或学习材料。主题覆盖比较广,从Java高级编程、GNU、Emacs、设备驱动到内核等。无须付费,就可阅读这些内容丰富的电子书。

0. Advanced Linux programming | Linux高级编程

https://dn-linuxcn.qbox.me/data/attachment/album/201204/14/211807ieldjs1dlnem3qai.jpg

1. GNU Emacs manual | GNU Emacs 指南

https://dn-linuxcn.qbox.me/data/attachment/album/201204/14/211810bwta6qt2xxeeg443.png

2. GTK+/Gnome application development | GTK+/Gnome 应用开发(PDF)

https://dn-linuxcn.qbox.me/data/attachment/album/201204/14/211813j5b28ltjjtxtqqhq.jpg

3. Java application development on Linux | Linux 系统下的Java程序开发(PDF)

https://dn-linuxcn.qbox.me/data/attachment/album/201204/14/211815orc6rs8mtulbn0ec.jpg

4. Linux device drivers | Linux 设备驱动

https://dn-linuxcn.qbox.me/data/attachment/album/201204/14/211818xynrfonn8728kklw.gif

5. Linux kernel in a nutshell

https://dn-linuxcn.qbox.me/data/attachment/album/201204/14/211820qllrljlvij4kzltn.jpg

Linux:在u盘上安装linux 打造你的portable linux system.

  下面和大家分享一下在 u 盘安装 linux 的步骤(SD卡未试过) 。

  1. 首先需要有一台安装了linux的PC机,我的是debian, 当然还是必须有一个U盘, 大小至少1G吧.
  2. 把U盘插到PC机上, fdisk1个或2个分区, 并把第一个分区设置成可启动分区. 格式化分区. mkfs.ext3 /dev/sdb1 
  3. 安装extlinux到PC机上. apt-get install extlinux syslinux-common.   注: extlinux 是syslinux的改进, 可以直接从ext文件系统启动。 
  4. 准备rootfs。也就是根下面的一堆文件,可以从现有系统或者image获得。
  5. 把U盘mount到PC上, mount /dev/sdb1 /mnt
  6. 把rootfs拷贝到u盘上   tar cf – | (cd /mnt;tar xf -)
  7. 建立extlinux目录。mkdir /mnt/boot/extlinux
  8. 安装extlinux到U盘的boot目录上,extlinux -i /mnt/boot/extlinux
  9. 写入mbr。 cat /usr/lib/extlinux/mbr.bin >/dev/sdb
  10. 编写配置文件/mnt/boot/extlinux/extlinux.conf, 如果没有这个文件就创建它。
    prompt 1
    timeout 01
    default squeeze

    label squeeze
          menu usb debian
          kernel /vmlinuz
          append initrd=/initrd.img root=/dev/sda1 quiet 

  注意: 如果只有u盘,那么u盘的文件名应该是/dev/sda. 如果有硬盘,应该是sdb,sdc…..

  至此就应该大功告成了,可以用你的U盘启动了。   还需要注意一些额外的工作。

  1. Rest root 密码, 不然启动后无法登陆。 
  2. 配置网络设置,不然盲机启动无法联网。 
  3. 配置sshd, 不然无法远程登陆。

来自:https://groups.google.com/forum/#!topic/gzlug/0mEgMGVKpw4

Linux:怎样在 ubuntu 上安装 Linux 3.11 内核

Linus Torvalds 已经发布了最新的 Linux 3.11 内核,有很多童鞋也和我一样很像尝尝鲜,但是我要说升级内核有很大风险,升级之后可能无法启动系统。使用 Ubuntu 官方提供的 DEB 安装包,打开终端使用命令下载:

32 位系统下载:

wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.11-saucy/linux-headers-3.11.0-031100-generic_3.11.0-031100.201309021735_i386.deb

 

wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.11-saucy/linux-headers-3.11.0-031100_3.11.0-031100.201309021735_all.deb

 

wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.11-saucy/linux-image-3.11.0-031100-generic_3.11.0-031100.201309021735_i386.deb

64 位系统下载:

wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.11-saucy/linux-headers-3.11.0-031100-generic_3.11.0-031100.201309021735_amd64.deb

 

wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.11-saucy/linux-headers-3.11.0-031100_3.11.0-031100.201309021735_all.deb

 

wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.11-saucy/linux-image-3.11.0-031100-generic_3.11.0-031100.201309021735_amd64.deb

CD 到你的下载目录:

cd /home/下载目录

安装内核命令:

sudo dpkg -i linux-headers-3.11.0*.deb linux-image-3.11.0*.deb

然后重启系统。

 

来自:http://imcn.me/html/y2013/15688.html