Vs2012在Linux开发中的应用(8): 编译Linux内核

快乐虾

http://blog.csdn.net/lights_joy/

欢迎转载,但请保留作者信息

在有了UBOOT的编译基础之后,编译Linux内核就简单多了,所不同的只有两个地方,一个是错误信息的转换,另一个是内核需要进行参数配置。

1.1    错误信息转换

UBOOT的错误信息中,文件名是不带路径的,而内核的错误信息中,文件名是带相对路径的,因此我们对转换脚本略做修改:

#user code begin

classCUBootMake:

error=False

defBuild(self,chan):

self.error=False

exec_command(chan,

"cd/work/projects/hi3516dvs_2v/linux/v1/linux-2.6.35 && "

"cplinux.config .config && "

"makeARCH=arm CROSS_COMPILE=arm-hisiv100-linux-uclibcgnueabi- uImage &&"

"cparch/arm/boot/uImage /var/lib/tftpboot/\n")

returnnotself.error;

defRebuild(self,chan):

self.error=False

exec_command(chan,

"cd/work/projects/hi3516dvs_2v/linux/v1/linux-2.6.35 && "

"makeARCH=arm CROSS_COMPILE=arm-hisiv100-linux-uclibcgnueabi- clean &&"

"cplinux.config .config && "

"makeARCH=arm CROSS_COMPILE=arm-hisiv100-linux-uclibcgnueabi- uImage &&"

"cparch/arm/boot/uImage /var/lib/tftpboot/\n")

returnnotself.error;

defClean(self,chan):

self.error=False

exec_command(chan,

"cd/work/projects/hi3516dvs_2v/linux/v1/linux-2.6.35 && "

"makeARCH=arm CROSS_COMPILE=arm-hisiv100-linux-uclibcgnueabi- clean &&"

"cparch/arm/boot/uImage /var/lib/tftpboot/\n")

returnnotself.error;

root_path=‘z:\\projects\\hi3516dvs_2v\\linux\\v1\\linux-2.6.35\\‘

defConvert(self,ln):

