在完成前一节所述的操作后,我们就可以尝试在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 CROSS_COMPILE=arm-hisiv100-linux-uclibcgnueabi- && "
"cp../tools/mkboot.sh . && chmod 777 mkboot.sh && "
"cp../tools/reg_info.bin . &&"
"./mkboot.shreg_info.bin u-boot-ok.bin && "
"cpu-boot-ok.bin /var/lib/tftpboot/ && echo xxxxxxxxx\n")
returnnotself.error;
defRebuild(self,chan):
returnTrue
defClean(self,chan):
returnTrue
cur_dir='.'
defConvert(self,ln):
ifre.match(".*Entering directory",ln):
idx1=ln.find("`")
ln2=ln[idx1+1:]
self.cur_dir=ln2[:len(ln2)-2]+'/'
self.cur_dir=self.cur_dir.replace(HOST_SHARE_ROOT,HOST_SHARE_ROOT_WIN)
self.cur_dir=self.cur_dir.replace('/','\\')
elifre.match(".*:[0-9]+: error:",ln):
lst=ln.split(':')
file=self.cur_dir+lst[0]
ln=file+"("+lst[1]+"): error C2004: "+lst[3]
self.error=True
elifre.match(".*:[0-9]+: warning:",ln):
lst=ln.split(':')
file=self.cur_dir+lst[0]
ln=file+"("+lst[1]+"): warning C2005: "+lst[3]
elifre.match(".*:[0-9]+: undefined reference",ln):
lst=ln.split(':')
file=lst[0].replace(HOST_SHARE_ROOT,HOST_SHARE_ROOT_WIN)
file=file.replace("/","\\")
ln=file+"("+lst[1]+"): error C2007: "+lst[2]
self.error=True
elifre.match("make\[[0-9]+\]:.*Error [0-9]",ln):
self.error=True
returnln
defGetHostPattern(self):
return".*\["+HOST_USER+"@localhost .*\]\$.*"
make=CUBootMake()
#user code end
在这个python脚本中,我们改写了Build操作和Convert操作。在Build操作中主要是执行登录后的编译命令。而在Convert操作中则完成了错误字符串的转换。
看看VS的反应:
正确定位到了错误的文件和行号!
至于Rebuild和Clean操作就比较简单了,不再重复。
这里唯一需要注意的是如果我们将包含目录直接指向Linux下的共享目录会导致VS在进行代码分析时速度较慢,因而我们可以将include目录复制一份到windows的本地目录,这样就足够快了!