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 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的本地目录,这样就足够快了!

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。