ncurses教程(ncurses怎么读)

http://www.itjxue.com  2023-01-25 03:24  来源:未知  点击次数: 

各位老大,有没有制作卡刷包的教程?

可以,按着下面的教程就可以了。 第一步——JAVA环境变量的安装和设置: 1.下载JDK: 请到官网页面下载 或者百度一下即可。 请安装32位的JDK,64位的在安装Cygwin的时候可能会出现麻烦。 2.安装JDK: 点击下载好的JDK安装程序,没什么难度,一路点击“下一步”“同意”“继续”即可。 3.配置java环境变量: 1).Win XP: 我的电脑(右键)——属性——高级——环境变量,选择在"系统变量"下进行如下配置(若已存在则点击“编辑”,不存在则点击“新建”): (1).系统变量JAVA_HOME: 变量名:JAVA_HOME 变量值:C:\Program Files\Java\jdk1.7.0_03 (就是你的JDK的安装路径,我这里写的是我的JDK安装路径,你脑子灵活点。。。) (2).系统变量Path: 变量名:Path 变量值,在变量值的最前面加上:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin (3).系统变量CLASSPATH,如果已有,请在末尾添加: 变量名:CLASSPATH 变量值:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar (这里要注意,最前面要加“.”,表示当前路径) 注意:当设置的变量在末尾时,不要加上“;”。 然后点击“确定”或者“应用”即可。 2).Win7: 计算机(右键)——属性——高级系统设置——环境变量,选择在"系统变量"下进行如下配置(若已存在则点击“编辑”,不存在则点击“新建”)。参数设置和上面提到的xp一样,配置好后点击“确定”或者“应用”即可。 。 3).验证是否成功配置环境变量: 按键盘Win+R,输入cmd,或者用别的方法打开命令提示符窗口,依次输入java,javac,java –version,如果没有报错,那么就是成功了。 第二步——安装Cygwin: 1.请到官网页面下载: 或者百度一下。 2.点击安装程序。 选择下一步,点击Install from Internet(从网络上安装); 下一步,然后Root Directory是安装路径; 接着继续下一步,Local Package Direct是下载下来的安装包存放的位置; 继续下一步,下一步,选择一个镜像源,用于下载安装包的,随便选一个就行了; 之后出现一个弹窗你就点击确定。 然后就是选择组件安装。 这里很多教程都直接说点击default使其变为install。但是这样就会有一个问题:如果真这样做了,就需要同时下载安装大量的组件,下载过程极其漫长,安装后体积非常臃肿。但是很多linux系统整体体积也不过几百兆,也照样能运行厨房。因此在这里我们可以推测有相当多不必要安装的组件,毕竟我们并不需要那么多的功能,在这里我们只需要能够运行厨房工具罢了。 我只想说,有些转载者看原版教程的时候不注意。在原帖内有个文件叫做Cygwin_required.txt,已经告诉我们需要到哪些插件了。我们并不需要几百几千个组件,而只需要寥寥几个重要组件罢了。也就是说,在默认安装的组件的基础上,我们只需要再添加一下额外需要到的组件即可: * Archive / zip * Archive / unzip * Devel /gcc * Interpreters / perl * Utils / cpio * Utils / util-linux * Utils / ncurses * Web / wget 安装的时候在组件的树形图列表中或者直接搜索相应组件,点击一下使其变为安装状态即可。这样我们的下载量就大大减少了,速度快了很多,而且完成后体积只有几百兆左右。 然后继续下一步,直到完成即可。

Linux发行版(路由器固件)OpenWrt入门全集

现阶段openwrt官方支持的路由列表:wiki.openwrt.org/toh/start

如果要学习openwrt的话,买些列表中二手的路由器来实践下更容易学习,大部分要升级一下rom芯片和内存芯片,典型配置都是4M、64M。 大家先学习一下,等待小米开放时刻的到来,有备无患……

OpenWrt 可以被描述为一个嵌入式的 Linux 发行版,(主流路由器固件有 dd-wrt,tomato,openwrt三类)而不是试图建立一个单一的、静态的系统。OpenWrt的包管理提供了一个完全可写的文件系统,从应用程序供应商提供的选择和配置,并允许您自定义的设备,以适应任何应用程序。

对于开发人员,OpenWrt 是使用框架来构建应用程序,而无需建立一个完整的固件来支持;对于用户来说,这意味着其拥有完全定制的能力,可以用前所未有的方式使用该设备。

当Linksys释放 WRT54G/GS 的源码后,网上出现了很多不同版本的 Firmware 去增强原有的功能。大多数的 Firmware 都是99%使用 Linksys的源码,只有1%是加上去的,每一种 Firmware 都是针对特定的市场而设计,这样做有2个缺点,第一个是难以集合各版本Firmware的长处,第二个是这版本距离 Linux 正式发行版越来越远。

OpenWrt 选择了另一条路,它从零开始,一点一点的把各软件加入去,使其接近 Linksys 版 Firmware的功能,而OpenWrt 的成功之处是它的文件系统是可写的,开发者无需在每一次修改后重新编译,令它更像一个小型的 Linux 电脑系统。

OpenWrt 项目由 2004 年 1 月开始, 第一个版本是基于 Linksys 提供的 GPL 源码及 uclibc 中的 buildroot 项目, 这个版本称为 “stable” 版, 在网上至今仍有很多项目使用这个版本, 较为有名 Freifunk-Firmware 和 Sip@Home.

到了2005年初, 一些新的开发人员加入了这项目, 几个月后他们释出了第一个 “experimental” 版本, 这和以前版本不同的是, 这版本差不多完全舍弃了 Linksys 的 GPL 源码, 使用了 buildroot2 作为核心技术, 将 OpenWrt 完全模块化,OpenWrt 使用 Linux 正式发行的核心源码(2.4.30),加上了一些补丁和网络驱动,开发队伍更为OpenWrt添加了许多免费的工具,可以直接把Image写入 Flash (mtd)里面,设定无线功能和VLAN交换功能,这个版本名为“White Russian”,而1.0版本于2005年底公布。

