Vs2012在Linux开发中的应用(8): 编译Linux内核
来源:互联网 发布:mac zip 打不开 编辑:程序博客网 时间:2024/05/20 00:37
快乐虾
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内核
- Vs2012在Linux开发中的应用(7): 编译UBOOT
- Vs2012在Linux开发中的应用(9): 编译应用程序
- Vs2012在Linux开发中的应用(11): 编译单个文件
- Vs2012在Linux开发中的应用(12): 编译静态库
- Vs2012在Linux开发中的应用(1):开发环境
- Vs2012在Linux开发中的应用(2):方案设计
- Vs2012在Linux开发中的应用(10): 参数转换
- Vs2012在Linux开发中的应用(13): 添加对x86 Linux的支持
- Vs2012在Linux开发中的应用(3):添加新平台hi3516
- Vs2012在Linux开发中的应用(4):公共属性的定义
- Vs2012在Linux开发中的应用(5):项目属性的定义
- Vs2012在Linux开发中的应用(6):改写Makefile项目的Build过程
- Vs2012在Linux开发中的应用(15): 添加可用的调试器
- 扯淡-Linux 内核中的 GCC 特性在程序中的应用
- bit-map算法在linux内核中的应用
- 内核开发初探, 如何编译linux内核
- 在Linux内核中的PAGE_OFFSET
- javaoop简记--第二天
- 程序猿之---C语言细节31(#define和#undef宏细节、#error、#pragma message("文本信息")、宏定义注释)
- 针对ARM Linux内核swapper_pg_dir简单分析
- 【原创】Ubuntu12.04安装和配置gsl
- 【Leetcode】Gray Code 见过最无耻最没头脑的题 in JAVA
- Vs2012在Linux开发中的应用(8): 编译Linux内核
- Delphi中的线程类
- opencv——Sobel导数
- 怎么样找到一个靠谱的技术合伙人?
- JVM和Java Metrics使用样例(读取kafka统计信息)
- poj1185状态压缩DP
- MapReduce编程-自连接
- 用wpa_cli 连接无线网络
- String、StringBuffer与StringBuilder之间区别