KStudio window上编译uclinux
正因为TKStudio证明这种想法是可行的,所以我才有可能尝试去做这件事情。我做的仅仅是交叉编译ARM平台下的内核,我也只对此平台熟悉。TKStudio也只支持ARM等嵌入式平台。
在Windows下编译Linux内核步骤
上周,已经成功使用TKStudio编译UBoot,这次将Linux内核移植到TKStudio下也是借鉴移植UBoot的做法。
- 首先,先在Linux平台下配置并编译内核,注意保留生成的.o等目标该文件;
- 然后,将代码移植至Windows,删除内核源码中没有被编译的.c文件(没有对应的.o);
- 接着,创建TKStudio工程,将剩余的源码导入到工程中;
- 其次,配置好GCC编译相关参数;
- 最后,编译,逐个排查编译问题,直至最后的编译成功。
我编译的内核为Linux-3.0.8,目标为友善之臂的mini210开发板(处理器为s5pv210, Cortex-A8)内核,内核源码为光盘自带。相关的编译参数如下:
C编译参数:-mabi=aapcs-linux -include .\include\generated\autoconf.h -D__LINUX_ARM_ARCH__=7 -march=armv7-a -marm -fno-dwarf2-cfi-asm -mabi=aapcs-linux -mno-thumb-interwork -funwind-tables -msoft-float -Uarm -Wframe-larger-than=1024 -fno-stack-protector -fomit-frame-pointer -g -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fconserve-stack -DCC_HAVE_ASM_GOTO -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(sem)" -D"KBUILD_MODNAME=KBUILD_STR(sem)" -mfpu=vfp -pipe -DTEXT_OFFSET=0×00008000 -mcpu=cortex-a8 -D__KERNEL__
ASM编译参数:
-mabi=aapcs-linux -include .\include\generated\autoconf.h -D__LINUX_ARM_ARCH__=7 -mno-thumb-interwork -funwind-tables -march=armv7-a -include asm/unified.h -msoft-float -gdwarf-2 -D"KBUILD_STR(s)=\#s" -D"KBUILD_BASENAME=KBUILD_STR(sem)" -D"KBUILD_MODNAME=KBUILD_STR(sem)" -mfpu=vfp -pipe -DTEXT_OFFSET=0×00008000 -mcpu=cortex-a8 -D__KERNEL__ –D__ASSEMBLY__
同时,还要设置好头文件包含路径:
C头文件包含路径:-s5pv210\include;.\arch\arm\plat-s5p\include;.\arch\arm\plat-samsung\include
ASM头文件包含路径:.\include;.\arch\arm\include;.\arch\arm\mach-s5pv210\include;.\arch\arm\plat-s5p\include;.\arch\arm\plat-samsung\include
以上的参数,有一些依据不同的平台有所不同。这些参数不用自己写,在Linux下编译内核时会生成一些类似于XXX.o.cmd的文件,打开这些文件就可以找到相应的参数设置,拷出来再适当地修改即可。
编译时要注意的事项:
- 编译参数尽量使用.o.cmd中自带的,适度地修改,不能删除太多,否则会出现很多莫名其妙的问题;
- 优化等级不能选不优化,最好是选-O,否则出现一些问题;
- 极少量的.c、.S文件虽然没有直接被编译,但是会被其它文件包含再编译,这些文件是不能删的。至于有哪些文件,不必一个个查,编译时如果提示找不到相应文件,恢复即可;
- Linux内核启动时会有个解压缩的过程,这部分代码由arch\arm\bootp实现。考虑调试问题,且编译错误不容易解决,删除之。
最小化系统漫谈
我做这个事情的动力绝大部分是因为兴趣。Linux平台下的工具用起来不爽,所以才想到了WIndows下的工具。在做UBoot和Linux内核在TKStudio编译时,虽然费时费力,但也收获不少。
编译UBoot时,由于源码量少,所以花了不是太多的时间和精力,并且获取了第一手经验。同时,在反复的折腾过程中,对UBoot主要的文件目标功能和组织已经掌握地比较清晰。再加通过TKScope仿真器连接目标板去跟踪调试,对UBoot的程序框架和运行流程也已经把握。
在编译Linux时,则首先尽量将其配置成功能最小的内核,以减少编译的文件数,同时保持功能简单以便于理解。之后便是加入TKStudio工程并逐个排查错误。这种过程也让我了解了Linux主要的文件功能及其相关件的依赖关系,同时对Linux内核的各个编译配置项也有深入理解。
无论是以上哪一个,让我深有受益的地方便是通过此种方式能够初步掌握这些源码的主要框架,有了绝对的控制权,可以想怎么改就怎么改,同时还能跟踪看改后的运行流程。这就是让它们处于自己的掌控之下。
其实,UBoot和Linux中的源码量虽然大,但很多都是可以去掉的。这些源码虽然增强了内核的功能,但是会影响到理解和阅读。所以,我在处理UBoot时,做了一件比较有意见的事情:尽可能地移植不必要的文件,保留一个最小的UBoot核心,这个核心主要包括目标平台、板级平台、命令行、必备的驱动程序。所涉及的源文件数不多。UBoot的其它文件只不过是功能上的添加或增强。而后,便是在这个核心的基础之上再将原有的文件加入一些进来,以获得更强的功能。
通过这样一个复杂->简化->复杂的过程,我对UBoot已经完全没有任何惧怕心理。虽然源码细节我没有仔细阅读;但是由于对整个框架把握的比较清楚,所以能很快定位相关部分。上图中的源码结构,看起来并不复杂:)
后续对Linux内核,我也会考虑这样干,尽可能地的简化,最后得到一个最最小的系统。只要弄懂这个核心,那就什么都不怕了。
KStudio window上编译uclinux的更多相关文章
- Window上编译最新版libCef(Branch 2704)(转载)
转自http://blog.csdn.net/mfcing/article/details/52066579 1.开发环境搭建 VS2010及以上版本,CMake 2.8.12.1及以上版本.我安 ...
- linux(debian) arm-linux-g++ v4.5.1交叉编译 embedded arm 版本的QtWebkit (browser) 使用qt 4.8.6 版本 以及x64上编译qt
最近需要做一个项目 在arm 架构的linux下 没有桌面环境的情况下拉起 有界面的浏览器使用. 考虑用qt 的界面和 qtwebikt 的库去实现这一系列操作. 本文参考: Qt移植到ARM Lin ...
- window上安装 MongoDB 及其 PHP扩展
window上安装 MongoDB 及其 PHP扩展 工具/原料 window MongoDB MongoDB 方法/步骤 MongoDB 下载 MongoDB提供了可用于32位和64 ...
- 在Window下编译LibGeotiff(含Libtiff)
核心提示:1.GeoTiff简介 GeoTiff是包含地理信息的一种Tiff格式的文件. 1.GeoTiff简介 GeoTiff是包含地理信息的一种Tiff格式的文件.Libgeotiff就是一个操作 ...
- 在windows 上编译部署Rap2
在windows 上编译部署Rap2 引言 安装需要的环境 安装后端站点 创建数据库 在全局安装pm2 和 typescript 配置mysql,redis 数据库链接配置 初始化 编译 初始化数据库 ...
- [No0000AB]用Visual Studio 2015在 WIN10 64bit 上编译7-zip (32 bit)
1.7-ZIP简介 7-zip 是一款免费的压缩解压软件.ZIP格式的文件默认被苹果和微软支持,完全不需要额外安装其他软件就可以解压.但对于非US-ASCII编码的文件名和大于2GB的ZIP文件,可能 ...
- window上利用pip安装pandas
官网推荐的是直接使用Anoconda,它集成了pandas,可以直接使用.安装挺简单的,有windows下的安装包.如果不想安装庞大的Anoconda,那就一步一步用pip来安装pandas.下面我主 ...
- [原]在win上编译 subversion 源码实践Tonyfield的专栏
(百度和网页的作者无关,不对其内容负责。百度快照谨为网络故障时之索引,不代表被搜索网站的即时页面。) [原]在win上编译 subversion 源码实践 2013-6-9阅读400 评论0 (参考 ...
- 解决Qt在openSUSE上编译出现“cannot find -lGL”错误
在openSUSE上编译QT5.4程序出现“cannot find -lGL”,就连example都无法通过编译.QT是在官网下的最新的安装包. 大体意思是,缺少qt运行时所需要的openGL库.决绝 ...
随机推荐
- Android仿苹果版QQ下拉刷新实现(一) ——打造简单平滑的通用下拉刷新控件
前言: 忙完了结婚乐APP的开发,终于可以花一定的时间放在博客上了.好了,废话不多说,今天我们要带来的效果是苹果版本的QQ下拉刷新.首先看一下目标效果以及demo效果: 因为此效果实现的步骤 ...
- 红黑树:个人理解与Python实现
红黑树:个人理解与Python实现 [基本事实1] 红黑树是一种平衡的二叉查找树,无论插入还是删除操作都可以在O(lg n)内实现,而一般的二叉查找树则在极端情况下会退化为线性结构.红黑树之所以是平衡 ...
- 在oracle中varchar和varchar2有什么区别?
1.varchar2把所有字符都占两字节处理(一般情况下),varchar只对汉字和全角等字符占两字节,数字,英文字符等都是一个字节:2.VARCHAR2把空串等同于null处理,而varchar仍按 ...
- Spark(十三)SparkSQL的自定义函数UDF与开窗函数
一 自定义函数UDF 在Spark中,也支持Hive中的自定义函数.自定义函数大致可以分为三种: UDF(User-Defined-Function),即最基本的自定义函数,类似to_char,to_ ...
- VM ESXI 服务器虚拟化资料积累
编者按: 公司业务需求,公有云平台不能满足部署mac系统环境的需求,故租赁或托管物理机自行虚拟化,使用的工具就是VM ESXI .从部署到应用都没有遇到过什么问题,但是在今天发生VMware vSph ...
- 2018年全国多校算法寒假训练营练习比赛(第二场)B - TaoTao要吃鸡
链接:https://www.nowcoder.com/acm/contest/74/B来源:牛客网 题目描述 Taotao的电脑带不动绝地求生,所以taotao只能去玩pc版的荒野行动了, 和绝地求 ...
- JAVAEE——BOS物流项目14:Linux部署(安装jdk、tomcat、mySQL)和扩展资料
1 学习计划 1.Linux部署 n 安装jdk n 安装tomcat n 安装MySQL n 将项目发布到tomcat 2.扩展资料 2 Linux部署 2.1 安装jdk 第一步:获取Linux系 ...
- CentOS7启动流程
同样我也找了一张CentOS7的启动流程图. 第一步.硬件启动阶段 这一步和CentOS6差不多,详细请看CentOS6启动流程(含详细流程图) 第二步.GRUB2引导阶段 从这一步开始,CentOS ...
- CentOS6启动流程(含详细流程图)
参考:Linux启动流程和grub详解(作者:好笔记运维) 为什么把这位的参考放在前面,主要是这位大佬的流程图太详细了.虽说不一定要了解这么详细,但还是很佩服啊.不多说,上图(在新标签中打开图片) 下 ...
- leetcode 算法 Excel表列序号 python实现
这道题给我感觉就像一个26进制数一样. A 就是1 B是2 .... Z 是26 如果AB 两位,那就是 1 * 26 + 2 就是A 的数值*26 + B的数值 如果是MNP 三位数 那就 ...