OpenWRT是一个高度模块化、高度自动化的嵌入式Linux系统,拥有强大的网络组件和扩展性,常常被用于工控设备、电话、小型机器人、智能家居、路由器以及VOIP设备中。 同时,它还提供了100多个已编译好的软件,而且数量还在不断增加,而 OpenWrt SDK 更简化了开发软件的工序。

OpenWRT不同于其他许多用于路由器的发行版,它是一个从零开始编写的、功能齐全的、容易修改的路由器操作系统。实际上,这意味着您能够使用您想要的功能而不加进其他的累赘,而支持这些功能工作的linux kernel又远比绝大多数发行版来得新。

如果对 Linux 系统有一定的认识, 并想学习或接触嵌入式 Linux 的话, OpenWRT很适合。 而且OpenWRT支持各种处理器架构,无论是对ARM,X86,PowerPC或者MIPS都有很好的支持。 其多达3000多种软件包,囊括从工具链(toolchain),到内核(linux kernel),到软件包(packages),再到根文件系统(rootfs)整个体系,使得用户只需简单的一个make命令即可方便快速地定制一个具有特定功能的嵌入式系统来制作固件。

一般嵌入式 Linux 的开发过程, 无论是 ARM, PowerPC 或 MIPS 的处理器, 都必需经过以下的开发过程:

1、 创建 Linux 交叉编译环境;

2、建立 Bootloader;

3、移植 Linux 内核;

4、建立 Rootfs (根文件系统);

5、安装驱动程序;

6、安装软件;

熟悉这些嵚入式 Linux 的基本开发流程后,不再局限于 MIPS 处理器和无线路由器, 可以尝试在其它处理器, 或者非无线路由器的系统移植嵌入式 Linux, 定制合适自己的应用软件, 并建立一个完整的嵌入式产品。

由于CPU内核体系不同,造成很多应用程序移植到OpenWrt上的时候经常崩溃。

由于ADSL硬件模块的驱动程序没有开放源代码,造成很多ADSL一体无线路由的ADSL模块不能工作而造成功能缺失(RG100A和DB120除外)。

由于OpenWRT并不是官方发布的路由器固件,所以要使用(刷入该固件)有困难,而且其基于Linux,导致OpenWRT的入门门槛较高。

White RussianOpenWRT的初始版本,从2005年7月的White Russian RC1开始发展,一直到2007年1月才发布White Russian 0.9。

KamikazeOpenWRT的第二个版本,从2007年6月开始发布Kamikaze 7.06,一直更新到2010年1月的Kamikaze 8.09.2结束。这期间OpenWRT进行了大量改进,并为它的发展打下了坚实的基础。

Backfire2010年03月04日,OpenWrt Backfire 10.03 Beta发布,该版本是开源的路由器固件,基于linux,功能强大,支持很多主流的平台和路由器,甚至支持国内的君正jz4740平台,是学习和开发嵌入式,也是工业、 商业应用理想平台。更新方面: brcm-2.4 更新到 2.4.37 kernel ,other targets 更新到 2.6.30 or 2.6.32 ,arm/mips平台的 gcc 更新到 4.3.3 ,powerpc的gcc更新到 4.4.3 ,uClibc 更新到 0.9.30.1 , Broadcom 11g 芯片组的 b43 无线网卡驱动更新到 2.6 kernel ,支持Atheros 11n ath9k ,支持很多新的ar71xx设备,magicbox归入ppc40x平台 。

2010年03月25日,OpenWrt 发布 Backfire 10.03-rc1,支持国内留下的 tp-link最新多款11n的路由器,是不是想让路由器支持万能中继呢,或者增加路由器的多wan口支持呢,更多的这些高端路由才有的功能,或许能 让家用路由轻松具备。

2010年04月07日,OpenWRT放出Backfire 10.03正式版。

2010年08月29日OpenWRT放出了Backfire 10.03.1。修正了很多BUG,提高了兼容性。TP-LINK WR841N v2 已经可以正常使用了,包括无线部分和上网部分。 自rc1之后的变动:改进了防DNS重绑定攻击,改进了uhttpd稳定性, Rootfs生成修复(Orion景象),修正了基于BRCM47XX的PCI初始化,添加了rtl8366 vlan 改变的 整合脚本,还原了一般x86镜像 GRUB控制台,提高了ar71xx系列以太网驱动程序性能,添加了ar7240 交换机驱动,一些swconfig 和 交换机驱动的改进,RDC 使用启动加载器支持波特率,允许原生HID 支持 通过添加 kmod-input-hid,6in4:适当的处理了PPPoE连接并且修复了终端隧道更新。

鉴于开源软件在国内的发展态势,目前国内有基于OpenWRT改进而来的OpenWRT-DreamBox。这个版本的OpenWRT集成了了很多常用功能(包括脱机下载等),而通过这个版本的OpenWRT便可以把一个路由器的功能发挥的淋漓尽致。

现在有越来越多的Maker开始折腾OpenWrt,但作为一个Maker新手来讲,在网上还是很难找到一份系统的入门级资料。查找资料很辛苦,而且OpenWrt的门槛相对较高,希望这篇文章所提供的从零开始学OpenWrt编译 + 刷机 + 使用教程能降低新手们的入门难度,当然,编译过程非必须,一般的路由都可找到可用的稳定固件直接刷机。

1、安装Ubuntu(编译需要Linux环境),到其官网下载,版本根据自己所需选择即可。可以选择安装到虚拟机或者物理机,图形化安装而且是中文版,连安装都搞不定的,可以关闭本页面了;(下载地址可以百度,回复贴中会提供)

2、切记不要改动软件源,同时按住Ctrl + Alt + T,调出终端;

3、逐条输入下列命令(及时验证是否安装成功):

[php]

sudo apt-get install g++

sudo apt-get install libncurses5-dev

sudo apt-get install zlib1g-dev

sudo apt-get install bison

sudo apt-get install flex

sudo apt-get install unzip

sudo apt-get install autoconf

sudo apt-get install gawk

sudo apt-get install make

sudo apt-get install gettext

sudo apt-get install gcc

sudo apt-get install binutils

sudo apt-get install patch

sudo apt-get install bzip2

sudo apt-get install libz-dev

sudo apt-get install asciidoc

