1. 如何编译linux内核
编译linux内核步骤:
1、安装内核
如果内核已经安装(/usr/src/目录有linux子目录),跳过。如果没有安装,在光驱中放入linux安装光盘,找到kernel-source-2.xx.xx.rpm文件(xx代表数字,表示内核的版本号),比如RedHat linux的RPMS目录是/RedHat/RPMS/目录,然后使用命令rpm -ivh kernel-source-2.xx.xx.rpm安装内核。如果没有安装盘,可以去各linux厂家站点或者www.kernel.org下载。
2、清除从前编译内核时残留的.o 文件和不必要的关联
cd /usr/src/linux
make mrproper
3、配置内核,修改相关参数,请参考其他资料
在图形界面下,make xconfig;字符界面下,make menuconfig。在内核配置菜单中正确设置个内核选项,保存退出
4、正确设置关联文件
make dep
5、编译内核
对于大内核(比如需要SCSI支持),make bzImage
对于小内核,make zImage
6、编译模块
make moles
7、安装模块
make moles_install
8、使用新内核
把/usr/src/linux/arch/i386/boot/目录内新生成的内核文件bzImage/zImage拷贝到/boot目录,然后修改/etc/lilo.conf文件,加一个启动选项,使用新内核bzImage/zImage启动。格式如下:
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
linear
default=linux-new ### 告诉lilo缺省使用新内核启动linux ###
append="mem=256M"
image=/boot/vmlinuz-2.2.14-5.0
label=linux
read-only
root=/dev/hda5
image=/boot/bzImage(zImage)
label=linux-new
read-only
root=/dev/hda5
保留旧有的启动选项可以保证新内核不能引导的情况,还可以进入linux进行其他操作。保存退出后,不要忘记了最重要的一步,运行/sbin/lilo,使修改生效。
9、重新生成ram磁盘
如果您的系统中的/etc/lilo.conf没有使用了ram磁盘选项initrd,略过。如果您的系统中的/etc/lilo.conf使用了ram磁盘选项initrd,使用mkinitrd initrd-内核版本号,内核版本号命令重新生成ram磁盘文件,例如我的Redhat 6.2:
mkinitrd initrd-2.2.14-5.0 2.2.14-5.0
之后把/etc/lilo.conf中的initrd指向新生成的initrd-2.2.14-5.0文件:
initrd=/boot/initrd-2.2.14-5.0
ram磁盘能使系统性能尽可能的优化,具体参考/usr/src/linux/Documents/initrd.txt文件
10、重新启动,OK!
2. 我想在linux的内核模块中对文件进行打开读写等操作,可以实现吗
写个驱动···· vfs_write之类的函数,具体网上很多例子
3. 关于linux用户和用户组权限的问题,文件读写权限的问题
Linux下权来限有三种,用户权限,源组权限,其他用户。
可以使用ls -l filename 会列出改文件的权限。
分别用rwx表示读,写和可执行三种权限,
对于文件:
r:可读,可以使用类似cat等命令查看文件内容;
w:可写,可以编辑或删除此文件;
x:可执行,eXecutable,可以命令提示符下当做命令提交给内核运行
对于目录:
r:可以对此目录执行ls以列出内部的所有文件;
w:可以在此目录创建文件;
x:可以使用cd切换进次目录,也可以使用ls -l查看文件的详细内容。
一个文件从左至右依次用这三个符合表示上面所说相对应的权限。
比如一个文件权限像这样-rwx-rw-r--代表用户有读,写和可执行,组有读和写权限,其他用户有读权限。
第一个-代表该文件的类型,比如是目录的话会显示d,软链接的话会显示l,和权限无关。
可以使用chmod filename 改变文件的权限。
可以使用chown filename 改变文件所属的用户和组。
4. linux2.6.36内核是只读的吗
可以这么理解,linux系统在开机引导后会把内核加载到内存中,加载完毕之后整个系统的运行就不关文件系统中的内核文件什么事了。
5. 如何在Linux上安装内核头文件
当在编译一个设备驱动模块时,需要在系统中安装内核头文件。内核头文件同样在编译与内核直接链接的用户空间程序时需要。当在这些情况下安装内核头文件时,必须确保内核头文件精确地与当前内核版本匹配(比如:3.13.0-24-generic)。
如果内核是发行版自带的内核版本,或者使用默认的包管理器的基础仓库升级的(比如:apt-ger、aptitude或者yum),也可以使用包管理器来安装内核头文件。
另一方面,如果下载的是kernel源码并且手动编译的,可以使用make命令来安装匹配的内核头文件。
使用apt-get命令来安装匹配的内核头文件:
1、首先,使用dpkg-query命令检查是否有可用的内核头文件。
$ dpkg-query -s linux-headers-$(uname -r)
dpkg-query: package 'linux-headers-3.11.0-26-generic' is not installed and no information is available
2、接着使用下面的命令安装匹配的内核头文件。
$ sudo apt-get install linux-headers-$(uname -r)
3、验证头文件是否成功安装。
$ dpkg-query -s linux-headers-$(uname -r)
Package: linux-headers-3.11.0-26-genericStatus: install ok installed
4、Debian、Ubuntu、Linux Mint默认头文件在/usr/src下。
使用yum命令来安装匹配的内核头文件:
1、首先,用下面的命令检查系统是否已经安装了头文件。如果下面的命令没有任何输出,这就意味着还没有头文件。
$ rpm -qa | grep kernel-headers-$(uname -r)
2、接着用yum命令安装头文件。这个命令会自动找出合适的头文件并安装。
$ sudo yum install kernel-headers
3、验证包安装的状态。
$ rpm -qa | grep kernel-headers-$(uname -r)
kernel-headers-3.10.0-123.9.3.el7.x86_64
4、Fedora、CentOS 或者 RHEL上默认内核头文件的位置是/usr/include/linux。
6. linux的内核是由bootloader装载到内存中的
linux的内核的确是由bootloader装载到内存中的。linux的bootloader有2个部版分组成:bootstrap和uboot。所权以更准确点的说法是:linux的内核是由uboot装载到内存中的。内核文件本身是存放在硬盘的文件系统中,这句话就是错的。内核和文件系统是分开存储的。uboot读取kernel到内存是从kernel开始存储的地址开始读取的,而读取开始位置和读取大小,是由环境变量决定的。所以这个时候不需要文件系统的。
给你张图片,便于理解吧。这张图片是bootstrap、uboot、环境变量、kernel、文件系统在nandflash里面的存储分布。
其中rootfs.jfss2就是文件系统。