⑴ ubuntu 下怎么搭建kodi 编译环境
1. 安装Ubuntu。
2. 安装gcc
方法一:
sudoapt-get install build-essential
安装完了可以执行
gcc--version的命令来查看版本,输出如下:
gcc(GCC)4.2.3(Ubuntu4.2.3-2ubuntu7)
Copyright(C)2007FreeSoftwareFoundation,Inc.
编译则使用Ubuntu gcc命令。要往下学习首先就得熟悉gcc命令的用法。
Ubuntugcc命令提供了非常多的命令选项,但并不是所有都要熟悉,初学时掌握几个常用的就可以了,到后面再慢慢学习其它选项,免得因选项太多而打击了学习的信心。
一. 常用编译命令选项假设源程序文件名为test.c。
1. 无选项编译链接
用法:#gcc test.c
作用:将test.c预处理、汇编、编译并链接形成可执行文件。这里未指定输出文件,默认输出为a.out。
2. 选项 -o
用法:#gcc test.c -otest
作用:将test.c预处理、汇编、编译并链接形成可执行文件test。-o选项用来指定输出文件的文件名。
3. 选项 -E
用法:#gcc -E test.c -otest.i
作用:将test.c预处理输出test.i文件。
4. 选项 -S
用法:#gcc -S test.i
作用:将预处理输出文件test.i汇编成test.s文件。
5. 选项 -c
用法:#gcc -c test.s
作用:将汇编输出文件test.s编译输出test.o文件。
6. 无选项链接
用法:#gcc test.o -otest
作用:将编译输出文件test.o链接成最终可执行文件test。
7. 选项-O
用法:#gcc -O1 test.c -otest
作用:使用编译优化级别1编译程序。级别为1~3,级别越大优化效果越好,但编译时间越长。
二. Ubuntu gcc多源文件的编译方法
如果有多个源文件,基本上有两种编译方法:
[假设有两个源文件为test.c和testfun.c]
1. 多个文件一起编译
用法:#gcc testfun.ctest.c -o test
作用:将testfun.c和test.c分别编译后链接成test可执行文件。
2. 分别编译各个源文件,之后对编译后输出的目标文件链接。
用法:
#gcc -ctestfun.c //将testfun.c编译成testfun.o
#gcc -ctest.c //将test.c编译成test.o
#gcc -otestfun.o test.o -o test //将testfun.o和test.o链接成test
以上两种方法相比较,第一中方法编译时需要所有文件重新编译,而第二种方法可以只重新编译修改的文件,未修改的文件不用重新编译。
3. 安装eclipse
a) 安装配置java(eclipse需要)
Ubuntu 在安装时,如同大部分linux 发行版一样,都会同时安装 GNU 版本的 Java。这个 Java 的实用程度太低,尤其对于开发人员来说,是没有太多用处的。在 Ubuntu 下,安装 SUN Java 是一件很容易的事情。第一步:
sudoapt-get install sun-java6-jdk
安装完毕之后,选择默认 java:
sudo update-alternatives --config java
然后配置环境变量:
sudo vim /etc/environment
在其中添加如下两行:(不同版本应不同,这里是java6)
CLASSPATH=/usr/lib/jvm/java-6-sun/lib
JAVA_HOME=/usr/lib/jvm/java-6-sun保存退出。
b) 安装 Eclipse
sudo apt-getinstall eclipse-platform
sudo apt-get install eclipse-pde
虽然已经这时新安装的java 已经成为系统默认的 jvm,但是 Eclipse 并不会用 update-alternative 设置的 jvm 来启动自身,而使用的是以前的 GNU Java。GNU Java 是 1.4.2 的实现,而且在性能上远不如 SUN 的实现。为了让 Eclipse 利用 SUN Java 启动,我们还需要继续配置。首先将 SUN Java 完完全全的设置为系统的默认 JDK:
sudo update-java-alternatives -s java-6-sun
然后编辑 JVM 配置文件:
sudo vim /etc/jvm
将文件中的
/usr/lib/jvm/java-6-sun
这一行填入到配置块的顶部。由于 Eclipse 会忽略 Ubuntu 的通用 Java 设置(貌似一个 bug),我们需要继续编辑 Eclipse 的 java_home 文件:
sudo vim /etc/eclipse/java_home
如同上面一样,将
/usr/lib/jvm/java-6-sun
这一行填入到文件的顶部。
c) 安装 Eclipse, c/c++插件
1、启动eclipse,
2、选择Help->InstallNew Software...,在Work with的框框下复制下面的地址: http://download.eclipse.org/releases/galileo
3、选择Collaboration->MylynBridge: C/C++ Development,安装,重启eclipse。
4、同上述2、3,选择ProgrammingLanguages->Eclipse C/C++ Development,都选上吧,现在硬盘不贵的。重启eclipse,试试吧,有tutorial的。
备注:有些版本还需要安装GTK+库,使用apt-getinstall libgtk2.0*可得到
4. 安装g++
方法一:
sudo apt-get install make gcc g++
再装上函数手册
sudo apt-get install manpages-dev
方法二:
sudo apt-get install build-essential
执行完后,完成了gcc,g++,make的安装。build-essential 是一整套工具,gcc,libc等等
5. 虚拟机下共享文件
Windows和Linux间有很多文件共享的方式,这里我总结了一下。假设你的Host计算机是Windows,Guest是Linux哈。
1.利用Samba
这是我用得最多的方式
备注:试了一下,比较麻烦
2.在Linux下配置Apahce
在Linux下配置Apahce,然后在Windows下通过www方式把Linux下的文件下载下来。这种方式只能把Linux的文件传到Windows,不能把Windows的文件传到Linux.
3.在Linux下配置Ftp
用vsftp或者wu-ftp都可以,配置成上传权限的,然后Windows和Linux就可以相互共享文件了。
4.Windows下配置WWW服务
用IIS,Apache或者其它的都可以。如果你的Linux只有命令行的话,就用wget命令吧,可以很方便地下载文件。
5.Windows下配置Ftp
用serv-u比较简单
6.利用Windows的文件共享功能
比如说你的Windows的IP为192.168.0.1,共享了一个叫share的目录,那么就可以用下列命令
mount -t smbfs //192.168.0.1/share /mnt -o username=user%passwd
或者smbmount//192.168.0.1/share /mnt -o username=user%passwd(用这个命令要安samba哦)
7.用vmware tools工具
SharedFolders是Vmware4 的一个新功能,更加方便了在Host,Guest操作系统间共享文件。但是使用前要安装vmwaretools.
点击setting->vmwaretools install
mount /dev/cdrom /mnt/cdrom
cd /mnt/cdrom
里面有一个vmwaretools的tar包,解开执行vmware-tools-install.pl脚本,一路回车,一般没有问题。
点击Edit->VirtualMachine Settigns->Option->SharedFolders->Add,选定要共享的文件夹并给这个文件夹命名,下一步。选定“Enable thisshare”,确定以后,vmware会把这个文件夹自动mount到/mnt/hgfs目录下。
备注:是否成功和ubuntu与vmwaretools的版本有关,需要彼此匹配。
8.直接挂接物理硬盘或者硬盘分区
不过vmware也是支持直接mountHost机器的磁盘,方法是在虚机设置里新建磁盘,类型选“Usephysicaldisk(foradvanced users)”,再选定磁盘和分区就可以。但是这样的操作可能会引会文件系统的不一致,导致错误,不推荐使用。
9.用ISO文件
虚拟机里面的光驱可以有物理光驱和ISO文件两种,我们可以把我们的文件重点制件成ISO文件(用WinIso),然后在Linux中作为CDROM挂接。
6. Samba安装
Ubuntu下samba的安装设置
步骤1:Ubuntu下安装samba
#apt-getinstall samba4
#apt-getinstall smbfs
步骤2:添加linux用户
#useradser1 //添加用户名user1
#passwser1 //给用户名user1添加密码
#mkdir/home/user1 //建立user1的home目录,如果不用这个用户名来登陆linux,此步骤不是必需
#chown-R user1:user1 /home/user1//给user1的home目录设置好权限
步骤3:给samba服务器添加用户
说明:登陆samba的用户必须已经是linux中的用户
#smbpasswd-a user1 //添加并给user1设置samba密码
步骤4:smb.conf设置
#cd/etc/samba //进入设置目录
#mv smb.confsmb.conf.bak//做好备份,直接将系统默认配置文件改名
#vimsmb.conf //建立和配置smb.conf文件
[global]
workgrop=x1 //X1为你局域网中的工作组名
serverstring=x2 //x2为你linux主机描述性文字,比如:samba server。
security=user//samba的安全等级,user代表需要输入用户名和密码,改成share则不需要输入用户名和密码
[x3] //方框号中的x3这个名字可以随便取,只是在win的网上邻居中显示的共享文件夹名
path=/home/x4//x4为你要共享的文件夹名,在共享前还要建立这个文件夹,并设好权限以便访问,下面会说明。
valisers=user1 //这个x4共享目录只允许user1这个用户进入
public=no //no表示除了user1这个用户,其它用户在进入samba服务器后看不见x4这个目录,如果为yes,虽然能看见x4这个目录,但除了user1这个用户能进入这个目录,其它人进不了。
writable=yes //允许user1在x4目录中进行读和写操作,反之no
//存盘退出
#testparm //检查一下语法错误,比如拼错
步骤5:建立共享目录
#mkdir /home/x4
#chown -R user1:user1 /home/x4 //因为是root建立的目录,其它用户只有读的权限,所还得把权限改一下。当然也可以简单的用#chmod 777 /home/x4。还有个问题就是共享里目录的文件如果有些能访问有些不能访问,那肯定也是权限的问题,进入/home/x4,直接#chmod 777 *来解决。
步骤6:重启samba服务
#/etc/init.d/samba restart
7. windows客户端连接到samba服务器
首先确保你的服务端已经配置好samba并成功启动服务,方法可参考此文章http://blog.csdn.net/linglongwunv/archive/2010/01/19/5212875.aspx,我们就可以从Windows 客户端通过Windows网络连接到Samba,这里以 Windows XP 为例,有两种方法:
1、网上邻居-->查看工作组计算机-->SambaServer
2、打开运行(windows键+R),输入配置samba服务器的主机名或者IP(格式:\\192.168.1.98)
3、进入samba可以看到我们配置的共享目录名,此文章中http://blog.csdn.net/linglongwunv/archive/2010/01/19/5212875.aspx的步骤4配置的为share
4、第一次登录需要输入用户名和密码,此文章中http://blog.csdn.net/linglongwunv/archive/2010/01/19/5212875.aspx的步骤6配置的为username的用户名,可勾选记住我的密码,以后在此机器访问samba服务器就可以直接登录了。
8. cvs客户端设置
ubuntu有两种cvs客户端程序:cvs和cvsnt。
我安装了cvsnt
0. 安装cvsnt
1. 在~/.bashrc设置CVSROOT变量:
exportCVSROOT=:pserver:[email protected]:/export/home/cvsroot
改了以后,用户需要重新注册
2. 创建cvs目录 mkdir~/cvsroot
3. cdcvsroot
cvs login
xxx(密码)
4.checkout项目:
cvs co a/b/project/src
5. 常用命令:(斜杠后表示缩写)
cvs checkout / co
cvs update / up
cvs commit / ci
查看一个文件的提交情况:cvs logfilename
对比两个版本文件的情况:cvs diff -r version_1 version_2 file_name
6. 获得一个文件的历史版本
cvs update -r 1.3 test.c
-r 后,文件成为一个tag,是无法修改的,需重新从根目录checkout
9. 安装 vim
sudo apt-get install vim
10. 安装vfftp
sudoapt-get install vsftpd
察看是否打开21端口
Sudonetstat –tulnp | grep 21
登陆
ftp localhost
输入Ubuntu的用户名、密码登陆
ls(会显示home目录的文件)
运行:
standalone
最普通的方式
Sudoservice vsftpd
⑵ 如何编译OpenWrt
搭建编译环境。编译建议在Linux下进行。我的系统是Linux mint 17,执行以下命令,构建编译环境:
sudo apt-get update
sudo apt-get install git-core build-essential
获取openwrt源码。在当前用户主目录下执行
git clone git://git.openwrt.org/openwrt.git
等待代码下载。结束后,目录下会出现openwrt文件夹。
配置软件源。进入openwrt目录,执行
./scripts/feeds update -a
./scripts/feeds install -a
检查编译环境是否完整:
make defconfig
make prereq
根据提示信息安装需要的软件包。如果提示类似
“tmp/.config-package.in:22022:warning: multi-line strings not supported”
的信息,打开 openwrt/tmp/.config-package.in,定位到对应行,添上丢掉的一个引号就可以了。
编译选项:
执行 make menuconfig,根据路由器情况,选择 Target System 和 Subtarget。如意云一代和极壹S的 Target System 均为 Ralink RT288x/RT3xxx 。对于Subtarget ,前者为 MT7620n based boards ,后者为 MT7620a based boards。
其他选项根据个人喜好选择。一般来说要选中LuCI界面,选中中文语言包等等。
开始编译:
执行 make -j2 V=s 进行编译。-j后面的数字是电脑物理CPU数量加一。V=s可以显示出编译的详细信息。首次编译大概需要几个小时的时间。
错误排查:
编译失败,一般有两种情况:
1.代码下载链接失效。首次编译时,编译程序会实时从网上下载一些软件包的代码。如果下载链接失效,编译就会失败。这时需要根据软件包的名称,从网上自行下载,然后放在 openwrt/dl/ 目录下,执行 make -j2 V=s 继续编译即可。
2.软件包自身有问题。这时重新执行 make menuconfig ,取消对应软件包选中即可。这种情况比较少见,目前已知的有 tor 等。
编译成功,但没有生成固件。这种情况一般是因为选中的软件包过多,导致固件大小超过16MB。重新执行 make menuconfig,去掉一些软件包,重新执行编译即可。
得到固件。在排除了所有错误后,现在终于得到了固件。对于如意云RY-1,固件在 openwrt/bin/ramips 目录下,形如
openwrt-ramips-mt7620n-rt-n14u-squashfs-sysupgrade.bin
openwrt-ramips-mt7620n-wrtnode-squashfs-sysupgrade.bin
openwrt-ramips-mt7620n-mlw221-squashfs-sysupgrade.bin
openwrt-ramips-mt7620n-wr8305rt-squashfs-sysupgrade.bin
等等。
⑶ 如何使用Maven编译Github上的工程
思路一:下载源码,自己下载依赖lib,构建编译环境,成功;
1. 从maven 地址下载,一般关心下面红色的3个,带sources的肯定就是源码了,但是里面没有相关依赖关系,这个可以看 .pom 文件;
将sources.jar 变为zip 文件,解压出来;
在你项目的 androidstudio project 中新建一个 Java library;命名为 nettylib-4.0.14
将2中源码文件io/netty/ 拷贝到src/main/Java/ 目录下
studio sync,编译看报错的地方,或者根据 1 中地址里面的 pom 文件,找到netty 编译需要依赖的第三方 jar
依赖jar 查询地址:
最后nettylib-4.0.14 中的 build.gradle 配置如下:
其中会遇到不少问题,我搞了很久,因为走了些弯路,如上图,我直接贴出来配置了,但是仍然有少数的文件会报错,因为和项目无关,所有直接删掉啦;
编译可能会遇到各种错误,我就不一一贴出来了,大家有问题,请留言;
思路二:在github上下载源码,并且按照其设置来配置编译环境
git 源码地址:
编译环境搭建:
主要有eclipse +maven 和使用IDEA
1. 使用eclipse +maven,比较容易报错,因为eclipse 和maven 可能有不兼容的情况;
建议使用前最好,进入netty下载目录,
1。mvn install 在本地Repository中安装jar
2。mvn eclipse:eclipse 生成eclipse项目
然后就多了 .classpath 和 .project,可以直接导入eclipse
我2种都试过啦,eclipse 报错比较难搞定,最后使用的是IDEA;
直接以maven 工程导入就行了,导入后,编译也ok
⑷ 如何在windows环境下搭建qnx编译环境
1.<BUILD_ROOT>是指正确的目录,如E:\community.qnx.com\svn\repos\coreos_pub,里面有trunk,源码在里面。
2.如果不是在Neutrino self-hosted下运行( then you will need to tell the build process to ignore the content of the GNU configure style source moles.) 运行此命令,大概运行几分钟。(hide-gnu.sh可下载)
% ksh hide-gnu.sh <BUILD_ROOT>
3.创建目录(Create a staging directory for installed binaries and headers to go )
% cd <BUILD_ROOT>
% mkdir stage
4.按文档中方法建立qconf-override.mk文件,也是在<BUILD_ROOT>目录下。内容如下:
USE_INSTALL_ROOT=1
INSTALL_ROOT_nto=<BUILD_ROOT>/stage
VERSION_REL=6.3.0
注意一定要使用“/”换掉Windows的“\”
5.% export QCONF_OVERRIDE=<BUILD_ROOT>/qconf-override.mk
Windows下用set替代export.也可直接在我的电脑->环境变量里增加。还是要注意"/"问题。
6.基本没问题了,
内核:
% cd <BUILD_ROOT>/trunk
% make OSLIST=nto CPULIST=x86 hinstall
% make OSLIST=nto CPULIST=x86 install
网络:
% cd <BUILD_ROOT>/tags/6.4.0/GA
% make CPULIST=x86 install
or:
% cd <BUILD_ROOT>/trunk
% make CPULIST=ppc install
等等
---------------------------------------------------------------------
问题:E:\Delores\QNX_SRC\coreos_pub\trunk\utils\r\rtc编译出错
无法找到头文件:
#include <hw/i2c.h>
看了一下common.mk,发现有下面的路径,联想fondry27上说的,hardware里面都是硬件相关的头文件,公开的源码里没有这个目录。看来是没办法编译rtc了,不过也没啥用。把rtc目录剪切掉继续编译。
EXTRA_INCVPATH = $(PROJECT_ROOT)/../../../lib/util/public
EXTRA_INCVPATH += $(PROJECT_ROOT)/../../../hardware/startup/lib/public
(可惜我不懂这是什么意思,于是我从BSP里随便找了个i2c.h放到D:\QNX640\target\qnx6\usr\include\hw目录下)
-----------------------------------------------------------------------------------
(这个我没遇到,因为我照着先做了,哈)
问题:编译textmode出错
找不到头文件。发现qnx640下根本没有这些东东。只有从632里复制了。
#include <graphics/display.h>
#include <graphics/disputil.h>
#include <graphics/vbios.h>
从E:\QNX632\target\qnx6\usr\include复制graphics目录到E:\QNX640\target\qnx6\usr\include下。
编译textmode通过。
⑸ CodeBlocks 如何搭建一个编译Qt程序的环境
你肯定也是照着这个做的吧
http://www.qtcn.org/bbs/read.php?tid=11847
你是到哪一步不行的?
⑹ 03 Puerts for Unity 搭建 Ts 编译环境
在上两节中,脚本文件内容一直都是 Js。Ts 作为 Js 的超集,不能直接丢进 V8 中运行,其在运行时仍然是以 Js 形式出现的。
所以,还需要搭建 Ts -> Js 的编译环境。
Ts 编译器有很多。例如:tsc(亲儿子)、esbuild、swc 等...
这里将介绍两种方案:
可以将以下内容,复制到初始化好的 package.json 中。
这里稍对其内容稍作介绍
在项目目录下运行 yarn 或 npm install 来拉取依赖到本地,拉取到的所有的依赖都将保存在 node_moles 目录中。
该文件用于配置 Ts 的 相关配置项
修改文件内容如下,稍后对参数稍作讲解:
参数基本说明:
该配置文件主要有以下几个作用:
对于该配置文件有以下几个要求:
在 Assets/Editor/ 目录下(没有则手动创建该目录),创建 PuertsConfig.cs 文件,内容如下:
出于轻量和速度考虑,且这里只需要对 Js 进行一些简单处理,并不需要用到诸如 Webpack、Grunt、Gulp...这些强大的工具。
所以自己撸一个编译相关的处理脚本,在项目根目录下创建 Build.js ,其内容如下:
运行 yarn run watch:swc 或 yarn run watch:tsc 启动监听编译,这样 TypeScript 目录下所有的 ts 文件有任何改动。都会实时编译。
在 TypeScript/ 目录下创建 main.ts 文件,内容如下:
看一下 Assets/StreamingAssets/Scripts/ 有应该有编译出对应的 Js 文件,如果没有可以尝试重新保存一下文件或执行 yarn run build:tsc 手动编译(只编译一次)。
试着运行下游戏试试吧!
⑺ 如何在mac下搭建C/C++,Java的编译环境
步骤如下:
1. Mac OS X 本身已经安装好 jdk,所以搭建 Java Eclipse环境很简单,只需要下载适合系统的 Eclipse即可,首先查看系统是几位的(点击 Mac 屏幕左上角的苹果 Logo,选择“关于本机”,在弹出的方形窗口里点击“更多信息…”按钮,再点击"系统报告…"按钮,在“软件”一栏就能看到目前你的苹果电脑 Mac OS X 系统是否开启 64 位运算了。)
2.下载 Eclipse( Java 和 C/C++的都需要)http://www.eclipse.org/downloads/
3.安装 gcc编译器 XCode(为 Eclipse Java集成 C/C++做准备)。
判断系统里是否已经安装 gcc编译器的方法是,打开一个终端窗口(在实用工具文件夹里),输入命令 g++,没有则输出 command not found,若安装了则输出 not input files。 XCode在 mac电脑的随机安装光盘里就有,最新版可以上苹果官网上下载(http://developer.apple.com/technologies/xcode.html),但是需要注册一个 Apple Developer帐号后才能下载。按照安装程序步骤进行安装就可以了。 安装完后打开xcode,Preferences里面有个Downloads里面有个components选项,里面有个command line tools 安装上即可。
4. Eclipse整合 Java与 C/C++
解压缩刚下载下来的两个版本Eclipse (注意放在不同的地方,防止因为文件名相同覆盖),然后将C/C++ 版本的Eclipse 里面的plugins 文件夹中的内容全部复制,粘贴到Java 版本的Eclipse 里面的plugins 文件夹下面(注意:不能覆盖已有的文件或文件夹),OK 工具都弄好了,现在就剩下测试了。
5. 先创建一个 Java工程
6. 创建一个 C++项目
7. 编译、运行程序
⑻ MTK的开发环境怎么搭建
一、开发环境设立
以下表述中提到的相关压缩包或安装文件到华禹ftp服务器下载,部分文件要到群共享里面下,那里是最新的。
华禹ftp服务器:IP:220.113.15.15,帐号为study-bbs.com,密码为study-bbs0304
P1300的QQ群号: 15762255
P1300_Build_Guide.rar来自ftp服务器,“华禹\MTK相关部分”目录下
手机开发板C语言开发视频.rar来自ftp服务器,“华禹\MTK相关部分”目录下
huayu109_ads1.2.rar来自ftp服务器,“华禹\旋风001手机模块\1.工具类”目录下
huayu102_ADS12_Patch_Windows.rar同上
huayu106_perlzip.rar同上
huayu108_SourceInsight3.5.rar同上
huayu101_p1300软件使用工具及开发指南.rar同上
huayu201_P1300_V1.7_Release.rar文件来自群共享
huayu203_P1300_V1.7_Release_patch.rar文件来自群共享
FlashTool_v3.0844.00.rar文件来自群共享
1、开发主机要求及所需工具:
操作系统:Windows 2000, WinXP. 推荐Windows 2000 with SP2 or later.
编 译 器:ADS (Arm Developer Suite) v1.2 [Build 842]
Perl解析:ActivePerl, 推荐使用ActivePerl 5.6.1版本
仿真工具:MTK PC Simulator
跟踪工具:Catcher_L1 v3.10.01,从串口输出调试信息,只做普通UI应用的话,大致不会用到,用PC仿真工具就好了
烧录工具:FlashTool_UI v3.1.05 或 FlashTool_v3.0844.00
其他:PL2303_Driver_XP2K v20,这是下载线用到的USB串口驱动,以前机器上装过PL2303驱动的就不必再装了
二、开发环境建立过程:
新建一个目录,英文的好了,否则有些工具不认识中文路径,这里以E:\MTK_P1300为例说明,下面我用文字和图片简单说明下安装过程,更详细的安装过程可以看压缩文件“手机开发板C语言开发视频.rar”中的Flash文件“P1300_Build_Env.swf”。
(1)安装ADS1.2
解压文件huayu109_ads1.2.rar到某个目录,比如说解压到“E:\MTK_P1300”,解压完后运行“E:\MTK_P1300\ADS1.2\Setup.exe”,一路按下一步,最后安装License时选定文件“E:\MTK_P1300\ADS1.2\CRACK\ license.dat”,然后接着一路下一步直到安装完。安装完后删掉目录“E:\MTK_P1300\ADS1.2\”,节省磁盘空间。
(2)安装ADS补丁
运行huayu102_ADS12_Patch_Windows.rar压缩文件中的ADS_Patch_Window.exe,这是个自解压的压缩文件,选Unzip解压到上一步ADS的安装目录(缺省是C:\Program Files\ARM\ADSv1_2),解压过程中如果问到是否覆盖,全部选覆盖好了。
(3)安装脚本解释器Perl
直接运行压缩包huayu106_perlzip.rar里面扩展名为msi的安装文件,缺省安装就好,一路Next,呵呵。
上述几步完成后,编译环境基本建立,此时可以开一个dos窗(开始菜单->运行->输入cmd->确定)看一下,安装正常应该能顺利执行以下命令,如下图:
注意看版本号,应该是ADS1.2 [Build 842],不是的话可能没打补丁,或补丁打的位置不对,请看第2步ADS补丁部分的说明并重新打一次,直到版本号对为止,哈哈。
这是perl解释器的运行画面。
注1:上述安装过程会自动创建编译环境所需的环境变量,如果发现编译不正常了,可能是安装了其他编译工具导致冲突,这时建议查看下系统环境变量,把Perl和ADS的安装目录调到最前面,同时从path中去掉可能会产生冲突的编译工具链的路径(例如winavr),如下图所示(我是安装到D盘滴,缺省是C盘,不过我C盘几乎被我塞满了):
如果嫌改path麻烦(因为要用到其他编译工具链的时候还得改回去),还有一种办法,就是改make.bat批处理,具体见注4中相关说明。
注2: 如果安装ADS时,改变了默认安装路径,需要修改源码中的设置,源码目录树解压过程见模拟器编译环节相关介绍。
1. make\Option.mak
2. ----------------------------------
3. ifeq ($(strip $(COMPILER)),ADS)
4. DIR_ARM= c:\progra~1\arm\adsv1_2 # 修改这里
5. DIR_ARM := $(strip $(DIR_ARM))
6. DIR_TOOL = $(DIR_ARM)\bin
7. DIR_ARMLIB = $(DIR_ARM)\lib
8. DIR_ARMINC = $(DIR_ARM)\include
9. endif
10. ------------------------------------------------
比如改装到D盘了,这里把红色部分“c”改成“d”就好了
(4)代码编辑环境
运行压缩文件huayu108_Source Insight3.5.rar中的安装文件安装即可。至于编辑器,这个看个人喜好了,不过Source Inside看代码蛮方便的。
(5)PC机模拟器
模拟器MTK PC Simulator是用来在PC上仿真调试用的,要安装VC6 SP6(同时要安装Uuicode 静态和动态库,没有装Unicode库的可以用“huayu103_MTK模拟器DLL补丁.zip”中的库,拷到系统目录“%windir%\system32”下即可)。我机器上的VC是有装Unicode库的,没装过Unicode库的如果在模拟器编译或运行中出现问题,建议重装下VC6,安装时勾选Unicode库,并打上相关补丁到SP6。
模拟器能模拟真机的大部分行为,这样能给调试带来很大便利,不需要每次改动都要烧录。
模拟器要从源码编译,解压压缩包“huayu201_P1300_V1.7_Release.rar”里面的文件“HUAYU_P1300_V1.7_Release.rar”到目录“E:\MTK_P1300”,此时会出现目录“E:\MTK_P1300\P1300_V1.7_Release”,这就是P1300的代码目录树了;接着打上最新的补丁,解压压缩包“huayu203_P1300_V1.7_Release_patch.rar”里面的压缩文件“HUAYU_P1300_V1.7_Release_patch.rar”到目录
“E:\MTK_P1300\P1300_V1.7_Release”,解压时选择全覆盖以替换被修改过的文件,打补丁之前对目录树里面的文件进行修改过的,需要手动再加上去。
编译PC仿真器之前需要先把刚才上面得到的目录树build一次,开一个dos窗,盘符和目录转到代码目录树对应的盘符和目录,例如:
1. E:
2. cd E:\MTK_P1300\P1300_V1.7_Release\
3. make new
注3:第一次make的时候要用“make new”,make new的时间比较长(慢的机器搞不好要2小时以上),编译过程中间会出现一些文件找不到的信息,只要编译过程没意外终止,那些信息可以忽略。编译日志文件位置: build\NEOTEL25_06B\log\,要查看编译过程有啥问题就看这个目录下的文件了;生成的bin文件位置: build\NEOTEL25_06B\*.bin,下载烧录就是烧bin文件。
这里顺带介绍下build的命令格式:
make new 清除后重新编译整个项目
make resgen 重新生成资源
make remake重新编译链接项目
make viewlog xxx 查看模块xxx的编译日志
make查看可以用make选项帮助信息
注4:如果机器上装了其他gcc编译工具链(比如winavr之类)的话可能要手动改下Path,否则编译会出错,修改Path的方法见注1,也可以修改批处理文件“E:\MTK_P1300\P1300_V1.7_Release\make.bat”,在“perl make2.pl %*”之前加上下面两句:
1. set PERL5LIB=D:\perl\lib
2. set PATH=D:\perl\bin;d:\progra~1\arm\adsv1_2\bin;E:\MTK_P1300\P1300_V1.7_Release\tools;c:\windows\system32;c:\windows;c:\windows\system
注意,上面的路径是我机器上的,不是缺省安装路径,要根据自己的实际安装路径做修改。
下面开始编译PC仿真器了,用VC6打开工程文件“E:\MTK_P1300\P1300_V1.7_Release\plutommi\mmi\ PC_Simulator.dsw”,然后开始编译,编译时间比较长,具体看机器配置了,这时又可以干点别的啥了,呵呵。
因为仿真器工程涉及文件较多,编译费时,建议编译过程中电脑上少开窗口,特别是网络类的,如QQ,有时会发现开QQ后,编译过程中VC会挂死,呵呵。有可能是开QQ后防火墙过滤网络数据占用较多系统资源,如果发现VC编译特别慢或干脆挂死,可以重启动一下电脑,只开必要的窗口,然后开始编译。
如果编译过程中发现怪异的问题,如:
1. incomingstringiddef.h(120) : error C2059: syntax error : 'constant'
2. 或者
3. error C2065: 'STR_CM_REDIAL' : undeclared identifier
4. 之类
5.
这个时侯你可能需要看一下你VC相关路径的设置顺序,如下图:
把VC原本的头文件路径调整到最前面,我刚开始编译的时候SDK的头文件在前面,编译总是通不过,改一下就好了,库也一样都调整下比较保险,呵呵。
(6)Tracer跟踪工具
解压文件P1300_Build_Guide.rar到E:\MTK_P1300,然后在文件管理器进入目录“E:\MTK_P1300\P1300_Build_Guide”,接着解压Catcher_L1_v3.10.01.zip到当前目录下的Catcher_L1_v3.10.01子目录,进入子目录Catcher_L1_v3.10.01,发送一个Catcher.exe的快捷方式到桌面。
在需要用到TRACE的时候,在代码中使用函数
void kal_prompt_trace(mole_type mod_id, const kal_char *fmt,...); 打印需要查看的信息,使用Catcher跟踪查看。
这个有点类似Linux的Kernel Debug工具,具体使用方法见文档《cather使用手册.doc》,这个文档可在压缩包“huayu101_p1300软件使用工具及开发指南.rar”里面找到。
(7)烧录工具
解压文件“E:\MTK_P1300\P1300_Build_Guide\ FlashTool_UI_exe_v3.1.05.zip”到当前目录,然后进入目录“E:\MTK_P1300\P1300_Build_Guide\FlashTool_v3.1.05”,发送一个Flash_tool.exe的快捷方式到桌面好了。
还有个下载工具FlashTool_v3.0844.00.rar,也是不用安装,解压后直接用的,据说烧录速度比上面那个快。
具体使用方法见文档《flash_tool_MT平台使用教程.doc》,这个文档可在压缩包“huayu101_p1300软件使用工具及开发指南.rar”里面找到。
(8)USB串口下载线驱动
运行压缩文件
1. “E:\MTK_P1300\P1300_Build_Guide\ PL2303_Driver_XP2K_v20.zip”
里面的可执行文件进行安装,一路下一步,这里不再赘述。
nucleus实时操作系统MTK手机软件系统工程和配置简介
MTK使用了nucleus实时操作系统,在其上做了个内核抽象层的封装,以适应多种实时操作系统,如oscar、ThreadX、nucleus。整个软件系统包括nucleus操作系统、平台设备驱动、协议栈、文件系统、WGUI、MMI、J2ME等。在这里MMI部分几乎包括了操作系统内核、协议栈、文件系统之上的所有部分,其中WGUI也在其中。
MTK的PC模拟版使用VC的编译器和链接器生成,ARM版使用ADS1.2的编译器和链接器生成。因为MTK的整个软件系统是一个很庞大而且复杂的工程,并且要支持多个MTK的产品系列和多家客户的客户化支持,使用集成开发环境(IDE)已经无法胜任,而且很难做到整个工程的自动构建和资源、代码的生成。所以MTK的软件系统使用了windows下的GNU开发工具链(MinGW)来进行工程的管理、配置和构建,MTK将MinGW放到了第三方工具中。
另外还使用了perl脚本来解析用户输入的命令行参数,因此第三方工具中还包含了ActivePerl(windows下的perl解释器)。不过,整个软件系统并没有使用MinGW的全部工具,好象只使用了make这个工具,由几个Makefile控制了构建的过程,在编译和链接时根据最终生成PC模拟版还是ARM版而分别调用VC的编译器和链接器或ADS1.2的编译器和链接器。
⑼ 如何搭建 android 开发环境
一.认识android的架构
Android其本质就是在标准的Linux系统上增加了Java虚拟机Dalvik,并在Dalvik虚拟机上搭建了一个JAVA的application framework,所有的应用程序都是基于JAVA的application framework之上。
android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和linux核心层。
二.搭建环境
搭建开发环境
对国内的开发者来说最痛苦的是无法去访问android开发网站。为了更好的认识世界,对程序员来说,会翻墙也是的一门技术,带你去领略墙外的世界,好了,不废话了, 国内开发者访问(androiddevtools) 上面已经有了所有你要的资源,同时可以下载到我们的主角framework
但是这样的搭建只能去阅读源代码,我们无法去更进一步去实现自己的rom,我们看到锤子的系统在早期的开放rom是自己从新实现了framework的代码,现在看起来他成功了,所以我们还要去搭建android系统的源码编译环境。
搭建源码编译环境
三.开始主题
在一开始写c程序的时候都有一个运行的入口,比如
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
//这里的main就是应用的入口
int main(int argc, const char * argv[]){
return 0;
}
在计算机网络原理中我们用socket实现一个服务器端,不断的接听客户端的访问,而且他的代码是这样实现的:
#include <winsock2.h>
#pragma comment(lib, "WS2_32.lib")
#include <stdio.h>
void main()
{
WORD wVersionRequested;//版本号
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(2, 2);//2.2版本的套接字
//加载套接字库,如果失败返回
err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0)
{
return;
}
//判断高低字节是不是2,如果不是2.2的版本则退出
if (LOBYTE(wsaData.wVersion) != 2 ||
HIBYTE(wsaData.wVersion) != 2)
{
return;
}
//创建流式套接字,基于TCP(SOCK_STREAM)
SOCKET socSrv = socket(AF_INET, SOCK_STREAM, 0);
//Socket地址结构体的创建
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);//转换Unsigned long型为网络字节序格
addrSrv.sin_family = AF_INET;//指定地址簇
addrSrv.sin_port = htons(6000);
//指定端口号,除sin_family参数外,其它参数都是网络字节序,因此需要转换
//将套接字绑定到一个端口号和本地地址上
bind(socSrv, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));//必须用sizeof,strlen不行
listen(socSrv, 5);
SOCKADDR_IN addrClient;//字义用来接收客户端Socket的结构体
int len = sizeof(SOCKADDR);//初始化参数,这个参数必须进行初始化,sizeof
//循环等待接受客户端发送请求
while (1)
{
//等待客户请求到来;当请求到来后,接受连接请求,
//返回一个新的对应于此次连接的套接字(accept)。
//此时程序在此发生阻塞
SOCKET sockConn = accept(socSrv, (SOCKADDR*)&addrClient, &len);
char sendBuf[100];
sprintf(sendBuf, "Welcome %s to JoyChou",
inet_ntoa(addrClient.sin_addr));//格式化输出
//用返回的套接字和客户端进行通信
send(sockConn, sendBuf, strlen(sendBuf)+1, 0);//多发送一个字节
//接收数据
char recvBuf[100];
recv(sockConn, recvBuf, 100, 0);
printf("%s\\n", recvBuf);
closesocket(sockConn);
}
}
他采用了一个while死循环去监听客户端的请求。
先上源代码
public final class ActivityThread {
public static void main(String[] args) {
SamplingProfilerIntegration.start();
CloseGuard.setEnabled(false);
Environment.initForCurrentUser();
EventLogger.setReporter(new EventLoggingReporter());
Security.addProvider(new AndroidKeyStoreProvider());
final File configDir = Environment.getUserConfigDirectory(UserHandle.myUserId());
TrustedCertificateStore.setDefaultUserDirectory(configDir);
Process.setArgV0("<pre-initialized>");
Looper.prepareMainLooper();
//从中可以看到为app开辟了一个线程进入了looper之中
ActivityThread thread = new ActivityThread();
thread.attach(false);
if (sMainThreadHandler == null) {
sMainThreadHandler = thread.getHandler();
}
AsyncTask.init();
if (false) {
Looper.myLooper().setMessageLogging(new
LogPrinter(Log.DEBUG, "ActivityThread"));
}
Looper.loop();
throw new RuntimeException("Main thread loop unexpectedly exited");
}
}
看到源码失望了,没有一个while循环啊,其实用了他方法实现
//用一个looper的机制循环监听响应
Looper.prepareMainLooper();
Looper.loop();
进一步深入代码
public static void loop() {
final Looper me = myLooper();
if (me == null) {
throw new RuntimeException("No Looper; Looper.prepare() wasn't called on this thread.");
}
final MessageQueue queue = me.mQueue;
Binder.clearCallingIdentity();
final long ident = Binder.clearCallingIdentity();
// 在这里看到了一个循环监听消息
for (;;) {
Message msg = queue.next(); // might block
if (msg == null) {
// No message indicates that the message queue is quitting.
return;
}
Printer logging = me.mLogging;
if (logging != null) {
logging.println(">>>>> Dispatching to " + msg.target + " " +
msg.callback + ": " + msg.what);
}
msg.target.dispatchMessage(msg);
if (logging != null) {
logging.println("<<<<< Finished to " + msg.target + " " + msg.callback);
}
// Make sure that ring the course of dispatching the
// identity of the thread wasn't corrupted.
final long newIdent = Binder.clearCallingIdentity();
if (ident != newIdent) {
Log.wtf(TAG, "Thread identity changed from 0x"
+ Long.toHexString(ident) + " to 0x"
+ Long.toHexString(newIdent) + " while dispatching to "
+ msg.target.getClass().getName() + " "
+ msg.callback + " what=" + msg.what);
}
msg.recycleUnchecked();
}
}