1.如何查看linux系统是否是安装在scsi磁盘上:
进入/dev目录,查找是/hda还是/sda。
在Linux系统下对于IDE硬盘,每块盘有一个设备名:
对应于主板的四个IDE接口,设备名依次为:/dev/hda,/dev/hdb,/dev/hdc,/dev/hdd等,如果还有IDE
Raid卡,则依次为:/dev/hde,/dev/hdf,/dev/hdg,/dev/hdh.
对于SCSI硬盘,则设备名依次为/dev/sda,/dev/sdb,/dev/sdc等。
2.安装内核make install时,进入 /usr/src/linux-3.9.4即可,否则出现提示:
make: *** 没有规则可以创建目标“install”。
3.chmod 777 grub.cfg 更改该文件的只读属性。
4.第10步,配置grub引导程序。
打开/boot/grub/grub.cfg,复制粘帖3.26.。。。。分别修改vmlinuz跟intird值为3.9.4的文件,重启即可。
但是进入3.9.4内核之后,网络连接不上,无法显示。
5,回答网络连接不上的问题:编译tg3网卡驱动程序的时候,出错,/tg3.c:18630: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘tg3_remove_one’。可进入vim,18630gg,找到那一行里面的宏定义,在文件前面加#define __宏名。一般出错原因为找不到那个宏所在,这样相当于将宏置为零,什么也不做,可以使程序编译通过。
这里添加:
//-------------------------------------
#define __devexit
#define __devinitdata
#define __devinit
#define __devexit_p
//-----------------------------------
文件编译通过。
这里源驱动程序不能通过编译的原因可能是,驱动比较老,没人维护。
6,根本就不是驱动程序的问题,因为我还没驱动成功,让朱老师给我鼓捣了一番,重启就好了。
原因是
配置编译选项出了问题。我没有把怎么搜索无线信号的选项给选中编译,所以怎么整也整不出来。
作为操作系统的内核,其内容和功能必然非常繁杂,包括处理器调度,内存管理,文件系统管理,进程通讯以及设备管理等等,而对于不同的硬件,其配置选项也不相同,所以在编译源代码之前必须设置编译选项。其实我觉得这一步是升级内核整个过程中最有技术含量的,因为要根据自己的需要正确选择yes or no需要对计算机方方面面的知识都有所了解。但是这里的选项实在是太多了,大概有几百项之多,我以前曾尝试着一项一项的选,但是最后还是放弃了,因为有很多选项不是很明白。
既然这样,难道没有什么简便的方法么? 当然有!那就是make menuconfig 或者make xconfig。我使用的是make menuconfig,但是前提条件是要装ncurses。
ncurses 到http://ftp.gnu.org/pub/gnu/ncurses/下载,可以放到任何目录进行安装:
tar zxvf ncurses<version>.tar.gz #解压缩并且释放 文件包
cd ncurses<version> #进入解压缩的目录(注意版本)./configure #按照你的系统环境制作安装配置文件make #编译源代码并且编译NCURSES库su root #切换到root用户环境make install #安装编译好的NCURSES库
另外,在make menuconfig过程中也会有一些选项需要你来设置*, y, n 或者m,选择*表示选项中的内容被直接编入内核中,选择m表示选项中的内容不编入内核,而只是编成独立的module,用到时才调用。
ok, 在当前文件路径下,输入命令:
make menuconfig(或者用 make xconfig,我没有启用成功)
PS:苦逼的捣鼓了3个多小时,本来早请教朱老师,1个小时就能搞定的事儿。不知道自己到底有啥收获,咳!
7,空间内存不足,无法进入ubuntu,提示电源管理器配置出错。删掉kernel中所有的linux版本文件,终于可以进入。重新将linux-3.9.4解压缩至 /usr/src。su下,tar -xvf linux-3.9.4.tar -C /usr/src,发现已经没有linux-***/arch/x86/include/generated/asm/syscalls_32.h的generated目录。
8,
int $0x80
在系统libc库的源代码里面。
执行这条指令时发生以下动作:
-
int
指令称为软中断指令,可以用这条指令故意产生一个异常,上一章讲过,异常的处理和中断类似,CPU从用户模式切换到特权模式,然后跳转到内核代码中执行异常处理程序。 -
int
指令中的立即数0x80是一个参数,在异常处理程序中要根据这个参数决定如何处理,在Linux内核中int $0x80
这种异常称为系统调用(System Call)。内核提供了很多系统服务供用户程序使用,但这些系统服务不能像库函数(比如printf
)那样调用,因为在执行用户程序时CPU处于用户模式,不能直接调用内核函数,所以需要通过系统调用切换CPU模式,经由异常处理程序进入内核,用户程序只能通过寄存器传几个参数,之后就要按内核设计好的代码路线走,而不能由用户程序随心所欲,想调哪个内核函数就调哪个内核函数,这样可以保证系统服务被安全地调用。在调用结束之后,CPU再切换回用户模式,继续执行int $0x80
的下一条指令,在用户程序看来就像函数调用和返回一样。 -
eax
和ebx
的值是传递给系统调用的两个参数。eax
的值是系统调用号,Linux的各种系统调用都是由int $0x80
指令引发的,内核需要通过eax
判断用户要调哪个系统调用,_exit
的系统调用号是1。ebx
的值是传给_exit
的参数,表示退出状态。大多数系统调用完成之后会返回用户空间继续执行后面的指令,而_exit
系统调用比较特殊,它会终止掉当前进程,而不是返回用户空间继续执行。