新版dev63怎麼編譯
❶ 如何為現有的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.下載源文件
下載地址:http://ftp.awk.cz/cntlm/ ,最新的版本是0.91rc6;
2.獲取md5sum碼
進入下載文件目錄,在終端里輸入
md5sum cntlm-0.91rc6.tar.gz
獲得md5驗證碼:
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:=http://ftp.awk.cz/cntlm/
PKG_MD5SUM:=
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:=http://cntlm.sourceforge.net/
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
#include
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
#include
-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目錄下,重新編譯即可。
❷ 詳解Linux系統中hdparm硬碟檢測工具的使用
在Linux下可以使用hdparm工具查看硬碟的相關信息或對硬碟進行測速、優化、修改硬碟相關參數設定。我主要常用這個工具來測試硬碟速度。
hdparm(hard disk parameters)
功能說明:顯示與設定硬碟的參數。
語法:
復制代碼代碼如下:hdparm [-CfghiIqtTvyYZ][-a ][-A ][-c ][-d ][-k ][-K ][-m ][-n <0或1>][-p ][-P ][-r ][-S ][-u ][-W ][-X ][設備]
參數說明:
-a 設定讀取文件時,預先存入塊區的分區數,若不加上選項,則顯示目前的設定。
-A 啟動或關閉讀取文件時的快取功能。
-c 設定IDE32位I/O模式。
-C 檢測IDE硬碟的電源管理模式。
-d 設定磁碟的DMA模式。
-f 將內存緩沖區的數據寫入硬碟,並清楚緩沖區。
-g 顯示硬碟的磁軌,磁頭,磁區等參數。
-h 顯示幫助。
-i 顯示硬碟的硬體規格信息,這些信息是在開機時由硬碟本身所提供。
-I 直接讀取硬碟所提供的硬體規格信息。
-k 重設硬碟時,保留-dmu參數的設定。
-K 重設硬碟時,保留-APSWXZ參數的設定。
-m 設定硬碟多重分區存取的分區數。
-n 忽略硬碟寫入時所發生的錯誤。
-p 設定硬碟的PIO模式。
-P 設定硬碟內部快取的分區數。
-q 在執行後續的參數時,不在屏幕上顯示任何信息。
-r 設定硬碟的讀寫模式。
-S 設定硬碟進入省電模式前的等待時間。
-t 評估硬碟的讀取效率。
-T 平谷硬碟快取的讀取效率。
-u 在硬碟存取時,允許其他中斷要求同時執行。
-v 顯示硬碟的相關設定。
-W 設定硬碟的寫入快取。
-X 設定硬碟的傳輸模式。
-y 使IDE硬碟進入省電模式。
-Y 使IDE硬碟進入睡眠模式。
-Z 關閉某些Seagate硬碟的自動省電功能。
hdparm常用參數使用舉例:
1、顯示硬碟的相關設置:
/dev/sda:
IO_support = 0 (default 16-bit)
readonly = 0 (off)
readahead = 256 (on)
geometry = 19929[柱面數]/255[磁頭數]/63[扇區數], sectors = 320173056[總扇區數], start = 0[起始扇區數]
2、顯示硬碟的柱面、磁頭、扇區數:
/dev/sda:
geometry = 19929[柱面數]/255[磁頭數]/63[扇區數], sectors = 320173056[總扇區數], start = 0[起始扇區數]
3、測試硬碟的讀取速度:
復制代碼代碼如下:[root@oracle ~]# hdparm -t /dev/xvda
/dev/xvda:
Timing buffered disk reads: 422 MB in 3.01 seconds = 140.20 MB/sec
[root@oracle ~]# hdparm -t /dev/xvda
/dev/xvda:
Timing buffered disk reads: 408 MB in 3.01 seconds = 135.59 MB/sec
[root@oracle ~]# hdparm -t /dev/xvda
/dev/xvda:
Timing buffered disk reads: 416 MB in 3.01 seconds = 138.24 MB/sec
4、測試硬碟緩存的讀取速度:
/dev/xvda:
Timing cached reads: 11154 MB in 1.98 seconds = 5633.44 MB/sec
[root@oracle ~]# hdparm -T /dev/xvda
/dev/xvda:
Timing cached reads: 10064 MB in 1.98 seconds = 5077.92 MB/sec
[root@oracle ~]# hdparm -T /dev/xvda
/dev/xvda:
Timing cached reads: 10600 MB in 1.98 seconds = 5351.73 MB/sec
5、檢測硬碟的電源管理模式:
/dev/sda:
drive state is: standby [省電模式]
6、查詢並設置硬碟多重扇區存取的扇區數,以增進硬碟的存取效率:
[root@oracle ~]# hdparm -m 參數值為整數值如8 /dev/sda
附:硬碟壞道修復方法
檢查:
復制代碼代碼如下:smartctl -l selftest /dev/sda卸載:
復制代碼代碼如下:umount /dev/sda*修復:
復制代碼代碼如下:badblocks /dev/sda