sudo apt-get install subversion

sudo apt-get install sphinxsearch

sudo apt-get install libtool

sudo apt-get install sphinx-common

[/php]

至此编译环境搭建完成。

OpenWrt源码分两种,一种是最新但不是最稳定的Trunk开发版,一种是最稳定的Backfire版,建议下载官方源码。下载前先在本地创建文件夹:

[php]

mkdir openwrt

sudo chmod 777 openwrt

cd openwrt

[/php]

选择你想要的版本然后执行下载命令,下载结束会显示版本号:

Trunk版下载命令:

[php]

svn co svn://svn.openwrt.org/openwrt/trunk/

[/php]

Backfire版下载命令:

[php]

svn co svn://svn.openwrt.org/openwrt/branches/backfire/

[/php]

添加软件扩展包,将feeds.conf.default修改为feeds.conf:

[php]

cp feeds.conf.default feeds.conf

[/php]

更新扩展,安装扩展:

[php]

./scripts/feeds update -a

./scripts/feeds install –a

[/php]

注:如果不是刚下载的源码,为保持代码为最新状态,应定期运行svn update命令更新源码。

测试编译环境:

[php]

make defconfig

到这里就可以开始编译自己的固件了。进入定制界面:

[php]

make menuconfig

[/php]

如果一切正常,会出现一个配置菜单,可以选择要编译的固件平台(芯片类型)、型号,还能选择固件中要添加的功能和组件,配置好后保存并退出菜单即可。

[php]

openwrt-make

[/php]

如果你想修改源码,应该在此步进行,如支持大容量Flash之类的修改,自己上网查到修改什么文件什么地方后,就在ubuntu图形界面上进去找到文件,双击打开文本编辑器修改保存。

[php]

Make

[/php]

或者

[php]

make V=99

[/php]

或者

[php]

make -j V=99

[/php]

make是编译命令,V=99表示输出debug信息,V一定要大写,如果要让CPU全速编译,就加上 -j 参数,第一次编译最好不带-j参数。

编译过程保持联网(会从网上下载一些源码包),所以断网可能造成编译中断,编译所需时间与电脑CPU及网络环境有很大关系,第一次编译时间较久,快则半小时长则2、3个小时,之后的编译所需时间较短。编译完成后会在源码文件目录出现bin文件夹(如trunk/bin/XXXX),如果你手里的路由是原版固件需要刷OpenWrt需要选用XXX-factory.bin固件,如果路由已经刷了OpenWrt,选用升级固件XXXX-sysupgrade.bin升级用的,在升级界面升级即可。进到文件夹找到你需要的固件传出(通过邮箱、网盘、U盘等),开始刷机吧。

要在路由器上使用OpenWrt,首先要将路由器固件刷新为OpenWrt,即相当于OpenWrt 系统的安装,不同型号的路由器的安装方法可能也会不一样,但一般常用的有三种方法:

1.Web上传固件更新(就是路由器设置或管理界面的那个固件更新)

2.PFTP上传固件更新(最简单的就是HFS了)

具体型号的路由器适用于哪种或哪几种方法,需自行尝试。

要对OpenWrt进行配置,一般有两条途径:

1.SSH登录通过命令行控制

2.Web登录通过Web界面设置

首次安装OpenWrt后,需要设置密码才可以使用SSH登录,方法是使用telnet登录或者Web登录设置密码。在Windows下面telnet和SSH登录可以使用Putty,在Linux或Mac下可分别使用如下命令:

[php]

ssh –l root 192.168.1.1 //Linux

ssh –l root@192.168.1.1 //Mac

[/php]

一般指令与常见Linux发行版相同,但是OpenWrt使用自己的包管理器:opkg,使用“opkg –help”查看帮助信息。以下是一些常用操作命令:

[php]

opkg update //更新软件包列表

opkg install //在线安装软件包

opkg remove //移除软件包

[/php]

登录Web管理界面,前提是该OpenWrt系统中要安装了Web界面,一般是Luci,登录方式与普通路由器无异,打开浏览器,输入路由器IP即可进入登录界面,OpenWrt的默认IP是192.168.1.1。

到此,OpenWrt的大门已为你敞开。接下来,开始尝试利用OpenWrt实现更多智能应用吧,比如单号多拨榨取运营商带宽、绑定域名远程控制、挂载大容量硬盘、搭建BT下载机、搭建网络摄像头、Samba/DLNA家庭NAS共享、私有云同步、FTP、个人网站/服务器

需要学会用ssh登录路由器用linux命令查看。

ps 命令查看当前系统运行的进程信息

free 命令查看内存使用和swap挂载情况

ls 查看目录和文件

cd 进入退出目录

vi 查看编辑配置文件

安装命令:

[php]

#opkg update

#opkg install nano

uci set network.lan.ipaddr=[lan ip]

[/php]

使用pppoe设置

Shell代码

[php]

uci set network.wan.proto=pppoe //设置wan口类型为pppoe

uci set network.wan.username=[上网帐户]

uci set network.wan.password=[上网密码] //这两行设置pppoe用户名和密码

[/php]

如果要挂在上级路由下面,就需要进行下面的设置

Shell代码

[php]

uci set network.wan.proto=none //关掉wan

uci set network.lan.gateway=[上级路由ip] //网关指向上级路由

uci set network.lan.dns=[上级路由ip] //dns指向上级路由

uci set dhcp.lan.ignore=1 //关掉lan的dhcp

[/php]

最后对无线网络进行配置

Shell代码

[php]

uci set wireless.@wifi-device[0].disabled=0 //打开无线

uci set wireless.@wifi-device[0].txpower=17 //设置功率为17dbm 太高会烧无线模块

uci set wireless.@wifi-device[0].channel=6 //设置无线信道为6

uci set wireless.@wifi-iface[0].mode=ap //设置无线模式为ap

uci set wireless.@wifi-iface[0].ssid=[自己设置SSID] //设置无线SSID

uci set wireless.@wifi-iface[0].network=lan //无线链接到lan上

uci set wireless.@wifi-iface[0].encryption=psk2 //设置加密为WPA2-PSK

uci set wireless.@wifi-iface[0].key=[密码] //设置无线密码

