Vs2012在Linux开发中的应用(8): 编译Linux内核
2014-11-24 22:24
351 查看
快乐虾
http://blog.csdn.net/lights_joy/
欢迎转载,但请保留作者信息
在有了UBOOT的编译基础之后,编译Linux内核就简单多了,所不同的只有两个地方,一个是错误信息的转换,另一个是内核需要进行参数配置。
#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代码分析的速度。
因此我们原样使用kconfig的分析代码,但用自己的UI做展示并接受用户输入,下面是一个用MFC开发的小应用:
它同样接受空格,’m’,‘Y’,‘N’这几个键,也支持鼠标操作!
让人不爽的是它读取文件的速度比make menuconfig要慢了一点,因为它是通过LINUX的SAMBA文件共享去读取文件的,而内核的配置文件又比较多,不过这点速度的牺牲还是值得的。
此外存在的另一个问题是在windows下无法写入.config文件,因此我们的配置改用linux.config文件,在编译前必须将linux.config文件复制为.config,这也是上一节中Build操作做的第一件事!!!
在执行这个操作的时候,去读取我们之前配置好的内核目录等信息并根据这些参数调用KernelConfig.exe就可以了!
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开发中的应用(7): 编译UBOOT
- Vs2012在Linux开发中的应用(12): 编译静态库
- Vs2012在Linux开发中的应用(9): 编译应用程序
- Vs2012在Linux开发中的应用(11): 编译单个文件
- 在进行嵌入式开发之前,首先要建立一个交叉编译环境,这是一套编译器、连接器和libc库等组成的开发环境。文章通过一个具体的例子说明了这些嵌入式交叉编译开发工具的制作过程。 随着消费类电子产品的大量开发和应用和Linux操作系统的不断健壮和强大,嵌入式系统越来
- Vs2012在Linux开发中的应用(1):开发环境
- 在ubuntu用arm ds-5社区版配合linaro交叉编译工具开发android linux应用
- Vs2012在Linux开发中的应用(6):改写Makefile项目的Build过程
- Vs2012在Linux开发中的应用(15): 添加可用的调试器
- Vs2012在Linux开发中的应用(10): 参数转换
- Moto Linux应用开发(-): Ubuntu上建立Moto E6交叉编译工具链
- Vs2012在Linux开发中的应用(5):项目属性的定义
- Vs2012在Linux开发中的应用(2):方案设计
- Vs2012在Linux开发中的应用(3):添加新平台hi3516
- Vs2012在Linux开发中的应用(1):开发环境
- Vs2012在Linux开发中的应用(13): 添加对x86 Linux的支持
- Vs2012在Linux开发中的应用(4):公共属性的定义
- Vs2012在Linux开发中的应用(5):项目属性的定义
- Maemo Linux手机平台系列分析:(15) Maemo应用开发
- Linux应用开发入门