colinux-cetos53-win7交叉编译环境配置

时间:2021-06-28 09:26:21

colinux-cetos53-win7交叉编译环境配置

写自己的操作系统的时候需要使用linux来编译.c程序,生成elf格式的

.bin程序,将它拷贝到操作镜像文件中,才能被引导区的程序调用。
最常用的是gcc,ld和objcopy。gcc用于编译出链接用的.o文件,ld用于

将.o文件链接成elf格式的文件,这一步最重要。在windows下是没有很好

的办法生成elf文件。试过cygwin,cygwin的初衷是,在windows下模拟

linux程序的运行,也就是说,如果使用gcc编译程序,会使用专为
windows设计的库,调用windows api来生成程序。所以在ld使用的时候
会出现如下错误:
$ ld -o mykernel -Ttext 0x9000 -e main mykernel.o
ld: warning: cannot find entry symbol main; defaulting to 00009000

mykernel.o:mykernel.c:(.text+0xa):对‘__main’未定义的引用


这一点还是令人很失望的。
因此,需要有一种能直接模拟linux的方法来编译程序,最好的情况是,
安装好后,可以在windows下使用.bat文件直接编译成.bin文件。但是
查找下来,没有这种方法。使用虚拟机又显得太臃肿。
之后发现了colinux,是交叉编译的很好的工具,就用它吧。

首先下载colinux,这里使用colinx-0.7.9,按照步骤安装,不再赘述。

一开始使用的是colinux官网下载的Debian-3.0r0.ext3.1gb这个镜像,
但是最终做下来,联网好了以后,却怎么也不能安装gcc,所以最后找

到了centos53这个非官网映像。

(debian镜像可能太旧了,现在官网上Debian-6.0.1-squeeze.7z也可

以用了,不需要安装,解压即用。后面配置和centos基本相同)


这个映像下载好后,解压出来,将run.txt里colinux的安装路径更改一
下就能运行centos了。但是为了能联网,还需要一些其他配置。

首先安装好colinx后,打开网络和共享中心->更改适配器设置里面,可以
看到属性为TAP-Win32 Adapter V8 (coLinux)的网络设备。将这个设备重
命名为"colinx",然后将当前联网的网络设备的ICS打开(ICS就是网络共享,
在无线网络链接属性的"共享"选项卡上,选择"允许其他网络用户通过此计
算机的Internet连接来连接"),然后指定"colinx"这个共享设备。
之后打开colinux的属性,ipv4中会自动分配ip=192.168.137.1,记下后面
在centos中配置网络时要用到。

然后在run.txt里将eth0设置为
tuntap,"colinux"
由于之前查找的资料说使用pcap-bridge可以联网,因此在安装好colinux
之后又安装了WinPcap_4_1_3,这是使用pcap必须安装的驱动。
但是试过之后发现只有tuntap才能联网,可能因为我使用的是无线网卡的
缘故,所以pcap就装在这儿了,如果使用tuntap有问题,请安装上pcap驱
动试一下。

然后启动centos,按下面的方法配置网络:
>>vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=centos.centos
>>vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEBICE=eth0
BOOTPROTO=static
ONBOOT=yes
TYPE=Ethernet
NETWORK=192.168.137.0
GATEWAY=192.168.137.1
NETMASK=255.255.255.0
IPADDR=192.168.137.3
之前记下的ip是192.168.137.1,就是网关ip,网络和掩码对应,就是最后
置零(可根据自己的网络设备ip设定)XXX.XXX.XXX.0。最后ip只要根据掩
码分配一个不会重复的就可以了。
>>vi /etc/resolv.conf
nameserver 10.203.104.108
nameserver 10.203.104.73
这是配置DNS,如果不配置,则只能ping通ip地址而不能ping通域名地址,而
DNS就是将域名地址解析为ip地址的,所以如果不配置将不能上任何网络。
这里DNS可以在路由器配置中找到。我的路由器是Mercury的,输入192.168.1.1
进入,用户admin密码admin。在网络参数-WAN口设置中,如果是PPPoE联网的,
在高级设置中会有DNS服务器的ip,如果没有,可以使用cmd,输入
nslookup www.XXX.com
因为需要解析域名地址,会有很多DNS,可以在结果的Addresses中找到几个,
填在里面,这样网络配置就基本可以了。

输入reboot重启centos或者输入
/etc/init.d/network restart
重启网络,
使用
ping 192.168.1.1
ping www.XXX.com
检查网络是否正确。

网络正确以后,就可以安装gcc了,安装gcc很简单:
yum -y install gcc
等安装完,就可以使用了。

最后一步,使用windows文件共享。colinx提供了很方便的windows文件共享功能,
本地和linux中能保持文件的同步。VMware虽然也提供这样的功能,但是VMware需要
linux本身安装WMware的一个插件包来实现共享,对于简单的控制台界面来说,这样
的安装会很麻烦,而且可能会有许多不能预知的错误。所以在colinux上实现交叉编
译是很方便的。

在run.txt中,输入一行
cofs0="E:\linux"
这样就将E:\linux设置为共享文件,并且在centos的/dev下自动生成cofs0,之后只要
mount就行了:
mount -t cofs 0 /mnt/share

由此,配置完成,可以写一个shell脚本来执行刚打开centos的mount操作,另一个shell
脚本执行bin文件的编译生成。
注意,所有这些,包括centos解压目录和共享目录,都不能包含中文目录。