基本以2.6.5内核为例,虽然2.6的内核编译有更为方便的过程,但这里还是按照最经典的方式,这样最保险。一些过程说明经过了本人的精简,相关的疑问请自行用网络搜索答案,只保证本人看的懂;)一些设置按照自己的情况调整,不要完全照搬。对于编译内核造成的损失(比如LP跑了,再也不回来),本人不负任何责任:)仅供参考。
1.download linux-
2.6.5.tar.gz
2.cp linux-2.6.5.tar.gz /usr/src
3.cd /usr/src
4.mv linux linux_old
5.tar xvzf linux-2.
6.5.tar.gz
bzip2 -d linux-2.6.5.tar.bz2
tar -xvf linux-2.6.5.tar
或者tar jxvf linux-2.6.5.tar.bz2
6.cd /usr/include
rm -rf asm linux scsi
ln -s /usr/src/linux/include/asm-i386 asm
ln -s /usr/src/linux/include/linux linux
ln -s /usr/src/linux/include/scsi scsi
7.cd /usr/src/linux
make mrproper (检查有无不正确的.o文件和依赖关系,使用刚下载的完整的源程序包进行编译,所以本步可以省略。而如果你多次使用了这些源程序编译内核,那么最好要先运行一下这个命令。)
8.make config 或
make menuconfig (推荐)或
make xconfig
选择完返回MainMenu,选择save and exit,退出配置窗口并关闭超级用户终端。现在可以退出xwindows了,回到文本环境(这样做可以加快内核编译速度)执行最后操作
9.make dep
10.make zImage
若想做成启动盘的形式可make zdisk,若kernel大于512K,应用make bzImage (推荐)
11.make modules make modules_install depmod -a
12.cp /usr/src/linux/arch/i386/boot/zImage /boot (用的是make zImage) 或cp /usr/src/linux/arch/i386/boot/bzImage /boot (用的是make bzImage)
13.修改lilo.conf 或grub.conf(添加)
image=/boot/zImage(或bzImage)
label=new
root=...
14. lilo & grub
lilo -v 使改动生效。建议保留旧内核的项目,避免编译失败。通常grub 配置文件在下面三个地方(根据发行版的不同):
/etc/grub.conf
/boot/grub/menu.lst
/boot/grub/grub.conf
15. shutdown -r now
如果你的kernel 支持内存镜像,就用mkinitrd 命令制作一个镜像文件,然后拷贝到/boot 路径下。要这么做,也要记得在make menu 的时候记得选择内核镜像ram image,并且不能安装为模块,否则initrd 就不会运作。生成映像文件,否则有时系统启动时会找不到/根分区。
initrd.img就是initrd-2.4.20-8.img文件的链接
#ln -s initrd-2.4.20-8.img initrd.img
有的时候mkinitrd 失败,只要加上:--without-scsi-module 就可以通过了。
把旧内核源文件下的.config文件拷贝到新内核源文件下,
如cp /usr/src/linux-2.4.22/.config /usr/src/linux-2.6.5/
然后在新内核目录下运行make oldconfig,如果想改动什么,可以
make menuconfig,但是一定要先make oldconfig。然后就编译内核,很容易:make bzImage make modules make modules_install make install 然后到/boot 看看是不是已经有新内核文件了,再看/boot/grub/grub.conf是否已经加载了新内核。shutdown -r now
cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.6.5(新内核的bzImage的位置也有可能在/usr/src/linux/i386/下)
cp /usr/src/linux/System.map /boot/System.map-2.6.5
make clean
没有make clean 之前,如果增加了新的模块,可以直接make menuconfig && make moduels && make modules_install,不需要全部重新来过。如果你以后还要利用这次编译的成果,也可以省略这一步,如果你想直接删除源代码目录,也可以省略这一步。
一些升级内核前的备份过程:
cd /boot/
mv System.map System.map.old
mv vmlinuz vmlinuz.old
cd /usr/src/
ln -s linux-2.6.5 linux
进入/usr/include目录下,将asm、scsi、linux三个目录改名
[root@localhost /usr/include]# mv asm asm.OFF
[root@localhost /usr/include]# mv scsi scsi.OFF
[root@localhost /usr/include]# mv linux linux.OFF
建立指向新内核的位置到第三步中被改名的原目录
[root@localhost /usr/include]# ln -s /usr/src/linux/include/asm-i386 asm
[root@localhost /usr/include]# ln -s /usr/src/linux/include/scsi scsi
[root@localhost /usr/include]# ln -s /usr/src/linux/include/linux linux
检验# ls /boot
如果看到了vmlinuz-2.6.0 和System.map-2.6.0 ,那么恭喜你,成功了!
如果你是用make install 安装的,还会看到个config-2.6.0 文件
cd /boot/
ln -s vmlinuz-2.6.5 vmlinuz
ln -s System.map-2.6.5 System.map
(上面的两步的作用是保护真正的内核镜像不受损坏)
vmlinuz是压缩的内核二进制可执行文件
#du -sh vmlinuz-2.6.5用来查看新的内核有多大
如果你的Kernel 配置支持Modules的话,解决那些问题是比较简单的
只要编译那些.o文件就可以啦.
比如我的声卡经常Irq 和IO 不对, 我就到/usr/src/linux/drivers/sound目录下
./configure
选好IO,IRQ 等等,
make
cp sound.o /lib/modules/2.0.34/misc
rmmod sound
insmod sound init_trace=1
测试一下.直到成功为止.比在/usr/src/linux 下, make menuconfig ;
make dep;make clean;make zImage;.... 好多了.
怎么给内核打补丁?
# cd /usr/src/linux
# bzip2 -dc patch-xxx.bz2 | patch
PATCH文件拷贝到/usr/src下:
#patch -p0 < patch-2.2.16
#gzip -cd patch-2.4.x-pre2-ac1.gz|patch -p1 -s -N -E -d 源码目录
可以使用这种方式来安装任何补丁,而不用管它的文件名了
用lsmod看当前装入的module, insmod/rmmod增删module. 对于fs,network方面的module, kernel是可以自动动态装载的(通过kerneld, 要用时自动insmod) 而对于与硬件相关的module(如网卡,SCSI卡等), 则需自己手工加入,或用RedHat Control Panel中的kernelcfg来选择module(写于/etc/conf.modules(?), 那样则boot kernel时会自动加入
自己定制编译的内核运行更快(具有更少的代码)
系统将拥有更多的内存(内核部分将不会被交换到虚拟内存中)
不需要的功能编译进入内核可能会增加被系统攻击者利用的漏洞
将某种功能编译为模块方式会比编译到内核内的方式速度要慢一些
查看swap有没有打开(用free指令)。此外,最好不要超频,不然很有可能会发生signal 11的错误,使得编到一半的核心停了下来
1. Code maturity level options
代码成熟等级。此处只有一项:prompt for development and/or incomplete code/drivers,如果你要试验现在仍处于实验阶段的功能,比如khttpd、IPv6等,就必须把该项选择为Y了;否则可以把它选择为N。
2. Loadable module support
Enable loadable module support:除非你准备把所有需要的内容都编译到内核里面,否则该项应该是必选的。
Set version inFORMation on all module symbols:可以不选它。
Kernel module loader:让内核在启动时有自己装入必需模块的能力,建议选上。
3. Processor type and features
High Memory Support:大容量内存的支持。可以支持到4G、64G,一般可以不选。
Math emulation:协处理器仿真。协处理器是在386时代的宠儿,现在早已不用了。
MTTR (memory type range register)support------选择该选项,系统将生成/proc/mtrr文件对MTRR进行管理,供X server使用。同时用来启动pentinum pro和pentinum II 的特殊功能,如果你用的不是这类CPU就选N,否则也仅仅是使内核变大而已。
Symmetric multi-processing support:对称多处理支持。除非你富到有多个CPU,否则就不用选了。
4. General setup
一般使用缺省设置就可以了。
Networking support:网络支持。必须,没有网卡也建议你选上。
PCI support:PCI支持。如果使用了PCI的卡,当然必选。
PCI access mode:PCI存取模式。可供选择的有BIOS、Direct和Any,选Any吧。
Support for hot-pluggabel devices:热插拔设备支持。
PCMCIA/CardBus support:PCMCIA/CardBus支持。
System V IPC
BSD Process Accounting
Sysctl support:以上三项是有关进程处理/IPC调用的,主要就是System V和BSD两种风格。如果你不是使用BSD,就按照缺省吧。
Power Management support:电源管理支持。
Advanced Power Management BIOS support:高级电源管理BIOS支持。
5. Memory Technology Device(MTD)
MTD设备支持。可不选。
6. Parallel port support
并口支持。如果不打算使用串口,就别选了。
7. Plug and Play configuration
还是选上吧,可以拔下鼠标之类的体验一下Linux下即插即用的感觉。
8. Block devices
Normal PC floppy disk support:普通PC软盘支持。这个应该必选。
Mulex DAC960/DAC1100 PCI RAID Controller support:RAID镜像用的。
Network block device support:网络块设备支持。如果想访问网上邻居的东西,就选上。
10. Telephony Support
Linux下可以支持电话卡,这样你就可以在IP上使用普通的电话提供语音服务了。记住,电话卡可和modem没有任何关系哦。
11. ATA/IDE/MFM/RLL support
这个是有关各种接口的硬盘/光驱/磁带/软盘支持的,内容太多了,使用缺省的选项吧,如果你使用了比较特殊的设备,比如PCMCIA等,就到里面自己找相应的选项吧。
12. SCSI support
13. Fusion MPT device support
14. I2O device support
需要I2O接口适配器支持,在智能Input/Output(I2O)体系接口中使用。
15. Network device support
网络设备支持。编译到内核里面好了,不选M了,选Y。
16. Amateur Radio support
配置业余无线广播。
17. IrDA(infrared)support
红外线支持。
18. ISDN subsystem
如果你使用ISDN上网,这个就必不可少了。
19. Old CD-ROM drivers(not SCSI、not IDE)
做的可真周到,原来那些非SCSI/IDE口的光驱谁还在用啊,自己选吧,用IDE的CD-ROM不用选。
20. Character devices
字符设备。这个内容又太多了,先使用缺省设置,需要的话自己就修改。把大类介绍一下吧:
I2C support:I2C是Philips极力推动的微控制应用中使用的低速串行总线协议。如果你要选择下面的Video For Linux,该项必选。
Mice:鼠标。现在可以支持总线、串口、PS/2、C&T 82C710 mouse port、PC110 digitizer pad,自己根据需要选择。
Watchdog Cards:虽然称为Cards,这个可以用纯软件来实现,当然也有硬件的。如果你把这个选中,那么就会在你的/dev下创建一个名为watchdog的文件,它可以记录你的系统的运行情况,一直到系统重新启动的1分钟左右。有了这个文件,你就可以恢复系统到重启前的状态了。
21. File systems
22. Console drivers
控制台驱动。一般使用VGA text console就可以了,标准的80*25的文本控制台。
23. Sound
声卡驱动。如果你能在列表中找到声卡驱动那自然最好,否则就试试OSS了。
24. USB supprot
25. Kernel hacking
配置了这个,即使在系统崩溃时,你也可以进行一定的工作了。普通用户是用不着这个功能的。配置完后,存盘退出,当然你也可以把现在的配置文件保存起来,这样下次再配置的时候就省力气了。接下来是编译。
#make dep
#make clean
#make bzImage或make zImage
#make modules
#make modules_install
#depmod -a
make dep实际上读取配置过程生成的配置文件,来创建对应于配置的依赖关系树,从而决定哪些需要编译而那些不需要;第二命令make clean完成删除前面步骤留下的文件,以避免出现一些错误;在回答Enable loadable module support (CONFIG_MODULES)时选了"Yes"才是必要的,make modules和make modules_install分别生成相应的模块和把模块拷贝到需要的目录中。严格说来,depmod -a命令和编译过程并没有关系,它是生成模块间的依赖关系,这样你启动新内核之后,使用modprobe命令加载模块时就能正确地定位模块。
#cp /usr/src/linux/System.map /boot/System.map-2.4.18
#cp /usr/src/linux/arch/i386/bzImage /boot/vmlinuz-2.4.18
#cd /boot;rm -f System.map vmlinuz
#ln -s vmlinuz-2.4.18 vmlinuz
#ln -s System.map-2.4.18 System.map
如果用LILO,修改/etc/lilo.conf,添加以下项:
image=/boot/vmlinuz-2.4.18
label=linux240
root=/dev/hda2
其中root=/dev/hda2一行要根据需要自行加以修改。
#/sbin/lilo -v
#shutdown -r now
用Grub启动管理器,则添加如下几项即可。
title Red Hat Linux (2.4.18)
root (hd0,0)
kernel /vmlinuz-2.4.18 ro root=/dev/hda2
装过显卡驱动,比如Nvidia的话,你可以这样办
rpm -e NVIDIA_GLX_XXX(XXX为你的显卡驱动对应的版本号,比如我的是NVIDIA_GLX-1.0-3123)
rpm -e NVIDIA_kernel_XXXX(同上)
把以前安装的驱动删去。
rpmbuild --rebuild NVIDIA_kernel_XXXX,重新编译你的显卡驱动。编译好的放在/usr/src/redhat/RPMS/i386/下
然后安装就是了、、、
rpm -Uvh NVIDIA_kernel_XXXX.i386.rpm
rpm -Uvh NVIDIA_GLX_XXXX.i386.rpm
搞定,重起。
将与内核其它部分关系较远且不经常使用的部分功能代码编译成为可加载模块,有利于减小内核的长度,减小内核消耗的内存,简化该功能相应的环境改变时对内核的影响;不需要的功能就不要选;与内核关心紧密而且经常使用的部分功能代码直接编译到内核中。
核心在保护空间运行,但模块并不是。这么说,并不经常使用我的设备,把它编译成只支持ext2,ide和elf。而一直使用的网卡,把其它的编译成模块:如a.out, java, floppy, iso9960, msdos, minix, vfat,smb,nfs,smcultra(ethernetcard),serial,printer,sound,ppp,等等。它们许多只是在这或那用上那么几分钟。在需要用的时候才用insmod这个指令加入核心,不用的时候也能rmmod把它从核心移除,或是用lsmod察看目前所载入的模块。这里面有三项:
#Set version information on all module symbols------通常,我们更新核心版本之后,模块耍重新的编译。这个选项使您不必更新编译模块而能使用以前的模块。可以不选它。但如果您选y,则按照它的说明,您必须有genksyms这个程序(可用whereis指令查看有无此程序)。
#Kernel module loader------让内核在启动时有自己装入必需模块的能力,建议选上。注意:在开机就会mount 上来的partition 的FS 、device driver 记得要compiler 进kernel,不能把它弄成modules。请不要夸张到为了完全模组化而忘了把ext2fs和IDE dirver compiler 进kernel 里。
#System V IPC 如果将来想编译dosemu(DOS模拟器),则这个选项一定要选,它是一个让各个程序(process)同步且能彼此交换数据的函数库和一些系统的调用,没它,很多的程序将会无法执行。
#Sysctl support------除非你的内存少的可怜,否则你应该启动这个功能,启用该选项后内核会大8K,但能让你直接改变内核的参数而不必重新开机。
#Kernel support for A.OUT binaries ------a.out的执行文件是比较古老的可执行码,用在比较早期的UNIX系统上。Linux最初也是使用这种码来执行程序,一直到ELF格式的可执行码出来后,有愈来俞多的程序码随着ELF格式的优点而变成了ELF的可执码。将来势必完全取代a.out格式的可执行码。但目前由于沿有许多的程序还没有取代过来,所以只好选择Y,等将来有一天,全部的程序都变成了ELF的天下时,那时再disable掉。
#Kernel support for Linux/Intel ELF binaries ------由上所述,这个当然y哩,因为目前gcc-2.7.0以上的都有支持ELF了,如果没有选择这一项,可能会使用相当多的程序因此无法执行。为大多机器制作一张紧急启动盘,最好在386下编译,而386并不能运行在Pentium下编译的核心。不能同时把 a.out 和ELF 支援编译成modules,否则当你为了能够使用insmod 而用insmod 来载入 a.out/ELF modules 时会有Catch/22 状况发生。如果你的系统主要是ELF 而你偶尔会需要用到a.out,你可以把 a.out 支援编译为modules,否则你最好把它直接放入kernel 之中。如果你还没进入ELF 的世纪,在
compiler kernel 时可以直接把ELF 支援去掉。
##Advanced Power Management BIOS support------高级电源管理BIOS支持。这通常是用在笔记本电脑上的东西,如果您有APM的BIOS,支持省电的设备的(有电池的那种),那么您可以选上这项,一般人这一项是选n,以避免一些可能会发生的问题。后有8个选项。
#CMD640 chipset bugfix/support------ 很多486和586的主机板都是用CMD640的芯片,它是Neptune芯片和SIS芯片的结合。不过,这种芯片有它的缺点,在许多的情形下,它会造成数据的流失和错误。如果您选了这一项,则Linux核心会为您小心的寻找这些错误并修正它。而且,它会打开对二个IDE界面的支持。不过,在它的说明文件中提到,如果您的主机板没有PCI界面只有VESA总线界面却希望有这项功能的话,则您必须传一些参数给核心(ideo=cmd640_vlb)。如果不确定上面所说的,选择Y。
#CMD640 enhanced support------一般来说,对于硬盘的存取速度来说,有所谓的PIO MODES值设定,现今的IDE界面及BIOS应该都能侦测到正确的硬盘PIO MODE值了。此值愈高表示硬盘的存取的速度愈快。可是,有些主机板的B10S还是旧式的,不能抓到比较高的PIO MODE值,如此一来,便不能发挥整台硬盘的效率。这个设定告诉读者说:如果您的IDE界面是CMD640为基础*1*7和586的主机板都在使用它。可以查查主机板的说明书或是IDE 接口卡的说明书做确定。文件上提到,选择这个将会降低一些速度,但是数据能百分之百的正确。
#Intel 82371 PIIX(Triton I/II)DMA support------对于586的Pentium电脑来说,有相当多的主机板都是用Intel的Triton芯片,使用这种芯片的最大好处是支持直接内存存取DMA,而节省您的CPU时间。必须您的硬盘和主机板有同时支持DMA的IDE界面的芯片,直接与它们做沟通而节省了大量的CPU时间。
#Loopback device support------大部分的人这一个选项都选N,因为没有必要。但是如果你要mount iso文件的话,你得选上Y。这个选项的意思是说,可以将一个文件挂成一个文件系统。如果要烧光盘片的,那么您很有可能在把一个文件烧进去之前,看看这个文件是否符合IS09660的文件系统的内容,是否符合您的需求。而且,可以对这个文件系统加以保护。不过,如果您想做到这点的话,您必须有最新的mount程序,版本是在2.5X版以上的。而且如果您希望对这个文件系统加上保护,则您必须有des.1.tar.gz这个程序。注意:此处与网络无关。
#Multlnle devices driver support------这个选项可以让把整个硬盘分区变成一个单独的区块设备,您必须有md035.tgz这个程序。而且在做这件事之前请将您的硬盘备份,因为它尚在测试阶段。一般人对这个选项是选N。
#Packet socket ------ 选择“Y”,一些应用程序将使用Packet协议直接同网络设备通讯,而不通过内核中的其它中介协议。
#Kernel/User Network link driver------这个是在测试中的程序码,一般人不需要用。依它的说明,它允许在核心、模块或程序间的某些部分间,彼此做双向的沟通。如果想使用arpd,则这个程序码就要加进核心里。
#TCP/IP networking------选择“Y”,内核将支持TCP/IP协议。这个选项无论如何请您选择Y,即使没有网络卡,或是没有连到网络上的设备,在linux上仍有所谓的lookback设备而且有些程序需要这个选项。在说明文件中提到,如果您没有打开这个设定,则X-window system可能会有问题(回为它也需要TCP/IP)。
#Network firewalls------选择“Y”,内核将支持防火墙。等一下有个IP firewalling的选项也要选y;但下面的forwarding/gatewaying要选n,如此才能让它正常动作。大部分的人这个选项选N。
#Network alasing------允许有多个IP地址。
#IP:forwarding/gatewaying ------ 和Firewall相反,这个选项是用来疏导网络的。一个gateway(也就是router),要帮忙疏导两个网络间的数据传送。这台机器必须要有两张网络卡,连接两个个同的网络,做疏导网络的工作。如果选择了这个选项,则表示想让这台负责做router。那么,就必须有两张网络卡了。另外有一种情形是,如果您有MODEM(通过串列界面以SLIP和PPP协议)和网络卡,并用它们来连上Internet。这时您也一样可以执行IP-routing服务,也需把这个选项打开。
#IP:multicasting------所谓的multicasting是群组广播,它是用在视频会议上的协议,如果想送一个网络封包(网络的数据),同样的一份数据将送往十部机器上。您可以连续送十次给十台机器(点对点的传送),也可以同时送一次,然后让十台机器同时接收到。当然后者比前者好,由于视频会议要求是最好每个人都能同时收到同一份信息,所以如果您有类似的需要,这个选项就要打开。同时您还必须去找相关的软件。
#IP:accounting------如果您打开这个选项,您就可以在/proc/net下看到系统对于整个网络状况的纪录。所以一般的人这个选项都是选y。而且,如果您设计把这台Linux机器当router用,那么读者可以因为这个选项而获得许多有关于网络lP控制的信息和它的输送情形。
#IP:aliasing support------经由这个设定,您可以拥有数个IP地址。假设您已经有一个lP地址了,您还想再加入其他的IP地址,这时,您可以依下面的程序来做。
在shell下键入:
#ifconfig eth0:0其他的IP地址(这个IP地址不能与其他机器重复)
# route-add-host其他的IP地址dev eth0:0
#Probe a11 LUNs on each SCSI device------通常这个选项大部分的人都不会选。我们举个例子来说,如果您的SCSI光驱是那种多片装的,就是一台光驱,但可以一次放好几片光盘片的那种。这种我们叫做Lun。
#Dummy net driver support------如果有SLIP或PPP的传输协议,那么要把这一项打开。因为一来它不会让您的Linux核心增大。二来,对某些应用程序来说,它可以让我们模拟出来的TCP/IP环境更像TCP/IP环境。如果您没有SLIP或PPP协议,就不用打开了。
#EQL(serial line load balancing)support------如果有两个MODEM,两条电话线,而且用SLIP或PPP协议,可以用这个Driver以便让您的MODEM 有两倍的速度。当然,在网络的另一端也要有同样的设备。
#PLIP(parallel port)support------依字面上看,它是一种利用打印机的接口(平行接口),然后利用点对点来模拟TCP/IP的环境。它和SLIP/PPP 全都属于点对点通讯,您可以把两台电脑利用打印机的连接接口串联起来,然后,加入此通讯协议。如此一来,这两部电脑就等于一个小小的网络了。不过,如果电脑有提供打印服务的话,这个选项最好不要打开,不然可能会有问题(因为都是用平行接口)。
#PPP(point-to-point)support------点对点协议,近年来,PPP协议已经慢慢的取代SLIP的规定了,原因是PPP协议可以获取相同的IP地址,而SLIP 则一直在改变IP地址,在许多的方面,PPP都胜过SLIP协议。
#SLIP(serial line)support------这是MODEM族常用的一种通讯协议,必须通过一台Server(叫ISP)获取一个IP地址,然后利用这个IP地址,可以模拟以太网络,使用有关TCP/IP的程序。
# EISA,VLB,PCI and on board controllers ------选择网络卡,包括直接附在主机板上的那种。如果选择y,则底下会列出其他的网络卡让您做选择,这些卡对于一般人来说很少会去用到。所以大部分的人这项是选N的。
#Pocket and portable adaptors------通常用在可携式的电脑上,这类型的网络卡(口袋型的),由于体积很小在安装和取下方面很方便,因此笔记本相关电脑上便常常采用这种网络卡。
#Token Ring driver support------Token Ring是IBM电脑上的网络。它叫令牌环网络,和以太网络是很类似的东西。如果您希望使用的Token Ring网络卡以便连接到这种网络,那么选Y,一般人都选N。
12. Amateur Radio support 业余无线广播
可以用来启动无线网络的基本支持,目前的无线网络可以通过公众频率传输数据,如果你有此类设备就可以启用,具体请参考AX25和HAM HOWTO 文档。
#Standard/generic (dumb) serial support-------选择“y”,内核将支持串行口。标准序列接口的选定。如果您是用serial的鼠标(大部分的人都是用这个),或是MODEM的话,则这一项一定要选。大部分的人这一项都选y。
#Support for console on serial port------选择“y”,内核可将一个串行口用作系统控制台。
##I2C support------I2C是Philips极力推动的微控制应用中使用的低速串行总线协议。如果你要选择下面的Video For Linux,该项必选。
#Mice鼠标。现在可以支持总线、串口、PS/2、C&T 82C710 mouse port、PC110 digitizer pad------根据需要选择。非串行的鼠标,支持象PS/2。看一看你鼠标的键。许多双键鼠标是PS/2,即使它们的连接看起来象串行的.。
#Digiboard PC/Xx Support------这是一张叫Digiboard PC/XX卡的driver,这种卡上面有很多个serial port的插槽(一般来说只有两个),可以用来连接很多个MODEM,在民间的BBS站很常用到,如果您有这样的东西,您必须选这项为y。有兴趣的读者可以读读Documentation/digiboard.txt
的内容。
#Cyclades async mux support------同上,这也是一种能接很多个serial port插槽的卡的驱动程序。
#Stallion multlport serial support------同上,这也是其中一种卡。
#SDL RISCom/8 card support------这也是其中的一个支持muti-serial卡的driver。
#Parallel printer support------有打印机的或是使用到并行接口的人这一项一定要选。除非是用serial的打印机。还有如果您有使用PLIP,那么这项也请选上。
#Mouse support------大部分的人这一项并不用选y。因为大部分的人是用serial的鼠标,除非有些人是用一种附有接口卡的鼠标,这时这个选项才要选上,如果您选y,则底下会列出您的BUS鼠标所用的接口卡。
#support for user misc device modules------除非您有所谓的触摸式显示器或是光笔等东西,否则这一项选n。
#Watchdog Timer support------一般人不需要这个选项,如果您选上这个选项,则您要用mknod在/dev下建一个watchdog的文件。请看Documentation/watchlog.txt的解释。
#Enhanced Real Time Clock Support------关于系统上Clock的东西,您必须自己用mknod在/dev/下建立一个文件叫rtc。如此一来,在/proc/下将可以看到rtc的信息。有关于rtc的内容请看Documentation/rtc.txt。一般是选n。
#Kernel automounter support------选择“y”,内核将提供对automounter的支持,使系统在启动时自动mount远程文件系统。
#Standard(minix )------新的套件不再建立minix 文件系统,而且很多人不使用它,但是把它配置在核心里仍然是个好主意。某些″rescu e-disk ″ 程序会用到它,而且仍然有许多磁片可能用minix 文件系统,因为minix 文件系统对于处理磁片方面是最好的。Minix文件系统通常用在磁盘上,有时会用到它。
#Extended fs ------ 这是扩充文件系统的第一版,现在已经不再使用。
#Second extented fs------这是现在新发行的套件所广泛采用的文件系统,你可能会有其中一种。这个是linux文件系统,请务必选y。
#xiafs filesystem-----这个文件系统曾经一度很普遍,但是在写这份文件时,我已经不知道有任何人在使用它了。
#umsdos:UNIX like fs on top of std MSDOS FAT fs ------ 如果把Linux装进DOS的一个目录下那么您则要选择这一项。不建议这样做,因为如此一来,就不能看到长文件名了。而且效率上,井不是很好。
#ums-dos------相当slick 的文件系统,它能使MS-DOS 文件系统拥有更多的特性,像是长档名等等。这对那些不使用MS-DOS 的人(像我)并不是很有用。
#System V and Coherent------这是为System V 以及Coherent 的分割区而设的。如果希望支持System V或Xenix的相关UNIX系统的FS并读取它们的数据,那么才有必要选这个,否则一般来说这个选项是选n的。
#Mandatory lock support------有些很特殊的database应用软件会用到它,一般人这个选项是选n。而且,如果选y的话,必须有最新版的NFS软件,
最新版的samba软件等。
#NCP filesystem support------NCP是一种网络的通讯协议,用在跑IPX协议上,它可以利用IPX协议让两台电脑之间的文件共享,并做沟通。如果您想挂上有关Novell的Netware文件系统,那么这个选项就选上去吧。
#/dev/dsp and/dev/audio support------ 这个选项通常是必要的。因此大部分的人选y,如果没有这选项,则很多的游戏将没有声音效果。
#MIDI interface support------支持MIDI界面。
#I/O base for SB Check from manual of the card------声卡的I/O地址。括号是常用的选项。
#Sound Blaster IRQ Check from manual of the card-----声卡的IRQ,通常是1或5。
#Sound Blaster DMA 0,1 for 3-----声卡的DMA,通常是1。
#Sound Blaster 16 bit DMA 5,6 or 7(usel for 8 bitcards)(SB.DMA2)-----5
##Additional low level drivers------如有其他种类的声卡,则这项要选上去,以下会列出其他的声卡供选择。
kernel profiling support(v1.3)
这个选项可以开启内核做效率统计的功能,并且会提供其他在为
系统侦错时有用的信息。这些功能会需要付出一些代价并造成系
统执行得较为缓慢,除非你正在研究内核的某个问题,否则你应
该回答N。
21. Kernel hacking安全模式
通俗的说,这是windows安全模式,找不到明确解释,就引用这个说法。>这是从Linus的README里摘录的:″kernel hacking ″配置的细节通常会产生一个更大或是更慢的核心(或者是又大又慢),而且可能因为将一些常式配置成很活跃地去尝试中断一些不良的程序码以便找出核心里的问题,而使得核心变得比较不稳定。所以要产生一个核心″产品″的话,你在这
#shutdown -r now
不建议使用热启动或ctrl+Alt+del键。在一些情况下,文件系统不完全卸栽会损坏打开的文件。如果你没看见启动提示,你可以试用shift或ctrl键,这样启动提示就出现了。一旦出现,按tab看核心标签。输入标签和可选参数启动。在机器重启后出现LILO时按TAB键,输入linux2.6.5,新内核发挥作用了。
以太网的默认值是PCI的以太网卡,对ne2000的默认支持方式是build-in,即没有设成模块,所以如果你的网卡是ISA的,那么务必要选择其中的other ISA card,最好把PCI intel pro选项去掉,另外把ne2000 support选项改成module。
Linux 内核修改与编译图文教程 1
1、实验目的 针对Ubuntu10.04中,通过下载新的内核版本,并且修改新版本内核中的系统调用看,然后,在其系统中编译,加载新内核。 2、任务概述 2.1 下载新内核 https://www.sodocs.net/doc/b710844182.html,/ 2.2 修改新内核系统调用 添加新的系统调用函数,用来判断输入数据的奇偶性。 2.3 进行新内核编译 通过修改新版内核后,进行加载编译。最后通过编写测试程序进行测试 3、实验步骤 3.1 准备工作 查看系统先前内核版本: (终端下)使用命令:uname -r 2
3.2 下载最新内核 我这里使用的内核版本是 3.3 解压新版内核 将新版内核复制到“/usr/src”目录下 在终端下用命令:cd /usr/src进入到该文件目录 解压内核:linux-2.6.36.tar.bz2,在终端进入cd /usr/src目录输入一下命令: bzip2 -d linux-2.6.36.tar.bz2 tar -xvf linux-2.6.36.tar 文件将解压到/usr/src/linux目录中 3
使用命令: ln -s linux-2.6.36 linux 在终端下输入一下命令: sudo apt-get install build-essential kernel-package libncurses5-dev fakeroot sudo aptitude install libqt3-headers libqt3-mt-dev libqt3-compat-headers libqt3-mt 4
编译在arm板上运行的内核模块 前两天被这个事情搞晕了,看视频的时候感觉编译一个内核模块很简单的, 就是修改makefile 的两个地方,但是自己一做就出现问题了,因为我是自己自 学的,身边没有可以指导的人,所以很多都要靠自己摸索了,我自己编译的时 候出现很多警告信息和错误,提示找不到头文件,还有一些看不懂的信息,到 处找资料,但是都没有说清楚,看了很久也没看出什么对自己有用的东西,看 的头晕,准备放弃了,今天在学习的时候又去看结果看到一篇博文,才焕然大 悟,makefile 里面要改的源代码路径是移植到arm 板上的linux 源代码,才突然 想起来,我自己改错了,就是要把路径指上你开发板上运行的linux 内核源代 码的顶层路径,我是用的通过nfs 启动系统的,是按照国嵌的视频一步步做的, 所以我的路径在我的nfs 所在的路径。这些问题对于一些学了很久的人来说可 能很低级,但是对于初学者来说可能碰到后半天搞不好,所以写下来供参考。 。。下面是我自己找的一个小实验: #include #include MODULE_LICENSE(“GPL”);MODULE_AUTHOR(“David Xie”);MODULE_DESCRIPTION(“Hello World Module”);MODULE_ALIAS(“a simplest module”);static int __init hello_init(){ printk(KERN_EMERG”Hello World!\n”);return 0;}static void __exit hello_exit(){ printk(KERN_EMERG “Goodbye Cruel World!\n”);}module_init(hello_init);module_exit(hello_exit);第一步是编译,首先要做的是设置交叉编译器,修改makefile,打开makefile 文件, 如下:ifneq ($(KERNELRELEASE),)obj-m := hello.oelseKDIR := /forlinux/kernel/linux-2.6.28all:make -C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=arm-linux-clean:rm -f *.ko *.o *.mod.o *.mod.c *.symversendif 首先需要指定kernel 的源代码路径:我的是KDIR
Linux学习总结报告 一、嵌入系统应用前景 Linux的应用领域不断扩展,从最早的Web、FTP、邮件服务开始,逐步扩张到个人桌面应用、网络安全、电子商务、远程教育、集群计算、网络计算、嵌入式系统等各个领域。更是吸引了想IBM、SUN、惠普这样的IT巨头积极参与到Linux应用的开发和推广中来。Linux之前主要应用于服务器及计算集群,未来应该该在个人计算机上有所发展,优化目前的图形化界面,以及加快桌应用的开发,以及在智能终端的应用。首先,微软不会甘心让出市场让Linux来壮大,所以Linux必须发挥其本身的优势,赢得更多的用户,已达到其能不断的开发和更新。再者,由于开源软件的商业模式及技术模式没有前例可循,注定了Linux的前路不会是一帆风顺的。我认为,当前Linux的发展主要面临以下几个问题:一是Linux企业众多但未形成规模,也还没有找到有效的赢利途径,并且版本繁多,互不兼容,削弱了竞争力;二是随着逐渐流行而引发的安全问题;三是人才不足的隐忧。Linux的最大优势在于它是开源的,也即开放的。但出于各自的商业利益,各企业分别在其发行的版本上加载各种不同的功能,彼此之间不兼容。这些不同的版本意味着厂商和用户测试的工作量加大,意味着硬件厂商需要为每一个版本的Linux提供驱动程序……这种情形目前正在削弱整个Linux的市场竞争力。安全方面,随着Linux越来越受欢迎,越来越多针对Linux的蠕虫、病毒和恶意软件也会层出不穷。虽然开放源代码社区都在及时响应并修补Linux上存在的漏洞,但Linux的非集中管理本质特性使Linux升级的发布和审查变得非常困难。一旦Linux 由于安全问题给用户特别是企业用户造成损失,其不良影响及对用户信心的打击是巨大的。当前制约着Linux发展的还有一个关键因素,那就是人才。相比前几年,国内懂Linux的技术人员已经多了很多。但是作为一个快速发展的产业,人才的广度和深度都远远不够。能够对内核有所研究的人才少之又少,多数都是一知半解。有限的人才又都集中在Linux厂商内,系统集成商、代理商、应用软件开发商等拥有的人才更少,制约着完整的Linux产业链的形成 二、研究方向 嵌入式的发展方向有很多,门槛高低不一样。具体来说: 1.单片机:工控程序(不跑os)--入门容易,无外乎就是掌握汇编和c,能够根据datasheet来写,发展前景一般,也没有太大的技术难度,除非你在算法上面有优
如何自行编译一个Linux内核的详细资料概述 曾经有一段时间,升级Linux 内核让很多用户打心里有所畏惧。在那个时候,升级内核包含了很多步骤,也需要很多时间。现在,内核的安装可以轻易地通过像 apt 这样的包管理器来处理。通过添加特定的仓库,你能很轻易地安装实验版本的或者指定版本的内核(比如针对音频产品的实时内核)。 考虑一下,既然升级内核如此容易,为什么你不愿意自行编译一个呢?这里列举一些可能的原因: 你想要简单了解编译内核的过程 你需要启用或者禁用内核中特定的选项,因为它们没有出现在标准选项里 你想要启用标准内核中可能没有添加的硬件支持 你使用的发行版需要你编译内核 你是一个学生,而编译内核是你的任务 不管出于什么原因,懂得如何编译内核是非常有用的,而且可以被视作一个通行权。当我第一次编译一个新的Linux 内核(那是很久以前了),然后尝试从它启动,我从中(系统马上就崩溃了,然后不断地尝试和失败)感受到一种特定的兴奋。 既然这样,让我们来实验一下编译内核的过程。我将使用Ubuntu 16.04 Server 来进行演示。在运行了一次常规的 sudo apt upgrade 之后,当前安装的内核版本是 4.4.0-121。我想要升级内核版本到 4.17,让我们小心地开始吧。 有一个警告:强烈建议你在虚拟机里实验这个过程。基于虚拟机,你总能创建一个快照,然后轻松地从任何问题中回退出来。不要在产品机器上使用这种方式升级内核,除非你知道你在做什么。 下载内核 我们要做的第一件事是下载内核源码。在 Kernel 找到你要下载的所需内核的URL。找到URL 之后,使用如下命令(我以 4.17 RC2 内核为例)来下载源码文件: wget https://git.kernel/torvalds/t/linux-4.17-rc2.tar.gz
如何获取Linux内核源代码 下载Linux内核当然要去官方网站了,网站提供了两种文件下载,一种是完整的Linux 内核,另一种是内核增量补丁,它们都是tar归档压缩包。除非你有特别的原因需要使用旧版本的Linux内核,否则你应该总是升级到最新版本。 使用Git 由Linus领头的内核开发队伍从几年前就开始使用Git版本控制系统管理Linux内核了(参考阅读:什么是Git?),而Git项目本身也是由Linus创建的,它和传统的CVS不一样,Git是分布式的,因此它的用法和工作流程很多开发人员可能会感到很陌生,但我强烈建议使用Git下载和管理Linux内核源代码。 你可以使用下面的Git命令获取Linus内核代码树的最新“推送”版本: $ git clone git://https://www.sodocs.net/doc/b710844182.html,/pub/scm/linux/kernel/git/torvalds/linux-2.6.git 然后使用下面的命令将你的代码树与Linus的代码树最新状态同步: $ git pull 安装内核源代码 内核包有GNU zip(gzip)和bzip2格式。Bzip2是默认和首选格式,因为它的压缩比通常比gzip更好,bzip2格式的Linux内核包一般采用linux-x.y.z.tar.bz2形式的文件名,这里的x.y.z是内核源代码的具体版本号,下载到源代码包后,解压和抽取就很简单了,如果你下载的是bzip2包,运行: $ tar xvjf linux-x.y.z.tar.bz2 如果你下载的是gzip包,则运行: $ tar xvzf linux-x.y.z.tar.gz 无论执行上面哪一个命令,最后都会将源代码解压和抽取到linux-x.y.z目录下,如果你使用Git下载和管理内核源代码,你不需要下载tar包,只需要运行git clone命令,它就会自动下载和解压。 内核源代码通常都会安装到/usr/src/linux下,但在开发的时候最好不要使用这个源代码树,因为针对你的C库编译的内核版本通常也链接到这里的。 应用补丁
1软件通常分为系统软件、应用软件、支撑软件 2 操作系统是用户与计算机硬件之间的界面,它是控制、管理计算机系统内各种硬件和软件资源,有效的组织多道程序运行的系统软件。 3 Linux系统吧计算机系统中的硬件资源和软件资源有机地结合在一起,从而提供丰富的功能,包括:控制硬件、管理资源、提供用户接口,处理输入/输出、监视系统、通信。 4 Linux的优点:1与UNIX系统兼容 2自由软件和源码公开 3 性能高和安全性强 4 便于制定和再开发 5 互操作性高 5 Linux 有俩种版本:核心(Kernel)版本和发行(Distribution)版本 6 Linux核心版本根据约定,若版本号为奇数,则表示该版本加入新内容,但不一定稳定,为测试版本。若版本号为偶数,则表示这是一个可以使用的稳定版本 7 安装红旗Linux需要俩个必备的分区,即一个根文件系统分区(类型为ext3,ext2或reiserfs)和一个交换分区(类型为swap) 8 Linux操作系统支持以下文件类型:普通文件、目录文件、设备文件和符号链接文件。 9 设备文件除了在文件I节点中存放属性信息外,他们不包含任何属性信息外,它不包含任何数据,系统利用它们来标记各个设备驱动器 10 符号链接文件时一种特殊文件,提供对其他文件的参照 11 cp命令将源文件或目录复制到目标文件或目录中 12 rm命令删除文件或目录 13 mv命令对文件或目录重新命令,或者将文件从一个目录移到另一个目录中。 14 wc命令统计指定文件的字节数、字数、行数,并将统计结果显示出来 15 绝对路径名和相对路径名的联系与区别 联系:当为命令指定文件路径名是,要指定俩种路径中一种 区别:绝对路径名总是以斜线字符(/)开头 相对路径不能以斜线字符开头 16 硬链接:建立硬链接时,在别的目录或本目录中增加目标文件的一个目录项,这样的一个文件就登记在多个目录中 17 符号链接(软链接)是将一个路径名链接到一个文件,这些文件是一种特别类型的文件 18 软硬链接的区别:1软链接建立了一个新文件而硬链接没有建立新文件 2 软链接没有硬链接的限制,可以对目录文件建立软链接,也可以在不同文件系统之间建立软链接 19 chgrp命令改变文件或目录所属的用户组 20 chown命令改变某个文件或目录的所有者和所属的组 21 ps命令查看当前系统中运行的进程信息 22 kill命令用来终止一个进程的运行 23 vi编辑器三中工作方式:命令方式、插入方式、ex转义方式 24 退出vi的命令 :wq :ZZ :x :q! 四种 25 执行shell脚本的方式: 1 输入定向到shell脚本 2 以脚本名作为bash 参数 3 将shell脚本的权限设置为可执行 26 名称补全的方法是输入目录或文件名的开头部分,然后按Tab键 27 通配符用于模式匹配(四种 * ? [字符组] !) 27 由双引号括起来的字符除($ ‘ \)均作为普通字符对待
实验二 嵌入式Linux系统内核的配置、编译和烧写 1.实验目的 1)掌握交叉编译的基本概念; 2)掌握配置和编译嵌入式Linux操作系统内核的方法; 3)掌握嵌入式系统的基本架构。 2.实验环境 1)装有Windows系统的计算机; 2)计算机上装有Linux虚拟机软件; 3)嵌入式系统实验箱及相关软硬件(各种线缆、交叉编译工具链等等)。 3.预备知识 1)嵌入式Linux内核的配置和裁剪方法; 2)交叉编译的基本概念及编译嵌入式Linux内核的方法; 3)嵌入式系统的基本架构。 4.实验内容和步骤 4.1 内核的配置和编译——配置内核的MMC支持 1)由于建立交叉编译器的过程很复杂,且涉及汇编等复杂的指令,在这里 我们提供一个制作好的编译器。建立好交叉编译器之后,我们需要完成 内核的编译,首先我们要有一个完整的Linux内核源文件包,目前流行 的源代码版本有Linux 2.4和Linux 2.6内核,我们使用的是Linux 2.6内核; 2)实验步骤: [1]以root用户登录Linux虚拟机,建立一个自己的工作路径(如用命令 “mkdir ‐p /home/user/build”建立工作路径,以下均采用工作路径 /home/user/build),然后将“cross‐3.3.2.tar.bz2、dma‐linux‐2.6.9.tar.gz、 dma‐rootfs.tar.gz”拷贝到工作路径中(利用Windows与虚拟机Linux 之间的共享目录作为中转),并进入工作目录; [2]解压cross‐3.3.2.tar.bz2到当前路径:“tar ‐jxvf cross‐3.3.2.tar.bz2”; [3]解压完成后,把刚刚解压后在当前路径下生成的“3.3.2”文件夹移 动到“/usr/local/arm/”路径下,如果在“/usr/local/”目录下没有“arm” 文件夹,用户创建即可; [4]解压“dma‐linux‐2.6.9.tar.gz”到当前路径下:
操作系统实验报告 姓名:学号: 一、实验题目 1.编译linux内核 2.使用autoconf和automake工具为project工程自动生成Makefile,并测试 3.在内核中添加一个模块 二、实验目的 1.了解一些命令提示符,也里了解一些linux系统的操作。 2.练习使用autoconf和automake工具自动生成Makefile,使同学们了解Makefile的生成原理,熟悉linux编程开发环境 三、实验要求 1使用静态库编译链接swap.c,同时使用动态库编译链接myadd.c。可运行程序生成在src/main目录下。 2要求独立完成,按时提交 四、设计思路和流程图(如:包括主要数据结构及其说明、测试数据的设计及测试结果分析) 1.Makefile的流程图: 2.内核的编译基本操作 1.在ubuntu环境下获取内核源码 2.解压内核源码用命令符:tar xvf linux- 3.18.12.tar.xz 3.配置内核特性:make allnoconfig 4.编译内核:make 5.安装内核:make install
6.测试:cat/boot/grub/grub.conf 7.重启系统:sudo reboot,看是否成功的安装上了内核 8.详情及结构见附录 3.生成makefile文件: 1.用老师给的projec里的main.c函数。 2.需要使用automake和autoconf两个工具,所以用命令符:sudo apt-get install autoconf 进行安装。 3.进入主函数所在目录执行命令:autoscan,这时会在目录下生成两个文件 autoscan.log和configure.scan,将configure.Scan改名为configure.ac,同时用gedit打开,打开后文件修改后的如下: # -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ([2.69]) AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS]) AC_CONFIG_SRCDIR([main.c]) AC_CONFIG_HEADERS([config.h]) AM_INIT_AUTOMAKE(main,1.0) # Checks for programs. AC_PROG_CC # Checks for libraries. # Checks for header files. # Checks for typedefs, structures, and compiler characteristics. # Checks for library functions. AC_OUTPUT(Makefile) 4.新建Makefile文件,如下: AUTOMAKE_OPTIONS=foreign bin_PROGRAMS=main first_SOURCES=main.c 5.运行命令aclocal 命令成功之后,在目录下会产生aclocal.m4和autom4te.cache两个文件。 6.运行命令autoheader 命令成功之后,会在目录下产生config.h.in这个新文件。 7.运行命令autoconf 命令成功之后,会在目录下产生configure这个新文件。 8.运行命令automake --add-missing输出结果为: Configure.ac:11:installing./compile’ Configure.ac:8:installing ‘.install-sh’ Configure.ac:8:installing ‘./missing’ Makefile.am:installing ‘./decomp’ 9. 命令成功之后,会在目录下产生depcomp,install-sh和missing这三个新文件和执行下一步的Makefile.in文件。 10.运行命令./configure就可以自动生成Makefile。 4.添加内核模块
linux心得体会 篇一:关于Linux学习的心得体会 关于Linux学习的心得体会 本学期对于Linux系统的学习,让我对Linux有了一定的了解。我知道了Linux只是个内核。现在的Linux操作系统,都是用这么一个内核,加上其它的应用程序构成的。Linux最大的特点就是其开源性,这一点是十分难得的,这也是它能够存在到现在的原因之一,使其在金融、安全等部门有很重要的应用。 学习Linux,首先我们应该从基础开始学起。对Linux 操作系统的功能、版本、特点,以及Linux系统安装和图形环境有较全面的了解。 Linux命令是必须学习的。虽然Linux 桌面应用发展很快,但是命令在Linux中依然有很强的生命力。Linux是一个命令行组成的操作系统,精髓在命令行,学习如何在安全的环境中执行系统命令,包括有关文件、目录、文件系统、进程等概念,如何使用相应的命令对文件、目录、进程等进行管理,了解遇到问题时,如何找到帮助信息等。Linux常用命令,有echo 命令、date命令、passwd命令、file命令、ls命令、touch命令等。 要明白学好Linux不是一件一蹴而就的事,一定要能坚持使用它,特别是在学习初期。要增加自己的Linux技能,只有通过实践来实现。只要多动手,就一定会有收获。遇到
问题时要自己去寻找答案,在寻找答案的过程中,会学到更多知识。 应该说目前我们对于Linux的学习只是入门而已,学习Linux是一个长期的过程,很耗时间。作为电子信息工程专业的学生,对我们来说,Linux将来主要应用于嵌入式Linux 系统的开发,这非一日之功,我们还需要不断深入地学习它。 最后,衷心感谢唐磊老师一学期来的辛苦教学,唐老师幽默风趣的教学方式给我们的课堂带来很多欢乐。老师辛苦了! 篇二:Linux心得体会 《Linux操作系统》学习心得体会 姓名:杜昕 学号:XX441789 班级:计科普1004班 一、摘要 Linux操作系统这个名词记得在很早以前就听过,但当时并不知道具体是什么样的操作系统,只知道是一个与嵌入式密切相关的操作系统。因为我是学习嵌入式方向的,这学期就选修了这门专业任选课。为了更好的学习这门课程,我不仅课上认真听讲,课下也努力学习,为此还在自己的电脑上安装了Ubuntu系统。眼看这个学期的Linux课程已经告一段落了,我觉得有必要写一遍心得体会来总结一下这学期
linux、内核源码、内核编译与配置、内核模块开发、内核启动流程(转) linux是如何组成的? 答:linux是由用户空间和内核空间组成的 为什么要划分用户空间和内核空间? 答:有关CPU体系结构,各处理器可以有多种模式,而LInux这样的划分是考虑到系统的 安全性,比如X86可以有4种模式RING0~RING3 RING0特权模式给LINUX内核空间RING3给用户空间 linux内核是如何组成的? 答:linux内核由SCI(System Call Interface)系统调用接口、PM(Process Management)进程管理、MM(Memory Management)内存管理、Arch、 VFS(Virtual File Systerm)虚拟文件系统、NS(Network Stack)网络协议栈、DD(Device Drivers)设备驱动 linux 内核源代码 linux内核源代码是如何组成或目录结构? 答:arc目录存放一些与CPU体系结构相关的代码其中第个CPU子目录以分解boot,mm,kerner等子目录 block目录部分块设备驱动代码 crypto目录加密、压缩、CRC校验算法 documentation 内核文档 drivers 设备驱动 fs 存放各种文件系统的实现代码 include 内核所需要的头文件。与平台无关的头文件入在include/linux子目录下,与平台相关的头文件则放在相应的子目录中 init 内核初始化代码 ipc 进程间通信的实现代码 kernel Linux大多数关键的核心功能者是在这个目录实现(程序调度,进程控制,模块化) lib 库文件代码 mm 与平台无关的内存管理,与平台相关的放在相应的arch/CPU目录net 各种网络协议的实现代码,注意而不是驱动 samples 内核编程的范例 scripts 配置内核的脚本 security SElinux的模块 sound 音频设备的驱动程序 usr cpip命令实现程序 virt 内核虚拟机 内核配置与编译 一、清除 make clean 删除编译文件但保留配置文件
1.Code maturity level options 代码成熟等级。此处只有一项:prompt for development and/or incomplete code/drivers,如果你要试验现在仍处于实验阶段的功能,就必须把该项选择为Y了;否则可以把它选择为N。 2. Loadable module support 对模块的支持。这里面有三项: Enable loadable module support:除非你准备把所有需要的内容都编译到内核里面,否则该项应该是必选的。 Set version inFORMation on all module symbols:可以不选它。 Kernel module loader:让内核在启动时有自己装入必需模块的能力,建议选上。 3. Processor type and features CPU类型。有关的几个如下: Processor family:根据你自己的情况选择CPU类型。 High Memory Support:大容量内存的支持。可以支持到4G、64G,一般可以不选。 Math emulation:协处理器仿真。协处理器是在386时代的宠儿,现在早已不用了。 MTTR support:MTTR支持。可不选。 Symmetric multi-processing support:对称多处理支持。除非你富到有多个CPU,否则就不用选了。 4. General setup 这里是对最普通的一些属性进行设置。这部分内容非常多,一般使用缺省设置就可以了。下面介绍一下经常使用的一些选项: Networking support:网络支持。必须,没有网卡也建议你选上。 PCI support:PCI支持。如果使用了PCI的卡,当然必选。 PCI access mode:PCI存取模式。可供选择的有BIOS、Direct和Any,选Any 吧。 Support for hot-pluggabel devices:热插拔设备支持。支持的不是太好,可不选。 PCMCIA/CardBus support:PCMCIA/CardBus支持。有PCMCIA就必选了。System V IPC BSD Process Accounting Sysctl support:以上三项是有关进程处理/IPC调用的,主要就是System V 和BSD两种风格。如果你不是使用BSD,就按照缺省吧。 Power Management support:电源管理支持。 Advanced Power Management BIOS support:高级电源管理BIOS支持。
Linux内核配置编译和加载 Linux内核模块 Linux内核结构非常庞大,包含的组件也非常多,想要把我们需要的部分添加到内核中,有两个方法:直接编译进内核和模块机制 由于直接编译进内核有两个缺点,一是生成的内核过大,二是每次修改内核中功能,就必须重新编译内核,浪费时间。因此我们一般采用模块机制,模块本身不被编译进内核映像,只有在加载之后才会成为内核的一部分,方便了修改调试,节省了编译时间。 配置内核 (1)在drivers目录下创建hello目录存放hello.c源文件 (2)在hello目录下新建Makefile文件和Kconfig文件 Makefile文件内容: obj-y += hello.o //要将hello.c编译得到的hello.o连接进内核 Kconfig文件内容: 允许编译成模块,因此使用了tristate (3)在hello目录的上级目录的Kconfig文件中增加关于新源代码对应项目的编译配置选项 修改即driver目录下的Kconfig文件,添加
source "drivers/hello/Kconfig" //使hello目录下的Kconfig起作用 (4)在hello目录的上级目录的Makefile文件中增加对新源代码的编译条目 修改driver目录下的Makefile文件,添加 obj-$(CONFIG_HELLO_FOR_TEST) += hello/ //使能够被编译命令作用到 (5)命令行输入“make menuconfig”,找到driver device,选择select,发现test menu 已经在配置菜单界面显示出来 (6)选择test menu进入具体的配置,可以选择Y/N/M,这里我选择编译为M,即模块化 (7)保存退出后出现 (8)进入kernels目录中使用“ls -a”查看隐藏文件,发现多出.config隐藏文件,查看.config 文件
linux实习心得体会 为期一周的LINUX课程实训已经结束。现在我把这次收获丰富的实训自我总结一下。 我们的实训有许多的项目,首先由老师指导然后分小组独立完成老师布置的实验内容,实训的内容十分丰富详实,课程很实用。主要的大项有:认识网络设备与组网拓扑,交换机的配置,路由器交换机的配置命令,静态路由的配置。 现在首先回顾一下网络设备与组网拓扑这节有趣的课程。在这个实验中我们必须记住了解很多网络物理设备,例如:交换机,路由器等设备;还有很多通信接口,例如:AUI(粗同轴电缆连接接口),RJ45(双绞线以太网接口),SC接口(网络接口)。不同的设备之间的需要连接需要不同的线缆,必须使用正确的接法和线缆才能保证设备之间的正常通信。了解拓扑结构图是十分重要的课程,无论什么样的网络都是从最基本的拓扑结构中研究出来的,基本的网咯拓扑结构是十分重要的基础,很多网咯工程都需要设计拓扑结构图,了解拓扑结构图十分必要。在这节课程中我们知道了拓扑的广泛应用,无论是广域网还是局域网都是由拓扑结构设计出来的,这节课程我学到了很多有用的,例如:单位内的网络设计,家庭内的网络扩展,Modem和路由器的连接,双网介入局域网,计费管理拓扑结构,无线局域网拓扑结构,3G网络的拓扑结构等设计方案和案例。
网络中很重要的一个设备是交换机,这节实训课说实话比较枯燥,交换机的线路连接很容易,可是线路连接只是很轻松的一环,交换机的配置主要在于交换机的设置,其中有很多命令,从登陆,设置各种参数,运行指令,到最后退出,命令很多,需要十分用心的记忆。 在为期一周的LINUX课程实训中,我每天跟随老师一起做实验,与同学们一起观看PPT教程,对网络有了更深刻的认知,在自己做实验中不断与老师的教学内容相比较,尽力独立完成各种实验内容,虽然困难很多,但是实训很高兴。 本学期对于Linux系统的学习,让我对Linux有了一定的了解。我知道了Linux只是个内核。现在的Linux操作系统,都是用这么一个内核,加上其它的应用程序构成的。Linux最大的特点就是其开源性,这一点是十分难得的,这也是它能够存在到现在的原因之一,使其在金融、安全等部门有很重要的应用。 学习Linux,首先我们应该从基础开始学起。对Linux 操作系统的功能、版本、特点,以及Linux系统安装和图形环境有较全面的了解。 Linux命令是必须学习的。虽然Linux 桌面应用发展很快,但是命令在Linux中依然有很强的生命力。Linux是一个命令行组成的操作系统,精髓在命令行,学习如何在安全的环境中执行系统命令,包括有关文件、目录、文件系统、进程等概念,如何使用相应的命令对文件、目录、
配置和编译Linux内核 对内核进行正确配置后,才能进行编译。配置不当的内核,很有可能编译出错,或者不能正确运行。 1.1.1 快速配置内核 进入Linux内核源码数顶层目录,输入make menuconfig命令,可进入如图0.1所示的基于Ncurses的Linux内核配置主界面(注意:主机须安装ncurses相关库才能正确运行该命令并出现配置界面)。如果没有在Makefile中指定ARCH,则须在命令行中指定: $ make ARCH=arm menuconfig 图0.1基于Ncurses的Linux内核配置主界面 基于Ncurses的Linux内核配置界面不支持鼠标操作,必须用键盘操作。基本操作方法: ?通过键盘的方向键移动光标,选中的子菜单或者菜单项高亮; ?按TAB键实现光标在菜单区和功能区切换; ?子菜单或者选项高亮,将光标移功能区选中
配置完毕,将光标移动到配置界面末尾,选中“Save an Alternate Configuration File”后回车,保存当前内核配置,默认配置文件名为.config,如图0.2所示。 图0.2保存内核配置为.config文件 保存完毕,选择
<内核模块>实验报告 题目: 内核模块实验 1、实验目的 模块是Linux系统的一种特有机制,可用以动态扩展操作系统内核功能。编写实现某些特定功能的模块,将其作为内核的一部分在管态下运行。本实验通过内核模块编程在/porc文件系统中实现系统时钟的读操作接口。 2、实验内容 设计并构建一个在/proc文件系统中的内核模块clock,支持read()操作,read()返回值为一字符串,其中包块一个空格分开的两个子串,分别代表https://www.sodocs.net/doc/b710844182.html,_sec和https://www.sodocs.net/doc/b710844182.html,_usec。 3、实验原理 Linux模块是一些可以作为独立程序来编译的函数和数据类型的集合。在装载这些模块时,将它的代码链接到内核中。Linux模块可以在内核启动时装载,也可以在内核运行的过程中装载。如果在模块装载之前就调用了动态模块的一个函数,那么这次调用将会失败。如果这个模块已被加载,那么内核就可以使用系统调用,并将其传递到模块中的相应函数。 4、实验步骤 编写内核模块 文件中主要包含init_module(),cleanup_module(),proc_read_clock()三个函数。其中init_module(),cleanup_module()负责将模块从系统中加载或卸载,以及增加或删除模块在/proc中的入口。read_func()负责产生/proc/clock被读时的动作。 内核编译部分过程:
过程持续较长时间. ●编译内核模块Makefile文件 Makefile CC=gcc MODCFLAGS := -Wall -D__KERNEL__ -DMODULE –DLINUX clock.o :clock.c /usr/include/linux//version.h $(CC) $(MODCFLAGS) –c clock.c echo insmod clock.o to turn it on echo rmmod clock to turn ig off echo 编译完成之后生成clock.o模块文件。 注:此参考makefile文件包含错误, 于是从网上寻找相关教程自行修改得到合适的Makefile文件 ●内核模块源代码clock.c #define MODULE #define MODULE_VERSION “1.0” #define MODULE_NAME “clock” #include
七: 1.叙述的文件系统框架,并解释其中各个部分。 :启动相关的程序和配置 :常用的命令,这些命令通常为可执行文件或这些文件的链接 :通常为根用户准备的命令 :系统常用库 :用户安装的文件、库、开发库等 :根用户的用户文件 :普通用户的用户文件 :系统或程序的配置文件 :系统中服务器数据、日志 :系统状态信息 :系统设备 、:其他分区的挂载点(如磁盘分区、光盘或软件等) :临时文件 磁盘孤立扇区 2.叙述超级块、、和四大数据结构的作用和主要内容。 超级块: 作用:代表了整个文件系统,记录了文件系统的整体信息 内容:文件系统的状态、文件系统类型、块大小、区块数、索引节点数、脏标志、操作方法
(索引节点) 作用:代表了操作系统中的一个文件,无论该文件是否被打开,它都包含了文件操作的所有信息 内容:文件大小,设备标识符,用户标识符,用户组标识符,文件模式,扩展属性,文件读取或修改的时间戳,链接数量,指向存储该内容的磁盘区块的指针,文件分类等等。 (目录项): 作用:代表了一个目录,用来组成文件的路径,并利用其实现路径的管理 内容:包括该目录对象对应的索引节点,子目录链表,父目录目录项对象,与它同级的目录的目录项对象链表,使用计数,缓存标志 (文件): 作用:代表了被进程打开的文件,是可以读写的实体 内容:包括相应的目录项对象、使用计数、访问模式、当前偏移量、操作方法等 3.什么是文件描述符?它与返回的文件指针有什么关系? 文件描述符是一个索引值,指向内核为每一个进程所维护 的该进程打开文件的记录表。 关系:返回的文件指针是文件描述符所指向的文件描述符表中的一个表项 4.分别叙述和的参数设置以及它们的区别。
Computer Knowledge and Technology 电脑知识 与技术第5卷第3期(2009年1月)Linux 内核的配置与编译 胡庆烈 (佛山职业技术学院电子信息工程系,广东佛山528000) 摘要:Linux 是一种实用性很强的现代操作系统,它开放源代码,并允许用户升级其内核。在Redhat 7.2环境中,详细分析了Linux 2.4.18版本的内核配置、编译及新内核切换等操作过程。 关键词:Linux ;内核;配置;编译 中图分类号:TP316文献标识码:A 文章编号:1009-3044(2009)03-0730-02 Configuration and Compiling of Linux Kernel HU Qing-lie (Department of Electonics &Information,Foshan Polytechnic College,Foshan 528000,China) Abstract:Linux is a very practical modern operating system,which opens source coding and allows the user to upgrade its kernel.In the environment of Redhat 7.2,the paper analysis the Linux 2.4.18version of kernel configuration,compiling and new kernel process switch -ing,and so on. Key words:Linux;kernel;configuration;compile 1引言 Linux 是一个自由的多任务操作系统,它以开放源码、对硬件的配置要求低并兼具现代操作系统的优点而得到了迅猛的发展。操作系统的内核是操作系统的核心,它有很多基本的功能,如虚拟内存、多任务、共享库、需求加载、共享的写时拷贝(copy-on-write)、可执行程序和TCP/IP 网络功能等。 用户编译配置Linux 的内核,主要有以下三个原因:1)从现有内核中去除一些不需要的功能,使自定制的内核运行速度更快、更稳定,且具有更少的代码;2)使系统拥有更多的内存,内核部分将不会被交换到虚拟内存中;3)为了提高速度,将某种功能编译到内核中。 2Linux 内核升级的准备 2.1安装一个Linux 操作系统 在编译一个新的Linux 内核之前,首先应在微机中安装一个Linux 操作系统,以便利用该Linux 环境进行新内核的配置和安装。这里是以Redhat 7.2为例,在安装Redhat 7.2的过程中,有两个问题需要注意: 1)硬盘的分区:由于每个硬盘只能拥有4个主分区(Primary Partition ),故用户需要扩展分区,则至少需要腾出一个主分区来划分逻辑分区。在安装Linux 操作系统时,至少需要两个分区,其中本机分区(Linux Native )是供Linux 存放系统文件,而置换分区(Linux Swap )是用作虚拟内存的存取空间。此外,为了和Windows 系统进行文件的复制转换,还应创建一个FAT32类型的分区。 2)安装LILO 启动程序:LILO 是Linux 的核心加载程序,它提供了从DOS 环境启动Linux 的功能,并支持多重启动菜单,让用户选择启动哪一个分区的操作系统。 2.2获取新的Linux 内核源代码 安装了Linux 操作系统后,接下来的工作是寻找新内核的源代码。目前,在Internet 上提供Linux 源代码的站点有很多,如https://www.sodocs.net/doc/b710844182.html, 就是Linux 内核版本发布的官方网站,用户可以从该站点上获得最新版本的Linux 内核源代码,这里是以linux- 2.4.18版本为例。 2.3对新的Linux 内核源代码包进行解压 由于大部分开放性操作系统的程序都是以压缩文件(tgz 、zip 、gz 与bz2)的形式进行发布,所以从网络上取得这些压缩文件后,都先要解压缩之后才能安装使用。具体过程如下: 1)执行“GNOME Terminal ”,把X Windows System 图形用户界面切换至文件操作模式; 2)执行“#cp /root/linux-2.4.18.tar.gz /usr/src ”,把从网络下载的压缩包复制至/usr/src 处; 3)执行“#tar -zxvf linux-2.4.18.tar.gz ”,对压缩包进行解压,解压文件存放在/usr/src/linux-2.4.18目录中。 2.4清除不正确文件及其它从属文件 为了确保源代码目录中没有不正确的文件和其它从属文件,一般需要运行mrproper 命令进行清理,具体操作如下: #cd /usr/src/linux-2.4.18 #make mrproper 如果是使用刚下载的完整的源程序包进行编译,则可以省略mrproper 操作。但若已反复多次使用这些源程序来进行内核编译的,则应要先运行一下这个命令。 收稿日期:2008-12-11 作者简介:胡庆烈(1969-),男,揭阳惠来人,电子助理工程师,主要从事电子技术的教研工作。 ISSN 1009-3044Computer Knowledge and Technology 电脑知识与技术Vol.5,No.3,January 2009,pp.730-731,735E-mail:kfyj@https://www.sodocs.net/doc/b710844182.html, https://www.sodocs.net/doc/b710844182.html, Tel:+86-551-56909635690964