标签 内核 下的文章
 2018-08-29T16:27:55.140000    |      汇编    |     AilsonJack    |     暂无评论    |     3930 views
最近在阅读《Linux内核完全注释》这本书,试图多了解Linux内核的运行过程。书中当然也涉及到汇编代码的编写。这本书的阅读笔记,应该会在后面陆续的发布,敬请期待吧。在Linux系统中,使用AT&T语法编写汇编代码时,遇到了一个问题,就是编译代码时会出现问题:"invalid instruction suffix for push"。我的编译环境:Ubuntu 14.04 x86_64,在终端中执行命令:as -o callee.o callee.s,此时就出现了错误提示:invalid instruction suffix for push,截图如下:错误原因是,在64位系统和32位系统的as命令对于某些汇编指令的处理支持不一样造成的。在文件callee.s中,包含指令:pushl  %ebp,该指令在64位系统下就编译不过。解决方法:在callee.s中,在代码头部添加.code32即可:然后再次编译该汇编文件,编译顺利通过。如果还有其他的问题,欢迎留言讨论。
编程语言汇编Linux内核 阅读全文»
 2015-03-28T23:37:29.423692    |      Linux MMC子系统    |     AilsonJack    |     暂无评论    |     1365 views
今天给大家讲讲如何自己配置、编译、安装一个Linux内核到自己的电脑,我这儿是在我原有的Linux系统上,自己编译、安装一个内核,然后重启电脑使用我自己编译的Linux内核。其实我这么做是因为在做Linux驱动开发学习时,遇到了内核版本不匹配的问题,所以才决定自己编译、安装一个内核。这样做,首先是解决了内核版本不匹配的问题,然后呢,自己也学会了如何简单的折腾内核的配置、编译、与安装,一举两得。好了废话不多说,下面就说说如何做吧。哦,对了,我这里使用的是Fedora 14作为演示,貌似有点没跟上时代的脚步,嘿嘿,我只告诉你,这是我学习用的操作系统,不会告诉你,我还安装了Fedora 21,还有Opensuse 13.2 ,还有我大Windows。在进行以下操作前,请确保你的电脑已经安装了gcc以及g++工具,如果没有安装,那么可以在root模式下使用以下命令进行安装:gcc:yum install gccg++:yum install gcc-c++注:我给大家提供了内核源代码,大家也可以自己去官网下载,随意。在操作前,请下载文件 点此下载 密码:u6c8。1.安装xz工具在进行内核编译操作前,先安装xz工具,这个工具是用来解压Linux内核源代码的。将下载下来的xz-5.0.3.tar.bz2与linux-2.6.32.65.tar.xz放在系统中的一个文件夹中,我这里是放在了/home/ailsonjack/Kernel中的,在进行接下来的操作之前,先切换到root用户吧:文件什么的,放好之后,接下来就正式的开始安装xz工具了,其步骤如下:(1)、执行命令tar -xvjf xz-5.0.3.tar.bz2(2)、执行命令cd xz-5.0.3,进入到解压开的文件夹中,接着再执行./configure命令(3)、接下来执行make,make install命令就完成了xz工具的安装,这两个命令很简单,就不上图了。2、解压Linux内核源码包进入到存放Linux内核源码包linux-2.6.32.65.tar.xz的路径下,我这里是 /home/ailsonjack/Kernel,然后依次执行xz -d linux-2.6.32.65.tar.xz以及tar -xf linux-2.6.32.65.tar命令:解压完成之后,执行命令:cd linux-2.6.32.65,进入到linux-2.6.32.65目录:3、内核配置(1)、清除临时文件、中间文件和配置文件对于刚解压的内核源码,可以考虑不进行这个步骤,这一步只是针对于你曾经对内核源码进行过相关配置来说的,不过,对于刚解压的源码也可以进行这些操作,反正也不影响。这里介绍三个命令:make clean:清除产生的大部分文件,但不包括配置文件make mrproper:清除产生的所有文件和配置文件make distclean:make mrproper清除的文件 + editor backup + patch files我用了下make clean,貌似什么情况都没发生:(2)、确定目标系统的软硬件配置情况,比如CPU的类型,网卡的型号等等。我们这里是以PC机作为硬件平台的,即X86结构。对于初学者嘛,不用考虑太多,采用默认的即可,意思嘛,就是看看这步,知道有这么回事就行了。(3)、使用make menuconfig配置内核这一步,看个人了,对于初学者来说,一般是采用默认的即可:这是执行make menuconfig命令后出现的配置菜单,根据个人情况来吧:注:执行这步,有的系统由于缺少一些安装包,会提示错误,到时大家可以自己上网搜索或者留言问我。4、编译内核这里有两个命令用于编译内核:make zImage,make bzImage,这两个命令的区别:在X86平台下,zImage只能用于小于512K的内核。有这个区别嘛,一般情况下,我们当然使用的是make bzImage了,是吧。执行命令make bzImage,需要一段时间才能执行完成:花了大约15分钟,执行完成:5、编译内核模块接着执行命令:make modules,也是需要一些时间:这次花的时间大约有50分钟,挺长的:6、安装内核模块执行命令make modules_install:注:该命令将编译好的内核模块从内核源代码目录拷贝至/lib/modules下。7、制作init ramdisk执行命令:mkinitrd initrd-$version $version(形式是这样的)这里需要执行的命令是:mkinitrd initrd-2.6.32.65 2.6.32.65(注意路径没变)注:$version可以通过查询/lib/modules下的目录得到,从下图可以看出,2.6.32.65目录即是我们刚安装好的内核模块。8、内核安装(1)、执行命令cp arch/x86/boot/bzImage /boot/vmlinuz-$version(形式上是这样的)这里需要执行的命令是:cp arch/x86/boot/bzImage  /boot/vmlinuz-2.6.32.65注:$version为所编译的内核版本号,我这里让$version为2.6.32.65(2)、执行命令:cp initrd-2.6.32.65  /boot/注:initrd-2.6.32.65文件是用mkinitrd产生的,也就是上面的第7步产生的文件。(3)、添加自己编译的内核,到系统启动项中执行命令vi /etc/grub.conf将下图中红框1的内容,拷贝一份,也即红框2里面的内容就是拷贝得到的:然后修改红框2里面的内容,来让系统启动时,可以选择自己编译的内核进行启动,需要修改的地方有4处:title Fedora(2.6.35.6-45.fc14.x86_64)修改成MyLinux(2.6.32.65)root (hd0,0) (这个根据自己的情况来吧,我这里不用修改,你们那儿按实际的来)kernel /vmlinuz-2.6.35.6-45.fc14.x86_64 将这句改成kernel /vmlinuz-2.6.32.65initrd /initramfs-2.6.35.6-45.fc14.x86_64.img将这句改成initrd /initrd-2.6.32.65我的修改结果如下,然后保存退出:(4)、修改/boot/grub/menu.lst中的timeout值,可以设置linux系统启动时,选择系统的等待时间,我这里设为12;default设置系统默认启动的内核,我这里设置的是1,即默认启动我自己编译的内核。执行命令vi /boot/grub/menu.lst,修改好的结果如下,保存退出:重新启动系统,看看是不是有启动选择项,然后选择我们自己编译的内核启动:至此,对于Linux内核的配置、编译、安装已经讲完了,大家有什么不明白的可以留言(如果我能解决的尽量帮忙啦)。
Linux内核学习内核 阅读全文»
  • 1

  本站信息

目前本站共被浏览 154785 次
目前本站已经运行 3306 天
目前本站共有 165 篇文章
目前本站共有 6 条评论信息
目前本站共有 104 个标签
目前本站共有 0 条留言信息
网站创建时间: 2015年03月01日
最近更新时间: 2023年11月26日
Copyright © 2015~2023  说好一起走   保留所有权利   |  百度统计  蜀ICP备15004292号