[/php]

提交应用配置

Shell代码

[php]

uci commit //应用

/etc/init.d/network restart //重启网络服务

[/php]

安装luci管理界面

Shell代码

[php]

opkg update // 更新软件列表

opkg list-installed // 查看已安装软件

opkg install luci // 安装LUCI

opkg install luci-i18n-chinese // 支持中文

luci-app-firewall - 0.10.0-1

luci-i18n-english - 0.10.0-1

luci-lib-core - 0.10.0-1

luci-lib-ipkg - 0.10.0-1

luci-lib-lmo - 0.10.0-1

luci-lib-nixio - 0.10.0-1

luci-lib-sys - 0.10.0-1

luci-lib-web - 0.10.0-1

luci-mod-admin-core - 0.10.0-1

luci-mod-admin-full - 0.10.0-1

luci-proto-core - 0.10.0-1

luci-proto-ppp - 0.10.0-1

luci-sgi-cgi - 0.10.0-1

luci-theme-base - 0.10.0-1

luci-theme-openwrt - 0.10.0-1

[/php]

即可完成LUCI的安装。

输入以下命令开启支持web服务的uhttpd,并设置其为自启动:

Shell代码

[php]

/etc/init.d/uhttpd enable # 开机自启动

/etc/init.d/uhttpd start # 启动uhttpd

[/php]

- Wifidog

你可以尝试执行以下命令安装Wifidog:

[php]

opkg update # Optional

opkg install wifidog

[/php]

--sftp安装

[php]

opkg update

opkg install vsftpd openssh-sftp-server

/etc/init.d/vsftpd enable

/etc/init.d/vsftpd start

[/php]

小米端口转发命令:

通过修改 /etc/config/firewall 这个文件来实现开放自己需要的端口到外网。

[php]

config rule 'httpdwan'

option src 'wan'

option dest_port '8088'

option proto 'tcp'

option target 'ACCEPT'

option name ''''httpd wan accept tcp port 8088''''

[/php]

保存后,执行 /etc/init.d/firewall restart 重启防火墙。

SSH工具:

1.WINSCP(文件传输到路由器上严重推荐使用)

2.putty中文版 中文的使用的难度相对低一点

ubuntu系统下怎么编译内核文件

一、下载源代码和编译软件的准备

安装有关编译程序。安装make ,gcc, make-kpkg,运行menuconfig等等和编译内核相关的工具。安装不了,请检查/etc/apt/sources.list 文件。有关命令:代码:$sudo apt-get install build-essential kernel-package libncurses5-dev

二、解压源代码注意,网上很多教程上说应该解压到 /usr/src,纯属以讹传讹,linux掌门人linus说解压到任何目录上都可以。当然,linus的说法是正确的。我放在自己的主目录下的src目录。如果你下载源代码是放到自己的主目录下或者运行上面的wget下载的,那么运行下列命令:代码:$ cd ~$ mkdir src tar jfx linux-2.6.25.10.tar.bz2 -C src/现在,源代码就在 ~/src/linux-2.6.25.10进入源代码的目录,准备下一步的工作。后面都在这个目录里面进行。代码:$ cd ~/src/linux-2.6.25.10

三、开始编译前的准备工作。首先,清理以前编译时留下的临时文件。如果是刚刚解开的包,不需要执行这步。如果是第二次或者是第n次编译,那么一定要执行。相关命令如下:代码:$ sudo make mrproper网上很多教程上说把现在使用的内核的config拷贝过来参考,据实验,是不需要的,ubuntu还有debian会自动做这步。不过这条命令倒是可以学习一下。当然你可以将以前的配置拷贝过来。命令:代码:cp /boot/config-`uname -r` ./.config

四、开始配置内核选项。相关命令:代码:$sudo make menuconfig配置用到的键只有几个,esc退出菜单;空格改变选项状态;光标键上下左右移动,回车选定。选项意义:M是编译成可以随时加入的模块,*是编译进入内核,空就是不要。配置选项非常多,具体配置可以参考金步国先生翻译的资料:Linux 2.6.19.x 内核编译配置选项。 请大家遵循一个原则,如果你自己使用的内核已经选用了某个选项,如果你没用充分的理由,不要随便改动。这样虽然内核不那么精简,但是不容易出现问题。我们可以精简的部分是硬件模块部分,对于自己没有的硬件要毫不犹豫的清除。如果你很执着,或者你有洁癖,你也可以一项项对过去,按照金步国先生的资料描述去选择基本上没有问题。

五、必须强调的几个选项:1、

在“General setup”里面的“Prompt for development and/or incomplete

code/drivers”金步国认为是不需要。但是如果你的硬件比较新,那几乎是必须选的,这样,我们才可以找到4965无线网卡,alsa声音驱动等

等。Kernel log buffer size 我选15,双核。如果你用ia64,要选16。Control Group support 集群支持?可以不要Choose SLAB allocator (SLUB (Unqueued Allocator)) 内存管理模式slab和slub选择slub。

2、在“Block layer”里,假如没有2TB的硬盘,就去掉:Support for Large Block Devices 。Support for Large Single Files 也不需要,谁有2TB的文件?

3、Processor type and features中是关于cpu的,要认真选。Symmetric multi-processing support是打开多核的开关,我的cpu是双核的,选中。Processor family (Core 2/newer Xeon) 我的是Core 2/newer Xeon。找到自己的cpu后,把Generic x86 support选项取消。Subarchitecture Type 选(PC-compatible)Maximum number of CPUs 输入自己的核心数目,我输入2。SMT (Hyperthreading) scheduler support说的是超线程技术,P4有支持的,我的t8100不支持,目前大部分市场上的家用cpu都不支持。High Memory Support (4GB) 1G以下选1G;我是3G,选4G;4G以上的选16G在“ Timer frequency ”里,默认是250Hz,较新的cpu都可以选择了1000Hz,性能更好。

4、Power management options中把APM (Advanced Power Management) BIOS support关闭。现在的电脑都用acpi了。CPU Frequency scaling 是笔记本cpu节电技术Default CPUFreq governor (conservative) cpu节电模式有四个,笔记本默认选conservative比较好。ACPI Processor P-States driver 必须选,不然CPU Frequency就不能用。后面的可选自己硬件相关的,我选的是Intel Enhanced SpeedStep和 Intel Speedstep on ICH-M chipsets,其他的统统消灭。

5、Bus options的选择:Bus options (PCI, PCMCIA, EISA, MCA, ISA)PCI support PCI Express support 现在新买的机器基本上都是PCI Express了ISA support 较新的新机器没有ISA设备,可以去掉MCA support 去掉NatSemi SCx200 support 去掉PCI Hotplug Support Support for PCI Hotplug (EXPERIMENTAL) 如果没有PCI热插拔设备,去掉这里的选项可以考虑全部编译进内核,而不是以模块形式存在。

6、Device Drivers是重点,由于linux不但面向个人工作站,更多的是面向服务器的应用,所以可以把自己机器上没有的硬件全部去掉,而不用面面俱到。但是通用型的选项要慎重。比如在网卡的部分,除了我的千兆网卡 Broadcom Tigon3 support和4965无线网卡Intel Wireless WiFi 4965AGN,其余的硬件支持统统去掉。再比如声卡部分,我的是hd声卡,我只是在PCI devices中,选intel hd 声卡,再选Build IDT/Sigmatel HD-audio codec support,除此之外的硬件支持全部去掉。

声卡还有一个细节,在ubuntu7.10里面, 需要在/etc/modprobe.d/alsa-base后面添加options

snd-hda-intel probe_mask=1

model=3stack,这样我的笔记本喇叭才可以发声,不然只有外接耳机或者音箱。这次编译以后,这个动作就不必了,但是两个耳机插口只有一个可以用

了。再比如我的电脑中没有agp,就可以直接把agp相关的选项全部取消。要注意的:ATA/ATAPI/MFM/RLL support Include IDE/ATA-2 DISK support 如果你的/boot是放在IDE硬盘上,那么这里一定要选*,选M都不行。否则启动时会出现“waiting for root file system”的提示而停滞不前。 SCSI emulation support 要用刻录机,必须选。SCSI device support 现在都是SATA硬盘,一定要选* SCSI disk support 如果你的/boot放在SATA硬盘上,一定要选*。

SCSI CDROM support 虽然康宝刻录机是ide接口的,但是必须把它当成scsi接口的,这是老问题了。用刻录机,必须选。

Graphics supportSupport for frame buffer devices 选中,进入选择 VESA VGA graphics support 选上,不然字符界面启动会有问题,后面的显卡选择:由于我的显卡是nvidia 8400gs,要自己安装nvidia公司的驱动,所以一个都没有选。这样导致ubuntu开机动画会出问题,我索性在grub中的splash字符全部删除,把开机动画关闭。字符界面很正常。 Console display driver support 有人开机后字符控制台错误,就是这部分选项没有选,出问题了。 Framebuffer Console support 需要打开。

Bootup logo 开机图标,会在自检的画面上加上个性图标。需要在grub上添加“vga=”的选项 简称fuse。是必选的,如果你要用windows分区。

CD-ROM/DVD Filesystems ISO 9660 CDROM file system support 一般选*DOS/FAT/NT Filesystems VFAT (Windows-95) fs support 有FAT32分区就选*吧 NTFS file system support 有NTFS分区就选*吧 NTFS write support 如果想对 NTFS分区进行写操作,选*必须将启动盘的文件系统编译进内核,默认是编译成模块,这样无法启动系统。ubuntu采用的文件系统是ext3,请把ext2,ext3相关的必要选项都编译进入内核。

8、Virtualization这个大类是我多花几百元买t8100的主要原因,因为t8100支持intel vt技术使linux上的虚拟机的性能大幅度提高。这里的选项我除了amd的,其他都编译成模块。

9、全部设置完成,最后一项是保存设置。按照我的习惯,先在上一层目录保存一个备份,文件名类似 ../config20080630然后再保存到当起目录,文件名 .config退出设置程序。

六、开始编译内核。ubuntu的工具是make-kpkg,和其他的发行版相比,步骤相对简单。相关命令:代码:$sudo make-kpkg clean 这条命令好像不要超级权限,很多资料上说要,不过这不是原则问题。

$ sudo make-kpkg -initrd --initrd --append-to-version=dell1400 kernel_image kernel-headers上述命令中的dell1400可以用自己喜欢的字符代替,最后的字符一定是数字.输完上述命令回车之前,建议大家把浏览器还有别的运用程序都关掉,机器开始的工作比较艰苦。

我的机器大概十几分钟。

七、安装内核编译完成就是安装工作。编译好的内核在上一层目录。包括linux-headers-...-_i386.deb和linux-image-...-i386.deb两个文件,如果你不搞开发的话,只要安装内核就可以,头文件以后要用的时候再说。安装相关命令:

代码:$ cd ..$ sudo dpkg -i linux-image-(按tab键)文件名很长,如果不用tab自动补足是不可能的,tab键万岁。安装完成后和老内核比较一下大小代码:

$ ls -l /boot/

八、重新启动验证新内核。代码:$ sudo reboot

九、显卡驱动如果你的显卡和我一样是nvidia显卡,启动之后往往无法正常进入x-window。即使能看到gdm登录界面,效果也是很差的。那么就要安装nvidia驱动。用ctrl+alt+f1 进入字符命令行,输入用户名,密码登录。 #ps ax看看和gdm相关的进程,把这些进程全部关闭;用sudo /etc/init.d/gdm stop有可能有一个进程没有关闭:#kill 进程号然后安装nvidia显卡驱动,当然驱动要先下好,到nvidia驱动所在的目录里,运行:# sh ./NVIDIA-Linux-x86-173.14.12-pkg1.run重新启动以后就ok。要用nvidia的驱动,每次升级内核都要这么做。

十、无线网卡相关的内核选项是Networking ---Wireless ---Generic IEEE 802.11 Networking Stack (mac80211)还有4965的驱动。4965

无线网卡驱动虽然已经编入内核,但没有firmware无法使用。需要把原来内核的firmware拷贝到新内核对应的目录,名字和内核一致,我的内核是

linux-image-2.6.25.10dell1400,那建的目录名就是2.6.25.10dell1400。代码:具体命令:$ cd /lib/firmware/$ sudo mkdir 2.6.25.10dell1400把你的老内核中的4965的firmware拷贝过来。$ sudo cp 2.6.24-16-generic/* 2.6.25.10dell1400/上面的命令和下面的命令是等价的:$ cd /lib/firmware/$ sudo cp -R 2.6.24-16-generic/ 2.6.25.10dell1400/

重新启动系统,无线网卡就正常了。

附编译使用的机器配置:dell vostro 1400,t8100,nvidia 8400cs显卡,内置SigmaTel STAC9228芯片的声卡,4965无线网卡,BCM5906M千兆网卡,3G内存,160G硬盘,combo刻录。

编译系统版本:ubuntu 8.04桌面版.

兄台,我看见你用过curses.h,能否告诉我你当初是怎么安装的?

c语言的引入库文件都是一个道理,库文件本身和头文件,然后加入路径。至于安装的细节我都不记得是否有过了。用起来挺方便的。网上很多教程,尤其是curses官网,全英文。很详细。很久了,我也记不清了。这些希望能帮到你。

LINUX下如何用G++编c++,给一个详细的实例就好

参见这个地址:

G++ 中文使用教程

=====================================================================

简介 gcc and g++分别是GNU的c c++编译器 gcc/g++在执行编译工作的时候,总共需要4步

1.预处理,生成.i的文件[预处理器cpp]

2.将预处理后的文件不转换成汇编语言,生成文件.s[编译器egcs]

3.有汇编变为目标代码(机器代码)生成.o的文件[汇编器as]

4.连接目标代码,生成可执行程序[链接器ld]

操作指南 [参数详解]

-x language filename

设定文件所使用的语言,使后缀名无效,对以后的多个有效.也就是根

据约定C语言的后缀名称是.c的,而C++的后缀名是.C或者.cpp,如果

你很个性,决定你的C代码文件的后缀名是.pig 哈哈,那你就要用这

个参数,这个参数对他后面的文件名都起作用,除非到了下一个参数

的使用。

可以使用的参数吗有下面的这些

`c', `objective-c', `c-header', `c++', `cpp-output',

`assembler', and `assembler-with-cpp'.

看到英文,应该可以理解的。

例子用法:

gcc -x c hello.pig

-x none filename

关掉上一个选项,也就是让gcc根据文件名后缀,自动识别文件类型

例子用法:

gcc -x c hello.pig -x none hello2.c

-c

只激活预处理,编译,和汇编,也就是他只把程序做成obj文件

例子用法:

gcc -c hello.c

他将生成.o的obj文件

-S

只激活预处理和编译,就是指把文件编译成为汇编代码。

例子用法

gcc -S hello.c

他将生成.s的汇编代码,你可以用文本编辑器察看

-E

只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里

面.

例子用法:

gcc -E hello.c pianoapan.txt

gcc -E hello.c | more

慢慢看吧,一个hello word 也要与处理成800行的代码

-o

制定目标名称,缺省的时候,gcc 编译出来的文件是a.out,很难听,如果

你和我有同感,改掉它,哈哈

例子用法

gcc -o hello.exe hello.c (哦,windows用习惯了)

gcc -o hello.asm -S hello.c

-pipe

使用管道代替编译中临时文件,在使用非gnu汇编工具的时候,可能有些问

gcc -pipe -o hello.exe hello.c

-ansi

关闭gnu c中与ansi c不兼容的特性,激活ansi c的专有特性(包括禁止一

些asm inline typeof关键字,以及UNIX,vax等预处理宏,

-fno-asm

此选项实现ansi选项的功能的一部分,它禁止将asm,inline和typeof用作

关键字。

-fno-strict-prototype

只对g++起作用,使用这个选项,g++将对不带参数的函数,都认为是没有显式

的对参数的个数和类型说明,而不是没有参数.

而gcc无论是否使用这个参数,都将对没有带参数的函数,认为城没有显式说

明的类型

-fthis-is-varialble

就是向传统c++看齐,可以使用this当一般变量使用.

-fcond-mismatch

允许条件表达式的第二和第三参数类型不匹配,表达式的值将为void类型

-funsigned-char

-fno-signed-char

-fsigned-char

-fno-unsigned-char

这四个参数是对char类型进行设置,决定将char类型设置成unsigned char(前

两个参数)或者 signed char(后两个参数)

-include file

包含某个代码,简单来说,就是便以某个文件,需要另一个文件的时候,就可以

用它设定,功能就相当于在代码中使用#includefilename

例子用法:

gcc hello.c -include /root/pianopan.h

-imacros file

将file文件的宏,扩展到gcc/g++的输入文件,宏定义本身并不出现在输入文件

-Dmacro

相当于C语言中的#define macro

-Dmacro=defn

相当于C语言中的#define macro=defn

-Umacro

相当于C语言中的#undef macro

-undef

取消对任何非标准宏的定义

-Idir

在你是用#include"file"的时候,gcc/g++会先在当前目录查找你所制定的头

文件,如果没有找到,他回到缺省的头文件目录找,如果使用-I制定了目录,他

回先在你所制定的目录查找,然后再按常规的顺序去找.

对于#includefile,gcc/g++会到-I制定的目录查找,查找不到,然后将到系

统的缺省的头文件目录查找

-I-

就是取消前一个参数的功能,所以一般在-Idir之后使用

-idirafter dir

在-I的目录里面查找失败,讲到这个目录里面查找.

-iprefix prefix

-iwithprefix dir

一般一起使用,当-I的目录查找失败,会到prefix+dir下查找

-nostdinc

使编译器不再系统缺省的头文件目录里面找头文件,一般和-I联合使用,明确

限定头文件的位置

-nostdin C++

规定不在g++指定的标准路经中搜索,但仍在其他路径中搜索,.此选项在创建

libg++库使用

-C

在预处理的时候,不删除注释信息,一般和-E使用,有时候分析程序,用这个很

方便的

-M

生成文件关联的信息。包含目标文件所依赖的所有源代码

你可以用gcc -M hello.c来测试一下,很简单。

-MM

和上面的那个一样,但是它将忽略由#includefile造成的依赖关系。

-MD

和-M相同,但是输出将导入到.d的文件里面

-MMD

和-MM相同,但是输出将导入到.d的文件里面

-Wa,option

此选项传递option给汇编程序;如果option中间有逗号,就将option分成多个选

项,然后传递给会汇编程序

-Wl.option

此选项传递option给连接程序;如果option中间有逗号,就将option分成多个选

项,然后传递给会连接程序.

-llibrary

制定编译的时候使用的库

例子用法

gcc -lcurses hello.c

使用ncurses库编译程序

-Ldir

制定编译的时候,搜索库的路径。比如你自己的库,可以用它制定目录,不然

编译器将只在标准库的目录找。这个dir就是目录的名称。

-O0

-O1

-O2

-O3

编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最

-g

只是编译器,在编译的时候,产生调试信息。

-gstabs

此选项以stabs格式声称调试信息,但是不包括gdb调试信息.

-gstabs+

此选项以stabs格式声称调试信息,并且包含仅供gdb使用的额外调试信息.

-ggdb

此选项将尽可能的生成gdb的可以使用的调试信息.

-static

此选项将禁止使用动态库,所以,编译出来的东西,一般都很大,也不需要什么

动态连接库,就可以运行.

-share

此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库.

-traditional

试图让编译器支持传统的C语言特性

GNU 的调试器称为 gdb,该程序是一个交互式工具,工作在字符模式。在 X Window 系统中,有一个 gdb 的

前端图形工具,称为 xxgdb。gdb 是功能强大的调试程序,可完成如下的调试任务:

* 设置断点;

* 监视程序变量的值;

* 程序的单步执行;

* 修改变量的值。

在可以使用 gdb 调试程序之前,必须使用 -g 选项编译源文件。可在 makefile 中如下定义 CFLAGS 变量:

CFLAGS = -g

运行 gdb 调试程序时通常使用如下的命令:

gdb progname

在 gdb 提示符处键入help,将列出命令的分类,主要的分类有:

* aliases:命令别名

* breakpoints:断点定义;

* data:数据查看;

* files:指定并查看文件;

* internals:维护命令;

* running:程序执行;

* stack:调用栈查看;

* statu:状态查看;

* tracepoints:跟踪程序执行。

键入 help 后跟命令的分类名,可获得该类命令的详细清单。

#DENO#

gdb 的常用命令

表 1-4 常用的 gdb 命令

命令 解释

break NUM 在指定的行上设置断点。

bt 显示所有的调用栈帧。该命令可用来显示函数的调用顺序。

clear 删除设置在特定源文件、特定行上的断点。其用法为:clear FILENAME:NUM。

continue 继续执行正在调试的程序。该命令用在程序由于处理信号或断点而

导致停止运行时。

display EXPR 每次程序停止后显示表达式的值。表达式由程序定义的变量组成。

file FILE 装载指定的可执行文件进行调试。

help NAME 显示指定命令的帮助信息。

info break 显示当前断点清单,包括到达断点处的次数等。

info files 显示被调试文件的详细信息。

info func 显示所有的函数名称。

info local 显示当函数中的局部变量信息。

info prog 显示被调试程序的执行状态。

info var 显示所有的全局和静态变量名称。

kill 终止正被调试的程序。

list 显示源代码段。

make 在不退出 gdb 的情况下运行 make 工具。

next 在不单步执行进入其他函数的情况下,向前执行一行源代码。

print EXPR 显示表达式 EXPR 的值。

1.8.5 gdb 使用范例

-----------------

清单 一个有错误的 C 源程序 bugging.c

-----------------

#include

#include

static char buff [256];

static char* string;

int main ()

{

printf ("Please input a string: ");

gets (string);

printf ("\nYour string is: %s\n", string);

}

-----------------

上面这个程序非常简单,其目的是接受用户的输入,然后将用户的输入打印出来。该程序使用了一个未经过初

始化的字符串地址 string,因此,编译并运行之后,将出现 Segment Fault 错误:

$ gcc -o test -g test.c

$ ./test

Please input a string: asfd

Segmentation fault (core dumped)

为了查找该程序中出现的问题,我们利用 gdb,并按如下的步骤进行:

1.运行 gdb bugging 命令,装入 bugging 可执行文件;

2.执行装入的 bugging 命令;

3.使用 where 命令查看程序出错的地方;

4.利用 list 命令查看调用 gets 函数附近的代码;

5.唯一能够导致 gets 函数出错的因素就是变量 string。用 print 命令查看 string 的值;

6.在 gdb 中,我们可以直接修改变量的值,只要将 string 取一个合法的指针值就可以了,为此,我们在第

11 行处设置断点;

7.程序重新运行到第 11 行处停止,这时,我们可以用 set variable 命令修改 string 的取值;

8.然后继续运行,将看到正确的程序运行结果。

如何为现有的openwrt编译一个opkg上没有的软件

这是我去年编辑一个软件时记下的过程,希望对你有所帮助,我也是新手,按照官方提供的教程一步步修改,中间断断续续弄了近两个月,最后总算编译成功了。

一、安装编译环境(以ubuntu10.10为例)

依次输入以下命令:

1.ubuntu开发环境需要的软件:

sudo apt-get install gcc g++ binutils patch bzip2 flex bison make

autoconf gettext texinfo unzip sharutils subversion libncurses5-dev

ncurses-term zlib1g-dev gawk

sudo apt-get update

2.创建目录

mkdir openwrt

3.获取OpenWrt源代码和安装包,更新

svn checkout svn://svn.openwrt.org/openwrt/backfire

cd backfire

./scripts/feeds update -a

./scripts/feeds install -a

4.配置编译选项

make menuconfig

在target system里选择Broadcom BCM63xx,根据需要选择其他的软件,

*:表示该模块直接编译到核心中

M:该模块以被核心支持,可以后再安装

空白:不支持该模块

具体模块的起什么作用需要多google;

5.编译选项配置保存后,开始编译

make V=99

V=99表示输出详细的debug信息;

二、编译准备

1.下载源文件

下载地址: ,最新的版本是0.91rc6;

2.获取md5sum码

进入下载文件目录,在终端里输入

md5sum cntlm-0.91rc6.tar.gz

获得md5验证码:21ccd60294269cb8fbe3e2e49374ab1b

3.编写makefile文件

在openwrt/backfire目录中的package目录下新建cntlm目录,在cntlm目录下新建文件,命名为makefile,编辑makefile文件,加入如下内容:

---------------------------------------------------------------------------------------------------------------------------

#

# Copyright (C) 2006-2008 OpenWrt.org

#

# This is free software, licensed under the GNU General Public License v2.

# See /LICENSE for more information.

#

include $(TOPDIR)/rules.mk

PKG_NAME:=cntlm

PKG_VERSION:=0.91rc6

PKG_RELEASE:=1

PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz

PKG_SOURCE_URL:=

PKG_MD5SUM:=21ccd60294269cb8fbe3e2e49374ab1b

PKG_INSTALL:=1

include $(INCLUDE_DIR)/package.mk

define Package/cntlm

SUBMENU:=Proxy Servers

SECTION:=net

CATEGORY:=Network

TITLE:=Cntlm is a Fast NTLM Authentication Proxy

URL:=

endef

define Package/cntlm/install

$(INSTALL_DIR) $(1)/usr/sbin

$(CP) $(PKG_INSTALL_DIR)/usr/sbin/cntlm $(1)/usr/sbin/

$(INSTALL_DIR) $(1)/usr/share/man/man1

$(CP) $(PKG_INSTALL_DIR)/usr/share/man/man1/$(PKG_NAME).1 $(1)/usr/share/man/man1

$(INSTALL_DIR) $(1)/etc/

$(CP) $(PKG_INSTALL_DIR)/etc/cntlm.conf $(1)/etc/

endef

$(eval $(call BuildPackage,cntlm))

---------------------------------------------------------------------------------------------------------------------------

4.编写patch文件

由于BCM63xx核心是big endian,而我们常用的intel或AMD的cpu都是little

endian的,cntlm虽然能够自己检测编译环境的endian,但我们是在交叉编译环境中编译,cntlm检测出来的还是ubuntu系统的

endian,因此需要设置手动endian为big endian。具体就是将源码文件中的config/endian.c文件的rc设定为0.

将源码文件中的endian.c文件分别复制到a目录下的config目录和b目录下的config目录,打开b目录下的config目录中的endian.c文件,并将其修改为:

-------------------------------------------------------------------------------------------------------------------------

#include stdio.h

#include stdint.h

int main(int argc, char **argv) {

int rc;

rc = 0;

printf("%s\n", rc ? "little endian" : "big endian");

return rc;

}

---------------------------------------------------------------------------------------------------------------------------

然后保存。

运行:

diff -Naur a/config/endian.c b/config/endian.c endian.patch

endian.patch文件内容如下:

---------------------------------------------------------------------------------------------------------------------------

--- a/config/endian.c 2007-08-20 07:23:17.000000000 +0800

+++ b/config/endian.c 2010-11-01 18:36:32.000000000 +0800

@@ -1,15 +1,11 @@

#include stdio.h

#include stdint.h

-uint8_t num[] = { 0xEF, 0xBE };

-/*

- * RC: 1 = LE, 0 = BE

- */

int main(int argc, char **argv) {

int rc;

- rc = (*((uint16_t *)num) == 0xBEEF);

+ rc = 0;

printf("%s\n", rc ? "little endian" : "big endian");

return rc;

---------------------------------------------------------------------------------------------------------------------------

将endian.patch文件复制到package/cntlm/patches/目录下(没有patches目录就新建一个)。

三、编译

1.选定安装包

终端输入:

make menuconfig

在Network——》Proxy Severs中选择cntlm;

2.开始编译

终端输入:

make package/cntlm/compile V=99

中间可能会出现一些提示(Note),可以不用理会。编译完成后在bin/packages目录下可以看到cntlm_0.91rc6-1_brcm63xx.ipk文件啦。

四、补充

上面提到在编译过程中出会现提示(Note),一般如下:

utils.c:1: note: someone does not honour COPTS correctly, passed 0 times

这是由于cntlm源码文件中CFLAG的设置是覆盖而不是续接,与openwrt要求不同,在openwrt一般写成CFLAG += 的方式。可以通过如下修改去除note:

将源码包中的Makefile文件复制到a目录和b目录,打开b目录下的Makefile文件,作如下修改:

CFLAGS+=$(FLAGS)

即增加上面的“+”号,保存。

运行:

diff -Naur a/Makefile b/Makefile makefile.patch

得到的makefile.patch文件如下:

---------------------------------------------------------------------------------------------------------------------------

--- a/Makefile 2010-04-29 19:18:58.000000000 +0800

+++ b/Makefile 2010-11-09 20:17:33.405177000 +0800

@@ -16,7 +16,7 @@

CC=gcc

VER=`cat VERSION`

OBJS=utils.o ntlm.o xcrypt.o config.o socket.o acl.o auth.o http.o forward.o direct.o scanner.o pages.o main.o

-CFLAGS=$(FLAGS) -std=c99 -Wall -pedantic -O3 -D__BSD_VISIBLE

-D_ALL_SOURCE -D_XOPEN_SOURCE=600 -D_POSIX_C_SOURCE=200112

-D_ISOC99_SOURCE -D_REENTRANT -DVERSION=\"`cat VERSION`\" -g

+CFLAGS+=$(FLAGS) -std=c99 -Wall -pedantic -O3 -D__BSD_VISIBLE

-D_ALL_SOURCE -D_XOPEN_SOURCE=600 -D_POSIX_C_SOURCE=200112

-D_ISOC99_SOURCE -D_REENTRANT -DVERSION=\"`cat VERSION`\" -g

OS=$(shell uname -s)

OSLDFLAGS=$(shell [ $(OS) = "SunOS" ] echo "-lrt -lsocket -lnsl")

LDFLAGS:=-lpthread $(OSLDFLAGS)

---------------------------------------------------------------------------------------------------------------------------

将makefile.patch文件复制到package/cntlm/patches目录下,重新编译即可。

(责任编辑:IT教学网)

更多

推荐Flash教程文章