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