ifre.match(".*:[0-9]+:
error:",ln):

lst=ln.split(‘:‘)

file=lst[0]

file=self.root_path+file

file=file.replace("/","\\")

ln=file+"("+lst[1]+"):
error C2004: "+lst[3]

self.error=True

elifre.match(".*:[0-9]+:
warning:",ln):

lst=ln.split(‘:‘)

file=lst[0]

file=self.root_path+file

file=file.replace("/","\\")

ln=file+"("+lst[1]+"):
warning C2005: "+lst[3]

returnln

defGetHostPattern(self):

return".*\["+HOST_USER+"@localhost
.*\]\$.*"

make=CUBootMake()

#user code end

欣赏一下VS编译的效果:

轻松搞定。

和UBOOT一样,最好将内核的include目录复制一份到WINDOWS本地目录以加快VS代码分析的速度。

1.2    内核配置

LINUX的内核配置通常会使用make menuconfig来进行配置,实际上当执行这个操作时会执行内核目录下的scripts/kconfig/mconf这个程序,而这个应用程序的代码结构也很简单,scripts/kconfig下的代码完成Kconfig文件的分析,而scripts/kconfig/lxdialog目录下的代码完成菜单的显示,并接受用户的输入。

因此我们原样使用kconfig的分析代码,但用自己的UI做展示并接受用户输入,下面是一个用MFC开发的小应用:

它同样接受空格,’m’,‘Y’,‘N’这几个键,也支持鼠标操作!

让人不爽的是它读取文件的速度比make menuconfig要慢了一点,因为它是通过LINUX的SAMBA文件共享去读取文件的,而内核的配置文件又比较多,不过这点速度的牺牲还是值得的。

此外存在的另一个问题是在windows下无法写入.config文件,因此我们的配置改用linux.config文件,在编译前必须将linux.config文件复制为.config,这也是上一节中Build操作做的第一件事!!!

1.3    在VS工程中调用KernelConfig

为了方便这个程序的调用,我们在VS的右键菜单中插入一个叫EmbedLinux属性的选项:

在执行这个操作的时候,去读取我们之前配置好的内核目录等信息并根据这些参数调用KernelConfig.exe就可以了!

时间: 2024-10-29 11:17:46

Vs2012在Linux开发中的应用(8): 编译Linux内核的相关文章

Vs2012在Linux开发中的应用(9): 编译应用程序

快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 应用程序的开发有两种方式,一种是使用Makefile,这种方式和之前的Uboot和内核的编译类似,不再说明.另一种方式是利用MSBUILD来控制生成过程,我们重载MSBUILD生成过程中的调用的任务来完成自己的编译任务. 1.1    重载任务 在targets中重载BuildCompile和Link,这里有个很奇怪的问题,如果不加上Build这个Target,MSBUILD并不会调用我们的Bu

Vs2012在Linux开发中的应用(7): 编译UBOOT

在完成前一节所述的操作后,我们就可以尝试在VS下编译UBOOT了. 我们仅仅需要改写项目中的make.py: #user code begin classCUBootMake: error=False defBuild(self,chan): self.error=False exec_command(chan, "cd/work/projects/hi3516dvs_2v/u-boot/v1/u-boot-2010.06 && " "makeARCH=arm

Vs2012在Linux开发中的应用(12): 编译静态库

快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 原来以为要生成静态库只需要重载<Lib>任务就可以了: <Target Name="Lib" > <Message Text="lib target" Importance="High" /> <EmbedLinuxLinkTask TargetName="ImpLib" Projec

Vs2012在Linux开发中的应用(11): 编译单个文件

 快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 当按Ctrl+F7编译单个文件的时候,同样会调用ClCompile任务,但有一个很奇怪的问题: 如果我们的文件配置与公共配置不一致: 这个时候MSBUILD会先后再次调用ClCompile的任务,第一次调用的时候会把三个包含目录全部传递进来,第二次调用只会传递两个公共的包含目录. 这一切的罪魁祸首是因为我们在重载ClCompile时少掉了DependsOn这个条件: <Target Nam

嵌入式 Linux开发Kernel移植(二)——kernel内核配置和编译

嵌入式 Linux开发Kernel移植(二)--kernel内核配置和编译 本文选择linux 2.6.35.7版本kernel进行实践. 一.linux kernel源码目录分析 Kbuild,Kernel Build,管理内核编译的文件 Makefile,kernel工程的Makefile. arch,体系架构,arch目录下的子目录存放的是不同种类的架构 block,块设备,一般是存储设备,存放的块设备管理的相关代码 crypto,加密相关,存放加密算法实现代码 Documentation

嵌入式 Linux开发Kernel移植(一)——kernel内核简介

嵌入式 Linux开发Kernel移植(一)--kernel内核简介 一.Linux Kernel 1.linux kernel简介 Linux kernel是芬兰黑客 Linus Torvalds 1991年在英特尔x86架构上用C语言开发的自由免费的符合POSIX标准的类Unix操作系统. Linux kernel是一个一体化内核(monolithic kernel)系统,提供硬件抽象层.磁盘及文件系统控制.多任务等功能的系统软件,不是一套完整的操作系统. 内核空间与用户空间是程序执行的两种

Vs2012在Linux开发中的应用(2):方案设计

1.1     代码提示功能 在vs中开发中,Visual Assist是一个非常优秀的插件,我们仍然可以使用它进行代码的分析,但它只能支持vcxproj工程,因而我们选择对vcxproj的工程进行扩展,这样VisualAssist就可以正常使用了. 此外,VS的智能感知不支持GCC的一些扩展,在做代码分析的时候可能出错,我们采用强制包含头文件的方式解决一部分问题: 注意,这个文件的目的是让VS能够进行代码的分析,而不是让VS具有编译这些代码的能力!!! 这个头文件类似于这样的: #pragma

Vs2012在Linux开发中的应用(1):开发环境

在Linux的开发过程中使用过多个IDE,code::blocks.eclipse.source insight.还有嵌入式厂商提供的各种IDE,如VisualDsp等,感觉总是不如vs强大好用.虽然VS并不提供gcc的编译和调试支持,在之前的开发中只能充当一个编辑器的作用,但VS提供了强大的SDK,本文将探讨如何扩展VS,使之支持Linux的开发. 其实像Visual Gdb之类的工具已经有了类似的功能,无非不免费而已,做这件事只有一个原因:好玩-- 1.1     开发环境 主机开发环境:

Linux开发中遇到的问题和解答汇总

linux配置tomcat的怪事,在线求解答<点击查看详情> 这个是 redis 什么的截图 .<点击查看详情> 关于in.Linux.mac等系统的系统整型字节数<点击查看详情> xshell 中tmux 通过alt + -&gt<点击查看详情> Ubuntu下连接不上企业wifi!个人wifi是好的<点击查看详情> 怎么用grep在同一文件中,多次搜索不同关键字?<点击查看详情> 关于在linux上添加crontab任务的