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就可以了!

有多远,走多远,把足迹连成生命线。

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

相关文章:

你感兴趣的文章:

标签云: