编译配置相关

编译配置相关
编译配置相关

相关文件:

uip-conf.h uip配置文件.

uipopt.h uip配置选项

针对于工程的配置选项:

uip有大量的配置选项,它们都可以根据工程需要重载.它们被保存在一个工程相关的

uip-conf.h文件中,所有配置的名称都有UIP_CONF前辍.

1.#define UIP_CONF_MAX_CONNECTIONS 最大的TCP连接数.

2.#define UIP_CONF_MAX_LISTENPORTS 最大监听的TCP端口数.

3.#define UIP_CONF_BUFFER_SIZE uip 缓冲区大小.

4.#define UIP_CONF_BYTE_ORDER CPU字节顺序.

5.#define UIP_CONF_LOGGING 是否开启日志

6.#define UIP_CONF_UDP 是否启用UDP功能

7.#define UIP_CONF_UDP_CHECKSUMS 是否启用UDC校验和.

8.#define UIP_CONF_STATISTICS UIP配置统计是否开启.

9.typedef uint8_t u8_t 8位的数据类型.

10.typedef uint16_t u16_t 16位的数据类型.

11.typedef unsigned short uip_stats_t 统计数据类型.

复制代码

静态配置选项:

这些选项可以用来静态配置IP地址,条件是UIP_FIXEDADDR必须设为1. 指定节点的配置选项包括IP地址,子网掩码,默认路由及以太网址.而后三项只有在以太网中时才可用.

1.#define UIP_FIXEDADDR 决定uIP使用固定IP与否.

2.#define UIP_PINGADDRCONF 设置ping地址.

3.#define UIP_FIXEDETHADDR ARP模块的编译是否用固定的MAC地址.

复制代码

IP配置选项:

1.#define UIP_TTL 64 定义UIP包的生存时间.TTL.

2.#define UIP_REASSEMBLY 打开IP包重新组装功能.

3.#define UIP_REASS_MAXAGE 40 IP片断扔掉之前在重组装缓冲区等待的时间.

复制代码

UDP配置选项:

1.#define UIP_UDP UDP支持是否编译

2.#define UIP_UDP_CHECKSUMS. 是否使用UDP校验和.

3.#define UIP_UDP_CONNS 最大并发UDP连接数.

复制代码

TCP配置选项:

1.#define UIP_ACTIVE_OPEN 决定UIP的打开连接支持是否编译.

2.#define UIP_CONNS 最大同时打开的TCP连接数.

3.#define UIP_LISTENPORTS 最大TCP监听端口数.

4.#define UIP_URGDATA 是否编译TCP紧迫数据提醒.

5.#define UIP_RTO 3 初始重传超时计数,以定时器脉冲个数计.

6.#define UIP_MAXRTX 8 一段数据最大重传多少次才取消连接.

7.#define UIP_MAXSYNRTX 5 一段SYN数据要最大得传多少次,才认定连接请求

失败.

8.#define UIP_TCP_MSS (UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN) TCP

最大段大小

9.#define UIP_RECEIVE_WINDOW 广播接收器的最大窗口大小.

10.#define UIP_TIME_WAIT_TIMEOUT 120 一个连接处于TIME_WAIT状态的最大时

间.

复制代码

ARP配置选项:

1.#define UIP_ARPTAB_SIZE ARP表大小.

2.#define UIP_ARP_MAXAGE 120 ARP表的最大存活年龄,单位为10s.

复制代码

通用配置选项:

1.#define UIP_BUFSIZE UIP包缓冲区大小.

2.#define UIP_STATISTICS 是否编译统计功能.

3.#define UIP_LOGGING 某些事件的日志功能是否编译.

4.#define UIP_BROADCAST 广播功能是否支持.

5.#define UIP_LLH_LEN 链路层头长度.

6.void uip_log (char *msg) 打印UIP日志信息.

复制代码

CPU架构配置:

这里指定的是CPU的大小端模式.当今的CPU多时小端的,然而最著名的例外就是motorola 的CPU.它是大端的.应根据CPU的大小端模式不同,配置BYTE_ORDER.

1.#define UIP_BYTE_ORDER UIP所运行的CPU大小端模式.

复制代码

针对应用的配置:

UIP应用是使用单个应用函数数实现的.只要TCP/IP事件发生,uIP就会调用这个函数.这个函数的名字必须在编译时使用UIP_APPCALL注册到uIP.

uIP应用可以在uip_conn结构中保存应用状态.这是通过利用typedef uip_tcp_appstate_t 和

uip_udp_appstate_t指定应用的类型实现的.包含此定义的文件必须被包含在uipopt.h文件

中.

下面是一个例子:

1.void httpd_appcall(void);

2.#define UIP_APPCALL httpd_appcall

3.

4.struct httpd_state {

5.u8_t state;

6.u16_t count;

7.char *dataptr;

8.char *script;

9.};

10.typedef struct httpd_state uip_tcp_appstate_t

复制代码

1.#define UIP_APPCALL smtp_appcall TCP/IP事件的应答函数名称.

2.typedef smtp_state uip_tcp_appstate_t 存储在uip_conn中的应用状态类

型.

3.typedef int uip_udp_appstate_t 存储在uip_conn中的应用状态类型

4.#define UIP_LITTLE_ENDIAN 3412

5.#define UIP_BIG_ENDIAN 1234

复制代码

1.#define UIP_ACTIVE_OPEN

决定是否支持在uip中打开连接.

如果此工程中工作于uip上层的应用不需要打开TCP连接,可以关闭此项以减小编译后的代码大小.

定义于uipopt.h中的233行.

2. #define UIP_ARP_MAXAGE 120

以10s为单位的ARP表项的最大年龄.

120代表的是20分钟(BSD中的默认值).

定义于uipopt.h中的358行.

引用于uip_arp_timer().

3. #define UIP_ARPTAB_SIZE

ARP表的大小.

如果uip节点可能在本地网络中有很多连接,则此值应设得大些.

定义于uipopt.h中的349行.

引用于uip_arp_init(), uip_arp_out(), and uip_arp_timer().

4. #define UIP_BROADCAST

支持广播.

此标志用于配置广播的支持,仅在开启UDP时才有意义.

定义于uipopt.h中的423行.

5. #define UIP_BUFSIZE

uip包缓冲区大小.

不就小于60字节,不须大于1500字节.这个值越小,TCP的吞吐量就越小,相反越大. 定义于uipopt.h中的379行.

引用于uip_split_output().

6. #define UIP_BYTE_ORDER uip运行的CPU构架的字节顺序,可选值仅有两个,分别为BIG_ENDIAN和LITTLE_ENDIAN.

应用全程:example-mainloop-with-arp.c, and example-mainloop-without-arp.c.定义于uipopt.h中的475行.

7. #define UIP_CONNS

可同时打开的最大TCP连接数.

由TCP连接是静态开辟的,所以减小此选项的值可以减小RAM占用量,每个TCP连接需要大约30字节的RAM.

定义于uipopt.h中的245行.

引用于uip_connect().

8. #define UIP_FIXEDADDR

决定uIP是否使用固定IP地址.

如果使用固定IP地址,则此地址可以在

uipopt.h中指定.否则,如果想用动态的IP地址,则可以使用uip_sethostaddr(),

u ip_setdraddr() and uip_setnetmask()三个宏动态指定.

定义于uipopt.h中的97行.

9. #define UIP_FIXEDETHADDR

决定uIP是否使用固定的MAC地址.

若不使用固定的MAC地址,则可用uip_setethaddr()在运行时动态指定.

定义于uipopt.h中的127行.

10. #define UIP_LISTENPORTS

可以同时监听的最大端口数.每监听一个TCP端口需要两字节内存.

定义于uipopt.h中的259行.

引用于

uip_init(), uip_listen(), and uip_unlisten().

11. #define UIP_LLH_LEN

链路层头的长度.

这个IP头在uip_buf中的编移量.对于以太网来说,此值为14.对于SLIP来说,其值0 .定义于uipopt.h中的448行.

引用于uip_ipchksum(), uip_process(), and uip_split_output().

12. #define UIP_LOGGING

定义是否编译事件日志.

这对于调试是非常有帮助的.如果打开此项,或必须在工程的构架上实现uip_log().

定义于uipopt.h中的408行.

13. #define UIP_MAXRTX 8

在最多多少次重新发送同一段数据之后,就得取消连接.

此项不应改变.

定义于uipopt.h中的288行.

引用于uip_process().

14. #define UIP_MAXSYNRTX 5

一个SYN数据最多可以重传多少次,之后就得认为连接请求失败.

此项亦不应改变.

定义于uipopt.h中的297行.

引用于uip_process().

15. #define UIP_PINGADDRCONF

设定ping IP地址.

如果设定此项,则uip使用ping包来设定其IP地址.此时uip启用时会只有一个空的Ip

地址,而把收到的第一个ping包设为自己的地址.

注意:

此项只有在UIP_FIXEDADDR设为0时才可用.

定义于uipopt.h中的114行.

有点长,楼下继续~

?

本帖最后由逐月于2010-11-17 21:44 编辑

16. #define UIP_REASSEMBLY打开IP包重组.

uip支持碎片IP包的重组.此项特性需要多余的RAM来盛放重组缓冲区.重组代码大小约为700字节.重组缓冲区的大小与uip_buf的大小(由UIP_BUFSIZE配置)相同.

注意:

IP包重组并未经过严格测试.

定义于uipopt.h的156行.

17. #define UIP_RECEIVE_WINDOW

通告的接收器窗口.

如果处理器对输入数据处理能力较慢,则应设得低些(uip_buf的大小),否则应设得高些(32768

字节).

定义于uipopt.h的317行.

18. #define UIP_RTO 3

以时钟脉冲计算的重传超时计数.

此项不应改变.

定义于uipopt.h的280行.

引用于uip_process().

19. #define UIP_STATISTICS

决定是否将统计功能加入编译.

统计功能对于调试和显示用户是非常有帮助的.

定义于uipopt.h的393行.

20. #define UIP_TCP_MSS (UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN)

TCP最大数据段大小.

此值不应大于UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN.

定义于uipopt.h的305行.

21. #define UIP_TIME_WAIT_TIMEOUT 120一个连接应该停留在TIME_WAIT状态的最长时间.

此配置选项没有真正的实现,所以不应理会.

定义于uipopt.h的328行.

引用于uip_process().

22. #define UIP_TTL 64

uip发送的IP包的生存时间(TTL)

通常此项不应更改.

定义于uipopt.h的141行.

23. #define UIP_UDP_CHECKSUMS

是否使用UDP校验和.

注意:

对UDP校验和的支持目前并不包含于uIP,故此项无用.

定义于uipopt.h的195行.

24. #define UIP_URGDATA

TCP紧迫数据通告功能是否编译.

紧迫数据(带外数据)在TCP中很少用到, 所以很少需要.

定义于uipopt.h的273行.

25. typedef uint16_t u16_t

16位数据类型.

这个类型定义定义了通贯uip所使用的16位数据类型.

应用例程:

dhcpc.c, dhcpc.h, resolv.c, resolv.h, smtp.c, smtp.h, telnetd.c, and uip-conf.h.定义于uip-conf.h的76行.

26. typedef uint8_t u8_t8位数据类型.

此类型定义定义了通贯uIP中使用的8位数据类型.

应用例程:

dhcpc.c, dhcpc.h, resolv.c,smtp.h, telnetd.c, telnetd.h, and uip-conf.h.

定义于uip-conf.h的67行.

27. typedef unsigned short uip_stats_t

统计数据类型.

此类型定义定义了通贯uIP使用的统计数据类型.

定义于uip-conf.h的86行.

28. typedef uip_tcp_appstate_t

此种类型的应用状态将会被存储于uip_conn结构中.

它通常被typedef为一种保存应用状态信息的结构.

应用例程:

smtp.h, telnetd.h, and webclient.h.

定义于smtp.h的98行.

29. typedef uip_udp_appstate_t

此种类型的应用状态将会被存储于uip_conn结构中.

它通常被typedef为一种保存应用状态信息的结构.

应用例程:

dhcpc.h.

定义于resolv.h的47行.

30. void uip_log ( char * msg )

打印uip日志信息.

此函数必须为使用uIP的模块实现,uIP每产生一条日志信息就会调用一次这个函数.

PHP的编译配置详细选项

PHP 的编译配置详细选项 简述:PHP 的编译配置详细选项 在详细选项上,除了上述的安装简介外,也可以在编译时加入其它的选项。 apache模块 语法:--with-apache=DIR 说明:用本选项可以让PHP 以apache的模块方式使用,DIR 的字符串可以是/usr/local/apache 或其它安装apache的目录 范例: --with-apache=/var/lib/apache fhttpd 服务器模块 语法:--with-fhttpd=DIR 说明:若使用fttpd 服务器,可以使用本指令编译PHP。用模块的方式配合fttpd 服务器,可以有较好的效率。 Adabas D 数据库 语法:--with-adabas=DIR 说明:数据库系统为Adabas D 数据库时需要加本选项。关于Adabas D 数据库的细节,可以参考https://www.360docs.net/doc/584521289.html,。 范例: --with-adabas=/usr/local/adabasd dBase 资料表 语法:--with-dbase 说明:只要加本选项,不用其它的参数或函数库,PHP 就会让系统有存取dBase 资料表的功能。 filePro 数据库 语法:--with-filepro 说明:不用指定数据库路径及其它函数库等,可以读取filePro 数据库(唯读)。mSQL 数据库 语法:--with-msql=DIR 说明:提供存取mSQL 数据库。更多的细节请参考mSQL 的网站https://www.360docs.net/doc/584521289.html,.au。 范例: --with-msql=/usr/local/Hughes MySQL 数据库 语法:--with-mysql=DIR 说明:提供存取MySQL 数据库。更多的细节请参考MySQL 的网站http://www.tcx.se。 范例: --with-mysql=/usr/local/mysql iODBC 数据库装置 语法:--with-iodbc=DIR 说明:提供ODBC 数据库装置,用来存取后端数据库。更多的细节请参考iODBC 的网站https://www.360docs.net/doc/584521289.html,。 范例: --with-iodbc=/usr/local/iodbc OpenLink ODBC 数据库装置 语法:--with-openlink=DIR 说明:使用OpenLink ODBC 数据库装置,用来存取后端数据库。更多的细节请参

实验四 linux-2.6.35内核的编译和配置

实验四 linux-2.6.35内核的编译和配置 【实验目的】 了解内核的编译过程及配置选项的内容 【实验环境】 1、 Ubuntu 10.10发行版 2、 u-boot-2010.03 3、 FS2410平台 4、 交叉编译器 arm-none-linux-gnueabi-gcc-4.3.2 【实验步骤】 实验步骤中的1-4,已经做过就不要重复了 1、 将实验代码中的rootfs.tar.bz2解压到/source 下,已经做过就不要重复了 $ tar xvf rootfs.tar.bz2 –C /source 2、 解压内核并进入内核目录 $ tar xvf linux-2.6.35.tar.bz2 $ cd linux-2.6.35 3、 修改Makefile 修改linux-2.6.35 目录下的Makefile ,找到 ARCH ?= $(SUBARCH) CROSS_COMPILE ?= 改为 ARCH ?= arm CROSS_COMPILE ?= arm-none-linux-gnueabi- 4、 配置内核 设置平台 设置编译工具

make menuconfig Kernel Features ---> [*] Use the ARM EABI to compile the kernel [*] Allow old ABI binaries to run with this kernel (EXPERIMENTAL) 5、添加驱动文件 将实验代码2410GPIO_TEST_26/2410GPIO_TEST_drv.c拷贝到drivers/char下 6、修改对应Kconfig 修改drivers/char/Kconfig,在menu "Character devices"下面 加入如下内容: config 2410GPIO_TEST_DRV tristate "S3C2410 test drv Device Support" depends on ARCH_S3C2410 ---help--- support led test device driver on FS2410 develop board 7、修改对应Makefile 在drivers/char/Makefile 中 找到在obj-$(CONFIG_HANGCHECK_TIMER) += hangcheck-timer.o , 在其下一行添加: obj-$(CONFIG_2410GPIO_TEST_DRV) += 2410GPIO_TEST_drv.o 8、静态编译内核 ?配置内核时按“空格”选择,配置完成后保存退出 $ make menuconfig Device Drivers ---> Character devices ---> <*> S3C2410 test drv Device Support ?重新编译内核并把内核拷贝到tftpboot下 $ make zImage

Ubuntu8.04下的ARM交叉编译工具链(arm-linux-)详细介绍.

原文链接与:https://www.360docs.net/doc/584521289.html,/u1/58901/showart_1335004.html 实验室的机器配置太低,速度太慢实在是受不了。说是已经升级了,内存从128M升级到了256M。My god!这年头还能到什么地方找那么多128的内存条去阿?哇嘎嘎。真是服了。。。哈哈 打开一个pdf文件要等老半天。基本上没有办法工作。于是想在自己的笔记本上做一个交叉编译环境。我的机器配置也不高,但是相对于实验室的机器来说已经相当不错了。我的机器是单操作系统:只有Ubuntu8.0.4。感觉和windows XP差不多。XP下有的东西,ubuntu下基本上也有。 ps:昨天是我的生日。昨天上午有课,一下午还有今天上午就是在交叉编译的过程中度过的。感觉整个过程挺考验耐心的。下面进入正题。 待续。。。最近两天内补充完整。 ************************************************************************************* 在进行嵌入式在进行嵌入式开发之前,首先要建立一个交叉编译环境,这是一套编译器、连接器和libc库等组成的开发环境。本文结合自己做嵌入式交叉编译开发工作的经验,同时结合自己的体会,做了一个介绍 随着消费类电子产品的大量开发和应用和Linux操作系统的不断健壮和强大,嵌入式系统越来越多的进入人们的生活之中,应用范围越来越广。 在裁减和定制Linux,运用于你的嵌入式系统之前,由于一般嵌入式开发系统存储大小有限,通常你都要在你的强大的pc机上建立一个用于目标机的交叉编译环境。这是一个由编译器、连接器和解释器组成的综合开发环境。交叉编译工具主要由binutils、gcc 和glibc 几个部分组成。有时出于减小libc 库大小的考虑,你也可以用别的c 库来代替glibc,例如uClibc、

实验报告_实验1 C程序的运行环境和运行方法()

实验报告_实验1 C程序的运行环境和运行方法 一、实验目的: 1、熟悉VS 2005/2008/2010的下载、安装及使用,能够在IDE环境中编辑、编译、链接、运行C程序; 2、熟悉C程序的基本结构,能够参考例题代码编写简单C程序; 3、熟悉C语言中注释的用法。 二、实验内容 说明:基础题为必做题,提高题为选做题 1、(基础题) 操作内容:请学生建立新项目(lab_1_1),输入下列代码,并编译、链接、运行:(独立完成) 程序代码: #include int main( ) { printf ("This is a C program.\n"); return 0; }

问题:C程序的编译、链接、运行可以一次性完成吗?清理、重新生成项目(或程序)有什么作用? 答:可以,生成:如果程序没有编译过就全部编译,已编译过的只编译修改的部分,从新生成:先清除一遍,再对所有文件编译。 2、(基础题) 请学生上机编译下列程序,修改其错误,再运行: #include ; main( ) { int a scanf(“%d”,a); Printf(“%d*%d=%d”,a,a,a*a); ] 修改后的程序代码: #include int main() { int a; scanf(“%d”,a); printf(“%d%d%d”,a,a,a*a); return 0; } 3、(基础题)请参考例题代码,按下列要求,写出相应的C程序: 程序代码:#include

int main() { printf(" *\n"); printf(" **\n"); printf(" ***\n"); printf(" ****\n"); printf("*****\n"); return 0; } 4、(提高题)请参考例题代码,按下列要求,写出相应的C程序: 输入圆的半径,输出其周长与面积; 程序代码: #include #define Pi 3.14 int main() { float r,l,s,pi; scanf("%f",&r); l=2*pi*r; s=pi*r*r; printf("%d%d\n",s,l); return 0; }

交叉编译几种常见的报错

交叉编译几种常见的报错 由于是第一次交叉编译,不知道会出现什么问题,思路就是先把gcc和ld都改成arm的,然后遇到什么问题在解决什么问题,以下过程都是在这个思路下进行。 1.指定arm的编译器和连接器: 只是把gcc改为arm-none-linux-gnueabi-gcc,ld改为arm-none-linux-gnueabi-ld,其他的都没有 修改。出现以下错误: arm-none-linux-gnueabi-ld: warning: library search path "/usr/local/lib" is unsafe for cross-compilation arm-none-linux-gnueabi-ld: skipping incompatible /usr/local/lib/libfreetype.so when searching for -lfreetype arm-none-linux-gnueabi-ld: skipping incompatible /usr/local/lib/libfreetype.a when searching for -lfreetype arm-none-linux-gnueabi-ld: cannot find -lfreetype 分析原因是:链接的这些库文件都是在PC编译器下编译出来的,现在把它们和用arm-none-linux-gnueabi-gcc编译出来的文件做链接,当然会出错。 解决方法:这些库重新用arm-gcc重新编译生成相应的库。 下面使用是重新编译库文件的过程: 重新编译freetype 根据交叉编译的文档,我创建了一个文件夹/usr/local/arm-linux来存放编译后的库文件。执行: ./configure –host=arm-none-linux-gnueabi –prefix=/usr/local/arm-linux 注意:host的参数应该是交叉编译环境的前缀。 另外,freetype自动生成的include文件夹有点小问题,编译完成后的include目录结构是 /include/ft2build.h和

操作系统实验1(编译内核)实验指导书

实验一虚拟机平台下的Linux内核编译 步骤一、实验准备:将windows下的Linux-2.4.32内核复制到虚拟机中。 一般有三种方法可以实现:虚拟磁盘、文件共享、网络设置。 下面介绍的是虚拟磁盘的方法: 我们已经将Linux-2.4.32内核源代码的压缩文件放入虚拟磁盘,并在FTP上共享。 1.请从FTP服务器上将实验指导书以及虚拟磁盘拷贝到E盘根目录下。 2. windows平台下启动虚拟机VMware, VMWare中安装虚拟硬盘: 1)安装前建议先把内存调大一些,这样后面编译的速度会快一些。(Memory,调到512M) 2)点击Add 3)点击Next

上述步骤完成后点击Finish 。 观察发现:虚拟机中将出现两个磁盘,一个是原有的磁盘,另一个是虚拟磁盘,相当于对本机外接了一个磁盘。(请将设置完成后的虚拟机中出现两个磁盘的界面截图,一个是6G ,另一个106M )。

4.启动Linux操作系统 在启动过程中可以见到当前只有一个可选择内核,内核版本是Linux2.4.20。我们本次实验的目的是在虚拟机下重新编译一个新的内核,内核版本是Linux2.4.32.完成本实验后,重启虚拟机将出现两个可选择内核。 5.将虚拟磁盘安装到/mnt/mydisk目录下.(mount命令),如图: 1)先用fdisk –l命令查看虚拟磁盘是否“连接”成功。记下虚拟磁盘名称(/dev/sdb)。 2)进入到mnt目录下创建mydisk目录,该目录作为访问虚拟磁盘的入口,此时该目录为空。 3)返回根目录root,并安装虚拟磁盘:mount /dev/sdb /mnt/mydisk

实验一 C程序的运行环境和运行C程序的方法实验报告

实验一C程序的运行环境和运行C程序的方法 1.实验目的: (1)了解所用的计算机系统的基本操作方法,学会独立使用该系统 (2)了解在该系统上如何编辑,编译、连接和运行一个C程序 (3)通过运行简单的C程序,初步了解C源程序的特点 2. 实验内容和步骤 (1)检查所用的计算机系统是否已安装了C 编译系统并确定它所在的子目录(2)进入所用的集成环境 (3)熟悉集成环境的界面和有关菜单的使用方法 (4)输入并运行一个简单的、正确的程序 输入下面的程序 # include void main() { printf(“This is a c program..\n”); } ①下面是屏幕上显示的编译信息。无错,进行连接。 --------------------Configuration: L1 - Win32 Debug-------------------- Compiling... L1.c L1.obj - 0 error(s), 0 warning(s) ②连接无错误,使程序运行,观察分析运行结果。 --------------------Configuration: L1 - Win32 Debug-------------------- Linking... L1.exe - 0 error(s), 0 warning(s) 运行输出结果 This is a c program. Press any key to continue This is a c program. Press any key to continue 分析:输入自己编写的源程序,检查程序有无语法错误,可以通过编译来实现,它会自动查出程序的语法错误,如果有错误应该找出原因,并改正过来,再进行编译和连接,仔细分析编译信息,确定没错误就可以运行程序,输入数据。 第一个程序运行的结果是This is a c program.。符合我们原来设计这个程序的目的,说明这个程序是正确的。 (5)输入并编辑一个有错误的C程序 输入程序 #include

交叉编译器简介

交叉编译器 在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译。这个编译过程就叫交叉编译。简单地说,就是在一个平台上生成另一个平台上的可执行代码。这里需要注意的是所谓平台,实际上包含两个概念:体系结构(Architecture)、操作系统(Operating System)。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。举例来说,我们常说的x86 Linux平台实际上是Intel x86体系结构和Linux for x86操作系统的统称;而x86 WinNT平台实际上是Intel x86体系结构和Windows NT for x86操作系统的简称。 有时是因为目的平台上不允许或不能够安装我们所需要的编译器,而我们又需要这个编译器的某些特征;有时是因为目的平台上的资源贫乏,无法运行我们所需要编译器;有时又是因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器。 交叉编译这个概念的出现和流行是和嵌入式系统的广泛发展同步的。我们常用的计算机软件,都需要通过编译的方式,把使用高级计算机语言编写的代码(比如C代码)编译(compile)成计算机可以识别和执行的二进制代码。比如,我们在Windows平台上,可使用Visual C++开发环境,编写程序并编译成可执行程序。这种方式下,我们使用PC平台上的Windows 工具开发针对Windows本身的可执行程序,这种编译过程称为native compilation,中文可理解为本机编译。然而,在进行嵌入式系统的开发时,运行程序的目标平台通常具有有限的存储空间和运算能力,比如常见的ARM 平台,其一般的静态存储空间大概是16到32MB,而CPU的主频大概在100MHz到500MHz之间。这种情况下,在ARM平台上进行本机编译就不太可能了,这是因为一般的编译工具链(compilation tool chain)需要很大的存储空间,并需要很强的CPU运算能力。为了解决这个问题,交叉编译工具就应运而生了。通过交叉编译工具,我们就可以在CPU能力很强、存储控件足够的主机平台上(比如PC上)编译出针对其他平台的可执行程序。 要进行交叉编译,我们需要在主机平台上安装对应的交叉编译工具链(cross compilation tool chain),然后用这个交叉编译工具链编译我们的源代码,最终生成可在目标平台上运行的代码。常见的交叉编译例子如下: 1、在Windows PC上,利用ADS(ARM 开发环境),使用armcc编译器,则可编译出针对ARM CPU的可执行代码。 2、在Linux PC上,利用arm-linux-gcc编译器,可编译出针对Linux ARM平台的可执行代码。

linux内核配置模块编译安装

Linux内核配置编译和加载 Linux内核模块 Linux内核结构非常庞大,包含的组件也非常多,想要把我们需要的部分添加到内核中,有两个方法:直接编译进内核和模块机制 由于直接编译进内核有两个缺点,一是生成的内核过大,二是每次修改内核中功能,就必须重新编译内核,浪费时间。因此我们一般采用模块机制,模块本身不被编译进内核映像,只有在加载之后才会成为内核的一部分,方便了修改调试,节省了编译时间。 配置内核 (1)在drivers目录下创建hello目录存放hello.c源文件 (2)在hello目录下新建Makefile文件和Kconfig文件 Makefile文件内容: obj-y += hello.o //要将hello.c编译得到的hello.o连接进内核 Kconfig文件内容: 允许编译成模块,因此使用了tristate (3)在hello目录的上级目录的Kconfig文件中增加关于新源代码对应项目的编译配置选项 修改即driver目录下的Kconfig文件,添加

source "drivers/hello/Kconfig" //使hello目录下的Kconfig起作用 (4)在hello目录的上级目录的Makefile文件中增加对新源代码的编译条目 修改driver目录下的Makefile文件,添加 obj-$(CONFIG_HELLO_FOR_TEST) += hello/ //使能够被编译命令作用到 (5)命令行输入“make menuconfig”,找到driver device,选择select,发现test menu 已经在配置菜单界面显示出来 (6)选择test menu进入具体的配置,可以选择Y/N/M,这里我选择编译为M,即模块化 (7)保存退出后出现 (8)进入kernels目录中使用“ls -a”查看隐藏文件,发现多出.config隐藏文件,查看.config 文件

编译内核实验报告

实验一编译Linux内核 实验时间 6小时 实验目的 认识Linux内核的组成,掌握配置、编译、安装Linux内核的步骤。 实验目标 下载2.6.19或更新的Linux内核,配置该内核使其支持NTFS,并在新的内核中修改其版本为Linux NameTestKernel x.x.x,其中,Name是你的名字(汉语拼音);x.x.x是新内核的版本号,最后在你的机器上编译安装这个新内核。 背景知识 参见《Red Hat Enterprise Linux 4入门与提高》第20章。 实验步骤 1.验证gcc的可用:在你自己的工作目录下,编译链接运行Hello World程序。 2.在https://www.360docs.net/doc/584521289.html,上下载指定的内核,或者查找更新的稳定版内核并 下载之。 3.准备相关工具。 提示:如当前运行的Linux内核是基于2.4版本的,则需要更新以下软件: module-init-tools和mkinitrd。具体更新信息可参见下载内核源代码中的 Documentation/Changes这个文件。 4.把源代码解压缩至/usr/src中,最终形成/usr/src/linux x.x.x/目录(x.x.x是新 内核的版本号)。 提示:这里的注意点是路径的选择,一般要放在/usr/src/linux x.x.x/目录下面,以满足Makefile对路径设置的初始要求。 5.进入源代码的根目录,找到合适自己的内核配置方法,并按照实验目标对其 进行配置。

6.修改/usr/src/linux x.x.x/linux/include/linux/verson.h文件中的版本信息。 7.编译内核。 8.安装模块文件。 9.安装内核文件。 10.重新启动新内核。 实验结果 1.实验步骤1中,编译链接运行程序你下达了哪些命令? 2.实验步骤2中,你下载了哪个版本的内核文件? 3.实验步骤3中,你是否安装了相关工具?如安装,则写出安装过程。 4.实验步骤4中,你是用哪些命令解压缩内核文件的? 5.实验步骤5中,你用了哪种内核配置的方法? 6.你对实验步骤6中涉及的文件做了怎样的修改? 7.实验步骤7-9的过程,是否出现错误?如有,你是如何解决的? 8.观察你机器中GRUB的配置文件,它在安装完新内核后发生了哪些变化? 9.新内核启动过程是否成功?如有错误,是哪些错误?你是如何消错的?

Vmware安装Ubuntu及交叉编译器

在虚拟机下Linux(Ubuntu)的安装 1.创建新的虚拟机 2.点击自定义 3、选Workstation版本的兼容性,然后点击下一步

4、选择稍后安装操作系统,然后下一步。 也可以选择第二项“安装程序光盘映像文件ISO”,之后会VMware会自动得知你的iso是Linux(Ubuntu),只要求你输入全名,和用户名密码等简单的用户设定,这是一个简单安装,可以跳过下面的步骤。我觉得是因为这个OS的自动安装,不完全,导致一些核心命令无法使用、无反应等一些问题。所以有更高要求,不能选这项,需要完全、自定义的安装。 5、客户机操作系统选择Linux,版本选择Ubuntu 64位,然后下一步。

6、设置虚拟机名称(即每次启动VMware左上方显示的名字),之后选择你想的在WINDOWS操作系统里的安装路径(默认在C 盘,很不方便,不要安装在C盘)。 7、设置虚拟机处理器数量,选择处理器数量为2(看情况而定,我是i7处理器,配置较好无压力的,感觉双核比单核好一些)

8、.内存大小选择,使用自动推荐的1G内存(本机内存8G)。 9、网络类型选择,本次选择默认的“NAT”

注:使用“NAT”的话,需要外面的WIN7使用一根线连接上网,才能在Ubuntu里上网(如同Ubuntu是你的真正OS的感觉,不需要手工配置任何IP信息),不能默认使用无线连接。这点对有些笔记本同学可能会造成麻烦。当然不是说不能通过手动配置IP相关解决,但是为了避免每次都配置的麻烦,请直接使用“bridged”桥接手动配置。 9. 默认即可,直接“下一步”

10、选择“将虚拟磁盘存储为单个文件” 11.虚拟机文件的存放地址,点击“下一步”即可 12、点击“完成”

Linux 2.6.19.x内核编译配置选项简介(2)

Linux 2.6.19.x内核编译配置选项简介(2) Security Marking 对网络包进行安全标记,类似于nfmark,但主要是为安全目的而设计,如果你不明白的话就别选 Network packet filtering (replaces ipchains) Netfilter可以对数据包进行过滤和修改,可以作为防火墙("packet filter"或"proxy-based")或网关(NAT)或代理(proxy)或网桥使用.选中此选项后必须将"Fast switching"关闭,否则将前功尽弃 Network packet filtering debugging 仅供开发者调试Netfilter使用 Bridged IP/ARP packets filtering 如果你希望使用一个针对桥接的防火墙就打开它 Core Netfilter Configuration 核心Netfilter配置(当包流过Chain时如果match某个规则那么将由该规则的target来处理,否则将由同一个Chain中的下一个规则进行匹配,若不match所有规则那么最终将由该Chain的policy进行处理) Netfilter netlink interface 允许Netfilter在与用户空间通信时使用新的netlink接口.netlink Socket是Linux用户态与内核态交流的主要方法之一,且越来越被重视 Netfilter NFQUEUE over NFNETLINK interface 通过NFNETLINK接口对包进行排队 Netfilter LOG over NFNETLINK interface 通过NFNETLINK接口对包记录.该选项废弃了ipt_ULOG和ebg_ulog机制,并打算在将来废弃基于syslog 的ipt_LOG和ip6t_LOG模块 Layer 3 Independent Connection tracking 独立于第三层的链接跟踪,通过广义化的ip_conntrack支持其它非IP协议的第三层协议 Netfilter Xtables support 如果你打算使用ip_tables,ip6_tables,arp_tables之一就必须选上 "CLASSIFY" target support 允许为包设置优先级,一些排队规则(atm,cbq,dsmark,pfifo_fast,htb,prio)需要使用它 "CONNMARK" target support 类似于"MARK",但影响的是连接标记的值 "DSCP" target support 允许对ip包头部的DSCP(Differentiated Services Codepoint)字段进行修改,该字段常用于Qos "MARK" target support 允许对包进行标记(通常配合ip命令使用),这样就可以改变路由策略或者被其它子系统用来改变其行为"NFQUEUE" target Support 用于替代老旧的QUEUE(iptables内建的target之一),因为NFQUEUE能支持最多65535个队列,而QUEUE 只能支持一个 "NOTRACK" target support 允许规则指定哪些包不进入链接跟踪/NA T子系统 "SECMARK" target support

ARM、linux常用服务器+交叉编译工具链

ARM、linux常用服务器+交叉编译工具链 1. tftp服务器在安装linux时通常可供选择是否安装tftp服务器 启动后可通过在控制终端输入netstat -a|grep tftp查看是否已经安装若已安装则为如下打印信息: [root@localhost /]# netstat -a|grep tftp 若没有安装则可使用 –ivh tftp-server-0.42-3.1.i386.rpm 进行安装然后建立主要工作目录mkdir /tftpboot 接下来配置tftp服务器 /etc/init.d/tftp # default: off # description: The tftp server serves files using the trivial file transfer \par # protocol. The tftp protocol is often used to boot diskless \par # workstations, download configuration files to network-aware printers, \par # and to start the installation process for some operating systems. tftp _type = dgram

= udp = yes = root = /usr/sbin/in.tftpd _args =-s /tftpboot = no _source = 11 = 100 2 = IPv4 注意修改server_args = -s /tftpboot为你tftp工作目录。 接下来便是重启tftp 服务器了/etc/init.d/xinetd restart打印出如下信息[root@localhost /]# /etc/init.d/xinetd restart xinetd: [ OK ] xinetd: [ OK ] 表示重启成功接下来便可查看是否已经安装成功 [root@localhost /]# netstat -a|grep tftp

java的开发环境和运行环境是一回事吗

Java程序开发与运行环境 Java不仅提供了一个丰富的语言和运行环境,而且还提供了一个免费的Java开发工具集(JavaDevelopersKits,简称JDK)。编程人员和最终用户可以利用这个工具来开发java 程序或调用Java内容。JDK包括以下工具:javacJava语言编译器,输出结果为Java字节码java,Java字节码解释器javapDisassembeler:Java字节码分解程序,本程序返回Java程序的成员变量及方法等信息。javaprof资源分析工具,用于分析Java程序在运行过程中调用了哪些资源,包括类和方法的调用次数和时间,以及各数据类型的内存使用情况等。javahC代码处理工具,用于从Java类调用C++代码javaAppletViewer小应用程序浏览工具,用于测试并运行Java小应用程序javaDebuggerAPIJava调试工具APIPrototypeDebuggerJava调试工具原型 Java开发环境还包括Java类库(包括I/O类库、用户界面类库、网络类库等)和HotJavaWWW浏览器。其中,HotJava浏览器提供了在WWW环境下运行Java代码的一个运行系统,而且还为WWW开发人员提供了一个Java开发框架。Java解释器是面向Java程序的一个独立运行系统,它可以一种稳定、高性能方式运行那些独立于平台的Java 字节码,Java编译器则用于生成这种字节码。 JDK 是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的类库(rt.jar)。JDK由一个标准类库和一组建立,测试及建立文档的Java实用程序组成。其核心Java API是一些预定义的类库,开发人员需要用这些类来访问Java语言的功能。Java API包括一些重要的语言结构以及基本图形,网络和文件I/O.一般来说,Java API的非I/O部分对于运行Java的所有平台是相同的,而I/O部分则仅在通用Java环境中实现。 JRE(Java Runtime Environment,Java运行环境),运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库。 在实际应用上讲,JRE的类库只是JDK所有类库里面的一小部分,只是用来支持Java运行的,把其余的调试编辑一类的应用项都去除了!

交叉编译工具链的安装配置

交叉工具链的生成 https://www.360docs.net/doc/584521289.html,/uid-9185047-id-3158569.html 软件平台:ubuntu 10.10 主机编译器:gcc 4.5.1 硬件平台:s3c2410 1、准备环境 sudo apt-get install bison flex texinfo automake libtool cvs patch libncurses5-dev aria2 curl g++ subversion gawk cvsd expat gperf libexpat-dev 注:有的没安装,第4步无法生成makefile,要先安装gperf 2、下载crosstool-ng软件包 crosstool-ng-1.17.0.tar.bz2 3、相应目录的建立 sudo mkdir -p /usr/local/arm sudo chmod 777 /usr/local/arm // 将arm目录权限设置为777 cd /usr/local/arm mkdir 4.7.2 sudo mkdir -p /home/crosstool cd /home/s3c2410/crosstool sudo mkdir crosstool-build crosstool-install src-4.7.2 (编译目录、安装目录、目标源码目录) 4、安装crosstool-ng cp crosstool-ng-1.17.0.tar.bz2 /home/s3c2410/crosstool/ 解压crosstool-ng-1.17.0.tar.bz2, tar -xvf crosstool-ng-1.17.0.tar.bz2 进入目录,进行配置: cd /home/s3c2410/crosstool/crosstool-ng-1.17.0 将/home/s3c2410/crosstool/crosstool-install/lib/ct-ng.1.17.0/下的https://www.360docs.net/doc/584521289.html,p cp到/etc/bash_completion.d 配置安装目录为/home/s3c2410/crosstool/crosstool-install 注:有的没安装gperf,无法生成makefile,要先安装gperf sudo ./configure --prefix=/home/crosstool/crosstool-install sudo make --编译 sudo make install --安装

Linux 内核编译配置选项简介

General setup常规设置 Local versio n - append to kernel release 在内核版本后面加上自定义的版本字符串(小于64字符),可以用"uname -a"命 令看到 Automatically append version information to the versio n string 自动在版本字符串后面添加版本信息,编译时需要有perl以及git仓库支持 Support for paging of anonymous memory (swap) 使用交换分区或者交换文件来做为虚拟内存 System V IPC System V进程间通信(IPC)支持,许多程序需要这个功能.必选,除非你知道自己 在做什么 POSIX Message Queues POSIX消息队列,这是POSIX IPC中的一部分 BSD Process Accounting 将进程的统计信息写入文件的用户级系统调用,主要包括进程的创建时间/创建者/ 内存占用等信息 Export task/process statistics through netlink 通过netlink接口向用户空间导出任务/进程的统计信息,与BSD Process Accounting的不同之处在于这些统计信息在整个任务/进程生存期都是可用的 UTS Namespaces UTS名字空间支持,不确定可以不选 Auditing support 审计支持,某些内核模块(例如SELinux)需要它,只有同时选择其子项才能对系统 调用进行审计 Kernel .config support 把内核的配置信息编译进内核中,以后可以通过scripts/extract-ikconfig脚本来 提取这些信息 Cpuset support 只有含有大量CPU(大于16个)的SMP系统或NUMA(非一致内存访问)系统才需 要它 Kernel->user space relay support (formerly relayfs) 在某些文件系统上(比如debugfs)提供从内核空间向用户空间传递大量数据的接 口

嵌入式Linux开发交叉编译器的安装

实验三嵌入式Linux开发交叉编译器的安装 班级:B08511 姓名:张媛媛学号:20084051112 成绩: 一、实验目的 安装ARM平台下的嵌入式Linux开发的交叉编译器arm-linux-gcc,编译简单的程序并通过NFS方式运行于开发板上,比较与gcc生成的可执行文件的不同; 二、实验设备 硬件:PC机开发板 三、实验原理 嵌入式系统的交叉开发环境一般包括交叉编译器、交叉调试器和系统仿真器,其中交叉编译器用于在宿主机上生成能在目标机上运行的代码,而交叉调试器和系统仿真器则用于在宿主机与目标机间完成嵌入式软件的调试。在采用宿主机/目标机模式开发嵌入式应用软件时,首先利用宿主机上丰富的资源和良好的开发环境开发和仿真调试目标机上的软件,然后通过串口或者用网络将交叉编译生成的目标代码传输并装载到目标机上,并在监控程序或者操作系统的支持下利用交叉调试器进行分析和调试,最后目标机在特定环境下脱离宿主机单独运行。 本次实验涉及到的是嵌入式Linux开发的交叉编译器arm-linux-gcc,从体系结构角度来讲,借助其编译生成的程序是由ARM平台下机器指令构成的可执行程序。 四、实验内容 (1)arm-linux-gcc-3.4.1.tgz为编译器的文件压缩包(实验室机器中位于windows系统的“c:\嵌入式Linux实验\Tools”),为3.4.1版本的交叉编译工具,用来编译常用的一些代码;可通过虚拟机与Windows系统的共享文件夹将其拷贝到Linux系统中; 安装命令:tar xvfz arm-linux-gcc-3.4.1.tgz –C / (2)设置环境变量 可以在/etc/bash.bashrc文件中加入: export PATH=$PATH:/usr/local/arm/3.4.1/bin 就可以直接使用arm-linux-gcc的一些命令; (3)查看arm-linux-gcc编译器版本 输入arm-linux-gcc –v可查看编译器版本,如图3-1: 图3-1 编译器版本

编译环境

VC++6.0编译环境介绍(1) 大家可能一直在用VC开发软件,但是对于这个编译器却未必很了解。原因是多方面的。大多数情况下,我们只停留在“使用”它,而不会想去“了解”它。因为它只是一个工具,我们宁可把更多的精力放在C++语言和软件设计上。我们习惯于这样一种“模式”:建立一个项目,然后写代码,然后编译,反反复复调试。但是,所谓:“公欲善其事,必先利其器”。如果我们精于VC开发环境,我们是不是能够做得更加游刃有余呢? Visual C++可新建的 Projects项目 Visual C++可新建的 File文件 Visual C++的Build设置

https://www.360docs.net/doc/584521289.html,pile TEST.cpp选项只编译当前文件而不调用链接器或其它工具。输出窗口将显示编译过程检查出的错误或警告信息,在错误信息处单击鼠标右键,可以得到错误代码的位置 2. Build TEST.exe 选项对最后修改过的源文件进行编译和链接 3. Rebuild All选项该选项允许用户编译所有的源文件,而不管它们何时曾经被修改过 4. Batch Build选项该选项能单步重新建立多个工程文件,并允许用户指定要建立的项目类型.VC提供了两种目标应用程序类型 Win32 Release(发行版)、Win32 Debug(调试版)。 我们先来看一下VC的处理流程,大致分为两步:编译和连接。源文件通过编译生成了.obj文件;所有.obj文件和.lib文件通过连接生成.exe文件或.dll 文件。下面,我们分别讨论这两个步骤的一些细节。 工程配置对话框在这个对话框中,左上方的下拉列表框用于选择一种工程配置,包括有Win32 Debug、Win32 Release和All Configurations(指前两种配置一起),某些选项在不同的工程配置中有不同的缺省值。左边的树形视图给出了当前工程所有的文件及分类情况。如果我们把工程“Schedule”置为高亮显示(正如图9-1那样),对话框的右边就会出现总共十个选项卡,其中列出了与工程有关的各种选项,不少选项卡中有一个Reset按钮,按下它后可以把选项卡内的各项设置恢复到生成工程时的初始值。如果我们在树形视图中选择一个文件类或一个文件,那么对话框右边的选项卡会自动减少到一个或两个,其中列出的都是与选中的文件类或文件有关的选项。 编译参数的设置。主要通过VC的菜单项Project->Settings->C/C++页来完成。我们可以看到这一页的最下面Project Options中的内容,一般如下:

JAVA编译环境配置

1. 实现对JAVA的编译 在配置EditPlus之前,我们先要将JAVA的运行环境安装并且调试好,这里我就不再说明了。 首先,从菜单“工具(Tools)”->“配置用户工具...”进入用户工具设置。 在类别里展开“工具”树形菜单->“用户工具”,选择“组和工具项目”中的“Group 1”,点击面板右边的“组名称...”按钮,将文本“Group1”修改成“编译JAVA程序”。 然后选择修改的组“编译JAVA程序”,点击“添加新工具”按钮,选择程序,建立“新建程序”,选中它。 然后就是最重要的步骤(修改属性): 1.1 添加编译功能 “菜单文字”里的内容修改为“JAVAC”; “命令”选择安装JDK后的BIN目录中的编译程序JAVAC.EXE,如果JDK 安装路径为“c:\jdk”,那么此路径为“c:\jdk\bin\javac.exe”; “参数”选择“文件名称”,即显示为“$(FileName)”; “初始目录”选择“文件目录”,显示为“$(FileDir)”; 选择“捕获输出”复选框。 1.2 添加执行功能 “菜单文字”里的内容修改为“JAVA”; “命令”选择安装JDK后的BIN目录中的编译程序JAVA.EXE,路径为 “c:\jdk\bin\java.exe”; “参数”选择“文件名(不含扩展名)”,即显示为“$(FileNameNoExt)”; “初始目录”选择“文件目录”,显示为“$(FileDir)”; 选择“捕获输出”复选框。 这样就完成了基本的配置工作,下面您就可以试着编写一个JAVA程序来测试一下,编译的所有信息都会显示在输出窗口中,双击某一行错误信息,EditPlus会自动定位到出错行。 2. 实现对C#的编译 与JAVA的配置步骤基本一样,只是在选择“命令”的地方要选择 “C:\WINDOWS\https://www.360docs.net/doc/584521289.html,\Framework\v1.0.3705\csc.exe”,这里根据系统目录的不同而有所区别,目的就是要让EditPlus找到csc.exe文件进行编译。 同样,EditPlus可以对很多程序进行编译的配置,例如汇编、C、Python等等,都要在使用的过程中慢慢体会它的方便性了。 实现的效果就是:用editplus编辑一个Java源文件,然后按CTRL + 1,编译;CTRL + 2,运行;当一个文件有多个class,你想运行其中的某一个,CTRL + 3,跳出cmd 窗口,已经指向当前目录了,然后手工输入就可以了。 4、修改Java文件模板。到editplus安装目录下,用记事本打开template.java文件,修改成你想要的新建Java文件的模板。这样每次从file 》new 》java 创建的Java文件都是模板里的格式。

相关文档
最新文档