當前位置:首頁 » 操作系統 » hwclock源碼

hwclock源碼

發布時間: 2022-11-07 08:08:13

源碼包安裝ntp後找不到/etc/ntp.conf配置文件

NTP伺服器在我這里,我想做客戶端連接,但是當我通過終端想打開etc/ntp.conf時,提示我沒有許可權!
找到文件能打開,但是是只讀的,不能修改,懇請高人指點如何修改這個文件。
三、什麼是NTP
為了實現時間同步,我們就需要用戶NTP(Network Time Protocol)這個協議。如圖1所示。簡單地說,NTP是用來使系統和一個精確的時間源保持時間同步的協議。筆者建議管理員最好在自己管理的網路中建立至少一台時間伺服器來同步本地時間。
如 果在一個公司的區域網中,如果讓每個員工通過手動的方式每隔一段時間去校準時間,不但不利於管理,而且校準目標時間源也不一定準確。公司區域網絡中不同計 算機的時間偏差尤其是客戶機/伺服器之間的時間偏差,就會對一些要求時間同步的服務產生影響。比如,為了管理方便,伺服器設置了一到下班時間便 賬號過期,用戶無法訪問Internet網路。而如果你的電腦時間與伺服器的時間不同步,當你為你下班時間未到,正准備發送郵件時,或許在伺服器的時間 上,你的賬號便過期了,從而導到無法發送郵件。解決這種問題的方法很簡單,就是建立一個能提供精確時間的伺服器,區域網內的所有電腦統一通過這台時間服務 器進行時間同步、校準。
四、NTP伺服器安裝
現在,我們就來介紹一下,如何在linux系統下,建立一個NTP伺服器吧。在本文中,我們採用的是Fedora 2操作系統作為例子 (其它版本Linux也可以,系統的配置類似)。
使用 RPM 安裝
首先輸入如下指令
rpm -q ntp
查詢本機是否安裝了NTP軟體包。如果沒有安裝的話,找到您的 Linux 的安裝光碟,mount 上後,查找以NTP開頭的軟體包名,然後安裝上去,就可以了!
rpm –ivh ntp-4.1.2-5.i386.rpm
五、NTP服務的設置
1.NTP軟體包的結構
NTP服務的配置文件:
/etc/ntp.conf :這個是 NTP 服務的主要配置文件,不同的Linux版本文件所在的目錄可能會不同!
與NTP服務有關的Linux 系統文件及目錄:
/usr/share/zoneinfo:這是個目錄,在這個目錄下是規定了各主要時區的時間設定文件,例如中國大陸地區的時區設置文件是 /usr/share/zoneinfo/Asia/Shanghai 。
/etc /sysconfig/clock:這個文件是Linux 的主要時區設定文件。每次啟動後,Linux 會自動讀取這個文件來設定系統預設要顯示的時間!比如這個文件內容為「ZONE=Asia/Shanghai」,這表示我們的時間設定使用 /usr/share/zoneinfo/Asia/Shanghai 這個文件!
/etc/localtime:這個文件是本地系 統的時間設定文件! 假設clock 文件裡面規定了使用的時間設定文件為 /usr/share/zoneinfo/Asia/Shanghai, Linux 系統就會將 Shanghai那個文件復制一份為 /etc/localtime ,所以系統的時間顯示就會以 Shanghai 那個時間設定文件為准。假設這台主機到了美國紐約,您只要將 /etc/sysconfig/clock 裡面的ZONE 設定成為ZONE="America/New_York" 並且將/usr/share/zoneinfo/America/New_York復製成為 /etc/localtime ,其它什麼設置都不需要改動,系統的顯示時間就是美國紐約當地的時間了!

與 NTP 及系統時間有關的執行文件:
/bin/date: Linux 系統上面的日期與時間修改及輸出命令。
/sbin /hwclock:因為主機的 BIOS 時間與 Linux 系統時間是分開的,所以使用 date 這個指令調整了時間之後,只是調整了linux的系統時間,還需要使用 hwclock 才能將修改過後的時間寫入 BIOS。這個命令必須root用戶才能執行 。
/usr/sbin/ntpd:NTP服務的守護進程文件,需要啟動它才能提供NTP服務。
/usr/sbin/ntpdate:NTP客戶端用來連接NTP伺服器命令文件。
2.NTP服務端的設置
編輯 /etc/ntp.conf 文件
關於許可權設定部分
許可權的設定主要以 restrict 這個參數來設定,主要的語法為:
restrict IP地址 mask 子網掩碼 參數
其中 IP 可以是IP地址,也可以是 default ,default 就是指所有的IP
參數有以下幾個:
ignore:關閉所有的 NTP 聯機服務
nomodify:客戶端不能更改服務端的時間參數,但是客戶端可以通過服務端進行網路校時。
notrust :客戶端除非通過認證,否則該客戶端來源將被視為不信任子網
noquery :不提供客戶端的時間查詢
注意:如果參數沒有設定,那就表示該 IP (或子網)沒有任何限制!
上級時間伺服器的設定
由於我們配置的NTP 伺服器需要網路上面時間比較准確的NTP伺服器來更新自己的時間,所以在我們的 NTP 伺服器上面要配置一部上級時間伺服器來進行校準!在 Internet 上面提供了許多時間伺服器,從下面地址找一個離你最近的

用server這個參數設定上級時間伺服器,語法為:
server IP地址或域名 [prefer]
IP地址或域名就是我們指定的上級時間伺服器,如果 Server 參數最後加上 prefer,表示我們的 NTP 伺服器主要以該部主機時間進行校準。
解決NTP伺服器校準時間時的傳送延遲
使用driftfile參數設置:
driftfile 文件名
在與上級時間伺服器聯系時所花費的時間,記錄在driftfile參數後面的文件內。
注意: driftfile 後面接的文件需要使用完整的路徑文件名,不能是鏈接文件,並且文件的許可權需要設定成 ntpd守護進程可以寫入。
ntp.conf文件舉例:
設置要求:不對 Internet 提供服務,僅對內部子網 192.168.0.0/24 提供服務,NTP 伺服器的上級時間主機為:clock.nc.fukuoka-u.ac.jp和ntp.nasa.gov,內部子網的客戶端不能修改NTP伺服器的時間參數。
在ntp.conf中增加以下內容:
restrict default ignore# 關閉所有的 NTP 要求封包
restrict 127.0.0.1 # 開啟內部遞歸網路介面 lo
restrict 192.168.0.0 mask 255.255.255.0 nomodify #在內部子網裡面的客戶端可以 進行網路校時,但不能修改NTP伺服器的時間參數。
server 133.100.9.2 prefer #用133.100.9.2做上級時間伺服器
server 198.123.30.132 #198.123.30.132作為上級時間伺服器參考
restrict 133.100.9.2 #開放server 訪問我們ntp服務的許可權
restrict 198.123.30.132
driftfile /var/lib/ntp/drift
保存退出後。啟動NTP服務
service ntpd start
如果想每次系統啟動,NTP服務自動啟動,請輸入下面命令: chkconfig -level 35 ntpd on 注意:
1.NTP服務的埠是123,使用的是udp協議,所以NTP伺服器的防火牆必須對外開放udp 123這個埠。
2.Ntpd啟動的時候通常需要一段時間進行時間同步,所以在ntpd剛剛啟動的時候還不能正常提供時鍾服務,最長大概有5分鍾吧,如果超過了這個時間請檢查一下您的配置文件。
六、NTP客戶端的使用
Linux系統
在Linux 上面進行網路校時非常簡單,執行 ntpdate 即可:
ntpdate 192.168.0.1 #192.168.0.1是NTP伺服器的IP
不要忘了使用hwclock命令,把時間寫入bios
hwclock -w
如果想定時進行時間校準,可以使用crond服務來定時執行。
編輯 /etc/crontab 文件
加入下面一行:
30 8 * * * root /usr/sbin/ntpdate 192.168.0.1; /sbin/hwclock -w #192.168.0.1是NTP伺服器的IP地址
然後重啟crond服務
service crond restart
這樣,每天 8:30 Linux 系統就會自動的進行網路時間校準。
Windows 系統
在 Windows XP上面使用NTP進行時間校準也很簡單:
雙擊桌面任務欄上的時間,彈出「日期和時間」屬性窗口,如圖所示:
選擇Internet時間,在伺服器中填入你的NTP伺服器的IP地址或者域名,然後點擊立即更新,您的系統時間就會立即更新。如果想定時更新,把左上角的自動與Internet時間伺服器同步選中,然後點擊右下角的應用即可。
yy-2-3.tif
如 果不是Windows XP系統,但是NTP伺服器同時也是samba伺服器的話,則對Windows來說,不需要安裝任何時間同步軟體,因為Windows客戶端可以用net time\\時間伺服器IP或伺服器netbios名/set/yes來同步。可以把該命令放在開始菜單的啟動項中,啟動windows時自動同步。

由於net time命令是利用Netbios over TCP/IP協議來同步時間,所以NTP伺服器不同時是samba 伺服器的話,就需要Windows客戶端安裝時間同步軟體。這方面的軟體很多,使用也很簡單,讀者可以上網查找一下。

Ⅱ hwclock 輸出列印是什麼意思

clock命令就是hwclock的鏈接。
設置需要su許可權。
設置系統時間用date
date 041809392011
將系統時間設為2011年4月18日 9:39

設置硬體時間用hwclock
hwclock --systohc 將系統時間賦予硬體時間
hwclock --hctosys 將硬體時間賦予系統時間

硬體時間應為當地時間,而不是UTC時間

Ⅲ 如何復制centos系統形

在我們使用CentOS系統的時候,也許時區經常會出現問題,有時候改完之後還是會出錯,下面我們就來學習一種方法來改變這個狀況。如果沒有安裝,而你使用的是 CentOS系統 那使用命令 yum install ntp
然後:ntpdate us.pool.ntp.org 。
因為CentOS系統是用rhas的源碼再編譯的,很多地方是完全一樣的。
rhas5的時區是以文件形式存在的,當前的時區文件是在/etc/localtime
那麼其他時區的文件存放在哪裡呢?
在/usr/share/zoneinfo下
我們用東八區,北京,上海的時間
#cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#reboot
重啟之後,date查看時間、查看當前時區 date -R、查看/修改Linux時區和時間
一、時區
1. 查看當前時區
date -R
2. 修改設置時區
方法(1)
tzselect
方法(2) 僅限於RedHat Linux 和 CentOS系統
timeconfig
方法(3) 適用於Debian
dpkg-reconfigure tzdata

3. 復制相應的時區文件,替換CentOS系統時區文件;或者創建鏈接文件
cp /usr/share/zoneinfo/$主時區/$次時區 /etc/localtime
在中國可以使用:
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
二、時間
1、查看時間和日期
date
2、設置時間和日期
將CentOS系統日期設定成1996年6月10日的命令
date -s 06/22/96
將CentOS系統時間設定成下午1點52分0秒的命令
date -s 13:52:00
3. 將當前時間和日期寫入BIOS,避免重啟後失效
hwclock -w
三、定時同步時間
# /usr/sbin/ntpdate 210.72.145.44 > /dev/null 2>&1

Ⅳ win7怎樣使用kernel streaming

內核流(Kernel Streaming)驅動模型在多媒體方面應用的比較多,支持內核流模型的驅動能夠
向系統報告它的性能,以及能夠將數據高效,通用的傳遞。通俗的說,就是可以將攝像頭的數據直接傳遞到顯卡中顯示,而不需要通過應用層.它可以避免數據在應用層和內核層之間的傳遞,但是這對於上層來說是透明的;並且採用WDM 內核流模型還可以實現設備無關性,使得程序有很好的移植性和通用性。一般來說,QQ攝像頭就是使用基於WDM內核流的組件來實現的。所以可以在打開攝像頭的時候輕易的更換為給對方播放影音文件(在上層使用相同的組件和流程,僅僅更換了source filter)。在這里需要指明的是,minidriver一般是可以和硬體設備相關,但是也不一樣會和硬體設備相關,它在內核層同樣可以調用其他的組件,例如可以實現虛擬攝像頭之類的應用。

一般來說,硬體設備會提供一個KsProxy組件,這個組件能夠完成一些相應的擴展功能,同時,也可以將數據進行不同類別的傳送。上層應用程序能夠控制底層數據的流向,而不是將數據拷貝到應用層,然後再傳遞給內核層處理(這個和DirectX的處理有相似的地方,因為DirectShow曾經也是DirectX的一員)。

雖然現在微軟對於流內核結構進行了調整,新的流類型採用的是AVStream(下一次在敘述AVStream框架)。但是從目前來看,很多情況下仍然採用目前的方式來處理數據。

下面通過源代碼和數據類型的形式來講解一下這個驅動程序的框架結構。會盡量屏蔽代碼中關於具體設備的細節,專注於描述stream class的流程和結構:
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1. 驅動程序的入口點:

NTSTATUS DriverEntry(__in PDRIVER_OBJECT DriverObject, __in PUNICODE_STRING

RegistryPath)
{
HW_INITIALIZATION_DATA HwInitData;

RtlZeroMemory( &HwInitData, sizeof(HW_INITIALIZATION_DATA) );

HwInitData.HwInitializationDataSize = sizeof(HwInitData); // 結構大小
HwInitData.HwInterrupt = NULL; // 硬體回調
HwInitData.HwReceivePacket = MyReceivePacket; // 控制回調
HwInitData.HwCancelPacket = MyCancelOnePacket; // 取消回調
HwInitData.HwRequestTimeoutHandler = MyTimeoutHandler; // 超時回調
HwInitData.DeviceExtensionSize = sizeof(MY_EXTENSION); // 設備擴展
HwInitData.PerStreamExtensionSize = sizeof(STREAMEX); // 流擴展
HwInitData.PerRequestExtensionSize = sizeof(IRB); // SRB大小
HwInitData.FilterInstanceExtensionSize = 0; // 安裝大小
HwInitData.BusMasterDMA = FALSE; // 匯流排DMA
HwInitData.Dma24BitAddresses = FALSE; // DMA地址
HwInitData.BufferAlignment = sizeof(ULONG) - 1; //
HwInitData.TurnOffSynchronization = TRUE;
HwInitData.DmaBufferSize = 0;

// 注冊流埠驅動和回調函數
return (StreamClassRegisterAdapter(DriverObject, RegistryPath, &HwInitData));
}

這里可以看得出,驅動入口點基本上只是向stream class注冊回調函數和信息。此處的設備

擴展和流擴展需要我們自己定義。

超時回調函數和取消回調函數本身並沒有做太過於特殊的事情,關鍵在於控制命令回調函數,它是接收上層,也就是stream class 發送的控制包,下面會詳細的講解控制命令回調函數:

2. MyReceivePacket函數:

VOID
MyReceivePacket(IN PHW_STREAM_REQUEST_BLOCK pSrb)
{
PIO_STACK_LOCATION IrpStack;
PMY_EXTENSION pDevExt = (PMY_EXTENSION) pSrb->HwDeviceExtension;

PAGED_CODE();

pSrb->Status = STATUS_SUCCESS;

switch (pSrb->Command) {

case SRB_INITIALIZE_DEVICE: // 初始化設備
break;

case SRB_INITIALIZATION_COMPLETE: // 初始化設備完成
break;

case SRB_GET_STREAM_INFO:// 獲取設備信息
break;

case SRB_OPEN_STREAM: // 打開流
break;

case SRB_CLOSE_STREAM: // 關閉流
break;

case SRB_SURPRISE_REMOVAL: // 移除設備
break;

case SRB_UNKNOWN_DEVICE_COMMAND: // 未知的命令
break;

case SRB_UNINITIALIZE_DEVICE: // 卸載設備
break;

case SRB_GET_DATA_INTERSECTION: // 獲取格式和范圍
break;

case SRB_CHANGE_POWER_STATE: // 改變電源狀態
break;

case SRB_GET_DEVICE_PROPERTY: // 獲取設備屬性
break;

case SRB_SET_DEVICE_PROPERTY: // 設置設備屬性
break;

case SRB_PAGING_OUT_DRIVER: // ?
break;

default:

pSrb->Status = STATUS_NOT_IMPLEMENTED;
break;
}

StreamClassDeviceNotification(DeviceRequestComplete, pSrb->HwDeviceExtension,

pSrb);

}

可以看出來的是,上層會通過向這個函數發送命令包,來控制設備的行為。這個埠驅動需要

自己決定從什麼拷貝來數據,或者怎麼向上層回復。

這里stream class的命令中,需要關注地方並不多,由於設備可能會是USB設備/1394設備/網路

組件/圖像採集卡,所以很難統一的給出一份具體的代碼.但是通過下面的幾個命令的講解,大家

應該很容易的構建出具體設備的代碼來:

2.1 初始化命令: 在設備的初始化階段,stream class 會依次發送下面的命令
SRB_INITIALIZE_DEVICE->SRB_GET_STREAM_INFO->SRB_INITIALIZATION_COMPLETE

一般來說,SRB_INITIALIZE_DEVICE命令主要是初始化設備擴展和屬性結構的初始化,

SRB_GET_STREAM_INFO命令則是向注冊表寫入自己的屬性,並提供相應的另一組回調函數給

Stream class,便於接受更微觀的控制;SRB_INITIALIZATION_COMPLETE命令一般是一個完成回調

的方式。

下面的代碼會揭示在SRB_GET_STREAM_INFO命令時候,一般會進行的處理:

typedef struct _HW_STREAM_HEADER {
ULONG NumberOfStreams; // 支持的流的數目
ULONG SizeOfHwStreamInformation; // 結構大小
ULONG NumDevPropArrayEntries; // 支持的屬性數組大小
PKSPROPERTY_SET DevicePropertiesArray; // 屬性數組
ULONG NumDevEventArrayEntries; // 支持的事件數組大小
PKSEVENT_SET DeviceEventsArray; // 事件數組
PKSTOPOLOGY Topology; //
PHW_EVENT_ROUTINE DeviceEventRoutine; // 超時時間
ULONG Reserved[2]; // 保留
} HW_STREAM_HEADER, *PHW_STREAM_HEADER;

typedef struct _HW_STREAM_INFORMATION {
ULONG NumberOfPossibleInstances; // 設備支持的流的數量
KSPIN_DATAFLOW DataFlow; // 數據流的方向
BOOLEAN DataAccessible; // 數據釋放是否能夠被看到
ULONG NumberOfFormatArrayEntries; // 支持的屬性信息
PKSDATARANGE* StreamFormatsArray; // 屬性信息數組
PVOID ClassReserved[4];
ULONG NumStreamPropArrayEntries; // 流媒體的支持屬性數組的下標
PKSPROPERTY_SET StreamPropertiesArray;// 屬性數組
ULONG NumStreamEventArrayEntries;
PKSEVENT_SET StreamEventsArray;
GUID* Category; // Pin范圍
GUID* Name; // Pin的名字
ULONG MediumsCount;
const KSPIN_MEDIUM* Mediums; // 媒體類型
BOOLEAN BridgeStream; // 允許流進行橋接?
ULONG Reserved[2];
} HW_STREAM_INFORMATION, *PHW_STREAM_INFORMATION;

VOID MyGetStreamInfo(IN PHW_STREAM_REQUEST_BLOCK Srb)
{
PHW_STREAM_HEADER StreamHeader = &(Srb->CommandData.StreamBuffer->StreamHeader);

PMY_EXTENSION pDevExt = (PMY_EXTENSION) Srb->HwDeviceExtension;
PHW_STREAM_INFORMATION StreamInfo = &(Srb->CommandData.StreamBuffer->StreamInfo);

PAGED_CODE();

ASSERT (Srb->NumberOfBytesToTransfer >=
sizeof (HW_STREAM_HEADER) +
sizeof (HW_STREAM_INFORMATION));

RtlZeroMemory(StreamHeader,
sizeof (HW_STREAM_HEADER) +
sizeof (HW_STREAM_INFORMATION));

StreamHeader->NumberOfStreams = 1;
StreamHeader->SizeOfHwStreamInformation = sizeof(HW_STREAM_INFORMATION);

StreamHeader->NumDevPropArrayEntries = pDevExt->ulPropSetSupported;
StreamHeader->DevicePropertiesArray = &pDevExt->VideoProcAmpSet;

StreamInfo->NumberOfPossibleInstances = 1;

StreamInfo->DataFlow = KSPIN_DATAFLOW_OUT;

StreamInfo->DataAccessible = TRUE;

StreamInfo->NumberOfFormatArrayEntries = pDevExt->ModeSupported;
StreamInfo->StreamFormatsArray = &pDevExt->MyStrmModes[0];

StreamInfo->NumStreamPropArrayEntries = NUMBER_VIDEO_STREAM_PROPERTIES;
StreamInfo->StreamPropertiesArray = (PKSPROPERTY_SET) VideoStreamProperties;

StreamInfo->Name = (GUID *) &PINNAME_VIDEO_CAPTURE;
StreamInfo->Category = (GUID *) &PINNAME_VIDEO_CAPTURE;

Srb->CommandData.StreamBuffer->StreamHeader.Topology = &Topology;

Srb->Status = STATUS_SUCCESS;

}

2.2 打開和關閉流: SRB_OPEN_STREAM/SRB_CLOSE_STREAM 命令,此處需要注意的就是一個協商的

過程了,因為此處上層和下層需要來協商進行哪種數據類型的傳遞。

下面的代碼片段屏蔽了硬體的具體相關細節,主要描述和stream class相關的部分:

VOID MyOpenStream(IN PHW_STREAM_REQUEST_BLOCK pSrb)
{

PIRB Irb;
ULONG nSize;
PMY_EXTENSION pDevExt;
PSTREAMEX pStrmEx;
PKS_DATAFORMAT_VIDEOINFOHEADER pKSDataFormat =
(PKS_DATAFORMAT_VIDEOINFOHEADER) pSrb->CommandData.OpenFormat;
PKS_VIDEOINFOHEADER pVideoInfoHdrRequested =
&pKSDataFormat->VideoInfoHeader;

PAGED_CODE();

Irb = (PIRB) pSrb->SRBExtension;
pDevExt = (PMY_EXTENSION) pSrb->HwDeviceExtension;
pStrmEx = (PSTREAMEX)pSrb->StreamObject->HwStreamExtension;

// 緩存流擴展
pDevExt->pStrmEx = pStrmEx;

pSrb->Status = STATUS_SUCCESS;

// 確定哪些編號流被打開了。這些編號表明在流信息結構的偏移數組中被調用的
// 流信息適配器
//
// So:
// 0 - Video data from camera
//
// 0 - 從硬體出來的視頻數據

switch (pSrb->StreamObject->StreamNumber) {

case 0:
// 檢查設備是否在使用

// 找出格式,他們正試圖打開第一格式,此處一般採用的是循環對比的方式
// 來找到合適的媒體類型。
if (!AdapterVerifyFormat (pDevExt->ModeSupported, pDevExt->MyStrmModes, pKSDataFormat, pSrb->StreamObject->StreamNumber)) {
pDevExt->pStrmEx = NULL;
pSrb->Status = STATUS_INVALID_PARAMETER;
return;
}

// 初始化流擴展
InitializeStreamExtension(pDevExt, pSrb->StreamObject, pStrmEx);

// 使用我們的安全版本
if (!NT_SUCCESS(RTL_SAFE_KS_SIZE_VIDEOHEADER(pVideoInfoHdrRequested, &nSize))) {

pSrb->Status = STATUS_INTEGER_OVERFLOW;
return;
}

pStrmEx->pVideoInfoHeader = ExAllocatePoolWithTag(NonPagedPool, nSize, 'macd');
if (pStrmEx->pVideoInfoHeader == NULL) {

ASSERT(pStrmEx->pVideoInfoHeader != NULL);

pDevExt->pStrmEx = NULL;

pSrb->Status = STATUS_INSUFFICIENT_RESOURCES;
return;
}

// 拷貝媒體信息頭
RtlCopyMemory(
pStrmEx->pVideoInfoHeader,
pVideoInfoHdrRequested,
nSize);

// 分配硬體需要的資源
pSrb->Status = MyAllocateIsochResource(pDevExt, pSrb->SRBExtension, TRUE);

if (pSrb->Status) {

ExFreePool(pStrmEx->pVideoInfoHeader);
pStrmEx->pVideoInfoHeader = NULL;
pDevExt->pStrmEx = NULL;
pSrb->Status = STATUS_INSUFFICIENT_RESOURCES;
return;
}

// 提交控制回調/數據回調函數
pSrb->StreamObject->ReceiveDataPacket = (PHW_RECEIVE_STREAM_DATA_SRB) MyReceiveDataPacket;
pSrb->StreamObject->ReceiveControlPacket = (PHW_RECEIVE_STREAM_CONTROL_SRB) MyReceiveCtrlPacket;

if(pDevExt->bDevRemoved || pDevExt->bStopIsochCallback) {
pDevExt->bStopIsochCallback = FALSE;
pDevExt->bDevRemoved = FALSE;
}

// 初始化流擴展句柄信息

break;

default:
ASSERT(FALSE);
pDevExt->pStrmEx = NULL;
pSrb->Status = STATUS_INVALID_PARAMETER;
return;
}

pSrb->StreamObject->HwClockObject.ClockSupportFlags = 0;

// 我們不使用DMA方式
pSrb->StreamObject->Dma = FALSE;
pSrb->StreamObject->StreamHeaderMediaSpecific = sizeof(KS_FRAME_INFO);

// PIO 必須設置為mini驅動緩沖區使用邏輯定址,我們不打算控制這部分緩沖區
pSrb->StreamObject->Pio = FALSE;

// 將最後保存配置
(pDevExt, (PIRB) pSrb->SRBExtension);

ASSERT(pSrb->Status == STATUS_SUCCESS);

}

VOID MyCloseStream(IN PHW_STREAM_REQUEST_BLOCK pSrb)
{
PMY_EXTENSION pDevExt;
PSTREAMEX pStrmEx;
PIRB pIrb;

PAGED_CODE();

pSrb->Status = STATUS_SUCCESS;

pDevExt = (PMY_EXTENSION) pSrb->HwDeviceExtension;
ASSERT(pDevExt);

// 等待所有的未決工作完成
KeWaitForSingleObject( &pDevExt->PendingWorkItemEvent, Executive, KernelMode, FALSE, NULL );

pStrmEx = (PSTREAMEX)pDevExt->pStrmEx;
ASSERT(pStrmEx);
if(!pStrmEx ) {
StreamClassDeviceNotification(DeviceRequestComplete, pSrb->HwDeviceExtension, pSrb);
return;
}

// pDevExt->Irb可能被釋放了,在HwUninitialize()中
// 由於某個原因,所以必須使用下面的
pIrb = (PIRB) pSrb->SRBExtension;

// 保存設備擴展信息
MySetPropertyValuesToRegistry(pDevExt);

// 釋放硬體資源
MyFreeIsochResource (pDevExt, pIrb, TRUE);
if(pStrmEx->pVideoInfoHeader) {
ExFreePool(pStrmEx->pVideoInfoHeader);
pStrmEx->pVideoInfoHeader = NULL;
}

pStrmEx->hMasterClock = 0;

// 如果輸入讀,那麼取消掉它們
if(pDevExt->PendingReadCount > 0) {

if( InterlockedExchange((PLONG)&pStrmEx->CancelToken, 1 ) == 0 ) {

MyCancelAllPackets(
pDevExt,
&pDevExt->PendingReadCount
);
}
}

pDevExt->pStrmEx = 0;

StreamClassDeviceNotification(DeviceRequestComplete, pSrb->HwDeviceExtension, pSrb);

}

2.3 屬性設置: 屬性設置這一部分實際上都是通過特定的屬性表來實現的,它和硬體的相關性很大,一般採用DEFINE_KSPROPERTY_TABLE宏來實現對於屬性的封裝,這一部分可以查閱相應的資料即可實現。

Ⅳ centos 7 安裝完系統後怎麼修改時區

設置修改CentOS系統時區在我們使用CentOS系統的時候,也許時區經常會出現問題,有時候改完之後還是會出錯,下面我們就來學習一種方法來改變這個狀況。如果沒有安裝,而你使用的是 CentOS系統 那使用命令 yum install ntp然後:ntpdate us 。因為CentOS系統是用rhas的源碼再編譯的,很多地方是完全一樣的。rhas5的時區是以文件形式存在的,當前的時區文件是在/etc/localtime那麼其他時區的文件存放在哪裡呢?在/usr/share/zoneinfo下我們用東八區,北京,上海的時間#cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime#reboot重啟之後,date查看時間、查看當前時區 date -R、查看/修改linux時區和時間一、時區1. 查看當前時區date -R2. 修改設置時區方法(1)tzselect方法(2) 僅限於RedHat linux 和 CentOS系統timeconfig方法(3) 適用於Debiandpkg-reconfigure tzdata3. 復制相應的時區文件,替換CentOS系統時區文件;或者創建鏈接文件cp /usr/share/zoneinfo/$主時區/$次時區 /etc/localtime在中國可以使用:cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime二、時間1、查看時間和日期date2、設置時間和日期將CentOS系統日期設定成1996年6月10日的命令date -s 06/22/96將CentOS系統時間設定成下午1點52分0秒的命令date -s 13:52:003. 將當前時間和日期寫入BIOS,避免重啟後失效hwclock -w三、定時同步時間# /usr/sbin/ntpdate 210.72.145.44 > /dev/null 2>&1這樣我們就完成了關於設置修改CentOS系統時區的問題了。

Ⅵ 如何安裝gentoo linux

下載基本系統和源碼包
為了加快安裝速度,我是先將需要用到的幾個鏡象全部下載到本地。所須下載的文件包括:
1、最小安裝鏡象包:install-x86-minimal-20130528.iso
2、Stage Tarball快照包:stage3-i686-20130528.tar.bz2
3、系統Portage快照包:portage-latest.tar.bz2

網路環境或U盤准備
下載完成之後,我的辦法是將上述2與3兩個包放置到區域網的web上(web地址為:192.168.1.100),做個簡單的頁面,便於下載與訪問。頁面為:index.html,
頁面上只有兩行簡單的代碼:
< a href="stage3-i686-20130528.tar.bz2" > stage3< / a >
< br >< a href="portage-latest.tar.bz2" >portage < / a >< br >
如此,准備工作完成。以下開始安裝:
或使用Linux文件系統的EXT4格式的U盤存放以上兩個文件

分區
用最小安裝鏡象包install-x86-minimal-20130528.iso啟動系統,
1、劃分磁碟為了簡單方便,還是按wiki的方法,只分為三個區,
如下:
/dev/sda1 啟動分區
/dev/sda2 交換分區
/dev/sda3 根分區
以下是具體劃分磁碟與步驟:
fdisk /dev/sda首先建立boot分區:Command (m for help):
nCommand action e extended p primary partition
(1-4)pPartition number (1-4): 1First cylinder (1-3876, default 1): (按回車)
Using
default value 1Last cylinder or +size or +sizeM or +sizeK (1-3876,
default 3876):
+100M(這里設定比wiki上稍大一些,便於今後使用多個內核)由於這個分區是將來的boot,所以需要把這個分區設置成可啟動的。
鍵入a來給分區添加啟動標志,
然後鍵入1。如果你再次按p鍵,你就會注意到,
在「Boot」那一列有個*。下面建立swap分區:同上,
鍵入n創建一個新分區,然後鍵入p來告訴fdisk你創建的是主分區。接著輸入2來創建第2個主分區,在本例中是/dev/sda2。當提示輸入第一個柱面的時候,直接敲回車。當提示輸入最後一個柱面的時候,輸入+512M來創建一個512MB大小的分區。在這之後,鍵入t來設置分區類型,鍵入2選擇你剛剛創建的那個分區,然後再輸入82,即把分區設置成了「Linux

Swap」。下面,建立根分區:同上,鍵入n創建一個新分區,然後鍵入p來告訴fdisk你創建的是主分區。接著輸入3來創建第3個主分區,在本例中是/dev/sda3。當提示輸入第一個柱面的時候,直接敲回車。當提示輸入最後一個柱面的時候,仍然直接回車,把磁碟上的剩餘空間創建一個分區。完成以上這些步驟之後,鍵入p,應該顯示一個與下面類似的分區表:
Device Boot Start End Blocks Id
System/dev/sda1 * 1 14 105808+ 83
Linux/dev/sda2 15 81 506520 82
Linux swap/dev/sda3 82 3876 28690200 83
Linux2、 格式化分區並掛載分區格式化分區
mkfs.ext3 /dev/sda1
mkfs.ext4 /dev/sda3
mkswap /dev/sda2
掛載分區
swapon /dev/sda2
mount /dev/sda3 /mnt/gentoo
mkdir /mnt/gentoo/boot
mount /dev/sda1 /mnt/gentoo/boot

開始安裝基本系統
首先安裝Stage Tarball進入Gentoo的掛載點#
cd /mnt/gentoo我是預先將Stage包放到了區域網內的web上的,所以直接使用links訪問頁面並下載:
# links http://192.168.1.100區域網速度很快,幾秒就下載完畢,那麼現在解開stage包:
# tar xvjpf stage3-*.tar.bz2注意,解包的參數千萬不要出錯:xvjpf
現在stage已經安裝好,下面我們繼續安裝Portage。小心:要確保執行操作的當前位置是:
#/mnt/gentoo ,如果不是,那麼還得執行:
# cd /mnt/gentoo同樣使用links訪問上述區域網內的頁面並下載:
# links http://192.168.1.100以下,解開Portage快照包:
# tar xvjf /mnt/gentoo/portage-latest.tar.bz2 -C /mnt/gentoo/usr
小心,上述參數中的「-C」,C為大寫!

編譯安裝
-----------------------------------
以下,配置編譯的選項注意:
編譯選項放在make.conf中,現在中文wiki上對這個文件位置的說明有錯誤,現在的位置是在/mnt/gentoo/etc/portage/make.conf,
中文wiki上說的是在/mnt/gentoo/etc/make.conf(英文wiki上是正確的)。所有可參考的變數,都用注釋形式羅列在/mnt/gentoo/usr/share/portage/config/make.conf.example里。以下,開始編輯這個配置文件:用你喜歡的編輯器(nano或者vi)打開該文件
# vi /mnt/gentoo/etc/make.conf此時我們只須添加簡單點的下三個變數:
CFLAGS="-O2 -march=i686 -pipe"CXXFLAGS="${CFLAGS}"
MAKEOPTS="-j2"
將自己訪問時速度最快的鏡象站點也加入該文件:
mirrorselect -i -o >> /mnt/gentoo/etc/portage/make.conf
mirrorselect -i -r -o >> /mnt/gentoo/etc/portage/make.conf
----------------------------------拷
貝DNS設置到系統中:
cp -L /etc/resolv.conf /mnt/gentoo/etc/
將幾個重要的當前目錄,掛載到新系統下去:
# mount -t proc none /mnt/gentoo/proc
# mount --rbind /sys /mnt/gentoo/sys
# mount --rbind /dev /mnt/gentoo/dev
或者下面這樣也行:
# mount -t proc none /mnt/gentoo/proc
# mount -o bind /sys /mnt/gentoo/sys
# mount -o bind /dev /mnt/gentoo/dev
----------------------------------以下,切換到新系統:
# chroot /mnt/gentoo /bin/bash
# source /etc/profile# export PS1="(chroot) $PS1"
------------------------------------------------------------------
更新Portage樹
# mkdir /usr/portage
# emerge-webrsync 或者:# emerge --sync
定義系統profile運行下面代碼,查看可用的profile
# eselect profile list看到列表之後,我選擇的是desktop,對應的是3,所以執行:# eselect profile set 3
--------------------------------
查看USE變數的可用列表
# less /usr/portage/profiles/use.desc將自己可能用到的USE變數,加入到編譯選項文件中
# nano -w /etc/portage/make.conf
例如我的:USE="gtk alsa xorg nv"
--------------------------------
一系列基本設置:
1、時區設置:
# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
或者:# ln –s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
2、字元編碼設置
# nano -w /etc/locale.gen
還是先保留美式英語吧en_US ISO-8859-1en_US.UTF-8 UTF-8保存之後,
執行:# locale-gen
--------------------------------
安裝內核碼源:
# emerge gentoo-sources安裝完畢之後,不要忙著手工配置,畢竟很多選項還弄不明白其含義,所以我選擇的是自動配置:
先安裝自動配置工具genkernel
# emerge genkernel復制配置文件到新系統(其實也可不復制,自動工具可按默認配置文件進行配置)
# zcat /proc/config.gz > /usr/share/genkernel/arch/x86/kernel-config
下面進行自動配置
# genkernel all於是,慢慢等吧,上個廁所,喝幾口茶都行……完成之後,查看一下自動生成的內核和initrd的名字
# ls /boot/kernel* /boot/initramfs*這里要記下來,等會兒安裝grub的時候要用到
---------------------------------------
配置系統fstab
# nano -w /etc/fstab如果沒有出錯,那麼幾乎不用修改,看看就行。
---------------------------------------
生成主機名等
# nano -w /etc/conf.d/hostname
下面變數指定主機名HOSTNAME="主機名"配置網路
# nano -w /etc/conf.d/net
我用的是DHCPCD,所以加入:
config_eth0=( "dhcp" )固定IP的設定,請參考wiki另外,這里要小心,因為網卡名很可能不是eth0 !
在啟動時自動啟用網路,執行:
# rc-update add net.eth0 default
同樣,這里要注意網卡名!修改網路信息
# nano -w /etc/hosts127.0.0.1 (主機名) localhost
----------------------------------
修改Root根密碼:
# passwd輸入兩次不用說!
修改通用系統配置
# nano -w /etc/rc.conf要改什麼東西就自己看著辦啦,不改,保持默認也行。不過不要忘了,一旦安裝了圖形界面,就得安裝顯示管理器,顯示管理器的啟動都是在這里加入的。
修改鍵盤設置
# nano -w /etc/conf.d/keymapsKEYMAP這個變數要特別注意。如果你選擇了錯誤的KEYMAP,在你敲擊鍵盤的時候會有奇怪的結果。
修改時鍾選項
#
nano -w
/etc/conf.d/hwclock(中文wiki這里又是錯的)如果你機器上的鍾不用UTC,你需要在文件鍾加上CLOCK="local"。否則,你的時鍾就有可能出現偏差。完成對/etc/conf.d/clock的配置後,保存並且退出。上述幾項其實都可以暫時保持默認。
安裝必要的系統工具
1、系統日誌工具
# emerge syslog-ng# rc-update add syslog-ng default

安裝引導
安裝開機引導程序,還是選grub,這東西我熟悉,呵呵~~~~
# emerge grub安裝完成之後,修改grub的配置文件。這里要特別小心,一旦出錯就啟動不了機子啦。我沒有按wiki修改,而是按自己對grub的理解進行的修改:
# nano -w /boot/grub/grub.confdefault 0timeout 5
#
splashimage=(hd0,0)/boot/grub/splash.xpm.gztitle Gentooroot
(hd0,0)kernel /boot/ kernel-genkernel-x86-3.8.13-gentoo
root=/dev/sda3initrd /boot/ initramfs-genkernel-x86-3.8.13-gentoo
# 在有windows,需要雙啟動時,可輸入以下內容:title Windows XProotnoverify (hd0,5) (小心,我這里假設windows是在磁碟的第6個分區)makeactivechainloader +1
創建/etc/mtab#
grep -v rootfs /proc/mounts > /etc/mtab執行grub-install安裝GRUB:#
grub-install --no-floppy /dev/sda至此,基本系統安裝完成,下面准備結束安裝:首先退出掛載:
# exit然後卸載先前掛載到新系統中的目錄
# cd
# umount -l /mnt/gentoo/dev{/shm,/pts,}
# umount -l /mnt/gentoo{/boot,/proc,}
或者如下也行:# umount /mnt/gentoo/boot /mnt/gentoo/dev /mnt/gentoo/proc /mnt/gentoo
完成安裝:
重啟系統
# reboot
或者關閉系統
# poweroff
------------------------------------

Ⅶ linux 嵌入式軟硬體時鍾 怎麼同步

置硬體時間,

開機時Linux會從硬體的rtc的時鍾晶元中獲取一次硬體時間,然後以此為基礎來運行系統時間。
settimeofday 相當於date shell命令,緊緊能設置系統時間。

如果想設置硬體時間,需要一個hwclock -w shell原理的函數來寫硬體的rtc。
扒一扒 busybox的 hwclock.c源碼(http://www.codeforge.cn/read/97203/hwclock.c__html)
可以知道這么抄寫功能源碼:

[cpp] view plain
static void write_rtc(time_t t, int utc)
{
int rtc;
struct tm tm;

if (( rtc = open ( "/dev/rtc", O_WRONLY )) < 0 )
{
if (( rtc = open ( "/dev/misc/rtc", O_WRONLY )) < 0 )
bb_perror_msg_and_die ( "Could not access RTC

Ⅷ 關於linux 下 rtc的問題,求高手解答

系統時間一般是保存在時鍾寄存器中的,由於絕對時間值比較大,所以寄存器中都是放一個相對時間值,即系統時間(日期+時間)減去一個固定的值(多數是1900年,也有的用1970年)後的秒數。取系統時間時會再把這個值加回來,從而得到真正的系統時間。
uboot中取時間的函數是將時鍾寄存器中的值取出後,加上那個固定值(如1900年),直接返回,如果時間寄存器中放的是12年的秒數,在u-boot中就會顯示是1912年。
linux kernel計算日期中有點不同,在算出年號後(加上1900年),接著判斷,年號<=1969,再加上100,所以同樣時間寄存器值將會校正為2012了。
你的系統顯示不一致,可能原因是u-boot和kernel源代碼移植不完整,u-boot和kernel實時時鍾的存儲和計算策略不一致。

Ⅸ linux如何設置伺服器上的系統時間

date -s 「20181121 17:34:00」

輸入這條命令系統時間會設置為2018年11月21日17點39分。

修改之後你可以輸入date命令查詢當前時間。

(9)hwclock源碼擴展閱讀:

1、桌面右上角齒輪按鈕,點擊System Settings。

Ⅹ 深入解析Ubuntu操作系統的目錄

第Ⅰ部分 安裝與配置
第1章 Ubuntu概述
1.1 什麼是Ubuntu
1.1.1 Ubuntu內部
1.1.2 Ubuntu的安裝特點
1.1.3 Ubuntu文件系統的特點
1.2 Ubuntu的商業應用
1.3 Ubuntu的個人應用
1.4 64位Ubuntu
1.5 基於PPC平台的Ubuntu
1.6 基於雙核處理器的Ubuntu
1.7 充分利用Ubuntu與Linux的文檔
1.8 Ubuntu開發者與文檔
1.9 閱讀參考
第2章 安裝Ubuntu前的准備
2.1 計劃Ubuntu的部署方案
2.1.1 商業部署需要考慮的因素
2.1.2 系統部署需要考慮的因素
2.1.3 用戶因素
2.1.4 預部署計劃的核對表
2.1.5 安裝計劃
2.2 硬體需求
2.2.1 安裝Ubuntu的最低硬體配置
2.2.2 在遺留的設備上安裝Ubuntu
2.2.3 為Ubuntu安裝分配硬碟空間
2.2.4 檢查硬體的兼容性
2.2.5 為潛在的硬體問題做准備
2.2.6 准備並使用硬體列表
2.3 安裝過程的准備
2.4 安裝前與安裝過程中的硬碟分區操作
2.4.1 選擇分區方案
2.4.2 將Linux文件系統安排到各個分區上
2.5 使用Ubuntu的kickstart安裝方式
2.6 閱讀參考
第3章 安裝Ubuntu
3.1 開始安裝前的准備
3.1.1 檢查硬體規格
3.1.2 安裝選項
3.1.3 計劃分區策略
3.1.4 引導程序
3.1.5 本地光碟安裝
3.2 逐步安裝
3.2.1 開始安裝
3.2.2 首次更新
3.3 關機
3.4 閱讀參考
第4章 安裝後的配置
4.1 安裝後配置問題的故障診斷
4.2 sudo命令
4.3 首次更新
4.4 配置軟體源
4.5 安裝顯卡驅動
4.6 更改Ubuntu的桌面風格
4.6.1 更改桌面背景
4.6.2 更改顏色
4.6.3 更改系統字體
4.7 首選行為
4.7.1 首選應用程序
4.7.2 Removable Drives and Media
4.8 輸入設備
4.8.1 鍵盤快捷鍵
4.8.2 鍵盤布局
4.8.3 滑鼠
4.9 檢測與配置數據機
4.9.1 配置串口數據機
4.9.2 為筆記本電腦配置WinModem
4.10 配置Ubuntu中的電源管理
4.11 重設日期和時間
4.11.1 使用date命令
4.11.2 使用hwclock命令
4.11.3 更改時間和日期
4.12 管理PCMCIA
4.12.1 使用PCMCIA
4.12.2 控制PCMCIA服務
4.13 配置與使用CD. DVD和CD-RW光碟機
4.14 配置無線網路
4.15 配置Firestarter
4.16 閱讀參考
第5章 Ubuntu初步
5.1 使用Linux文件系統
5.1.1 查看Linux文件系統
5.1.2 使用/bin和/sbin目錄下的基本命令
5.1.3 在/boot目錄和/dev目錄中存儲引導的內核和查看存儲設備
5.1.4 使用和編輯/etc目錄下的文件
5.1.5 保護用戶目錄/home中的內容
5.1.6 使用/proc目錄的內容與內核進行交互
5.1.7 使用/usr目錄下的共享數據
5.1.8 在/tmp目錄下存儲臨時文件
5.1.9 訪問/var目錄下的可變數據文件
5.2 登錄與使用Linux
5.2.1 基於文本的控制台登錄
5.2.2 使用虛擬控制台
5.2.3 在Linux控制台會話中使用簡單的鍵盤和滑鼠技巧
5.2.4 退出
5.2.5 從遠程計算機登錄與退出
5.3 修改用戶信息
5.4 閱讀文檔
5.4.1 使用手冊頁
5.4.2 查找和閱讀軟體包文檔
5.5 使用shell
5.5.1 使用環境變數
5.5.2 使用shell導航和搜索
5.5.3 使用shell管理文件
5.5.4 通過shell壓縮解壓的文件
5.6 使用文本編輯器
5.6.1 使用vi
5.6.2 使用emacs
5.7 使用許可權
5.7.1 指派許可權
5.7.2 目錄許可權
5.7.3 理解設置用戶ID和設置組ID許可權
5.8 以root用戶身份工作
5.8.1 創建用戶
5.8.2 刪除用戶
5.8.3 關閉系統
5.8.4 重啟系統
5.9 閱讀參考
第6章 X Window系統
6.1 X的基本概念
6.2 使用X11R7
6.2.1 xorg.conf文件的元素
6.2.2 配置X
6.3 啟動X
6.3.1 使用顯示管理器
6.3.2 通過使用startx從控制台啟動X
6.4 選擇和使用窗口管理器
6.5 GNOME和KDE桌面環境
6.5.1 GNU網路對象模型環境GNOME)
6.5.2 K桌面環境(KD)
6.5.3 Xfce:備選的輕量級桌面環境
6.6 閱讀參考
第7章 管理軟體
7.1 使用Add/Remove Applications管理軟體
7.2 使用Synaptic管理軟體
7.3 保持最新
7.4 使用命令行
7.4.1 日常使用
7.4.2 查找軟體
7.5 從源代碼編譯軟體
7.6 閱讀參考
第8章 Internet應用:Web沖浪. 寫郵件. 讀新聞
8.1 選擇Web瀏覽器
8.1.1 Mozilla Firefox
8.1.2 Mozilla Suite
8.1.3 Epiphany
8.1.4 Konqueror
8.2 選擇電子郵件客戶端
8.2.1 Evolution
8.2.2 Mozilla Thunderbird
8.2.3 Balsa
8.2.4 KMail
8.2.5 Mozilla Mail
8.2.6 mail應用程序
8.2.7 mutt
8.2.8 其他郵件客戶端
8.3 網路新聞概述
8.4 選擇新聞閱讀器
8.4.1 slrn新聞客戶端
8.4.2 Pan新聞客戶端
8.4.3 Mozilla新聞客戶端
8.4.4 Thunderbird新聞客戶端
8.5 Internet Relay Chat
8.6 GAIM IM
8.7 使用Ekiga進行視頻會議
8.8 閱讀參考
第9章 生產應用程序
9.1 Ubuntu中的辦公套件
9.1.1 使用OpenOffice.org
9.1.2 使用OpenOffice.org Writer
9.1.3 使用OpenOffice.org Calc
9.1.4 使用GNOME Office
9.1.5 使用KOffice
9.2 為Microsoft Windows編寫的生產應用程序
9.3 閱讀參考
第10章 多媒體應用
10.1 在Ubuntu中燒錄CD和DVD
10.1.1 從命令行創建CD
10.1.2 從命令行創建DVD
10.1.3 使用Ubuntu的圖形界面客戶端創建CD和DVD
10.2 聲音和音樂
10.2.1 音效卡
10.2.2 錄音
10.2.3 聲音格式
10.2.4 翻錄音樂
10.2.5 音樂播放器
10.2.6 流式音頻
10.3 觀看電視和視頻
10.3.1 電視和視頻硬體
10.3.2 視頻格式
10.3.3 在Linux中觀看視頻
10.3.4 使用Linux觀看電視
10.3.5 個人錄像機
10.3.6 DVD和視頻播放器
10.4 閱讀參考
第11章 圖形處理
11.1 在Ubuntu中使用數碼相機
11.1.1 網路攝像頭
11.1.2 手持式數碼相機
11.1.3 使用F-Spot
11.2 在Ubuntu中使用掃描儀
11.2.1 使用圖形格式
11.2.2 捕獲屏幕圖像
11.3 閱讀參考
第12章 Ubuntu列印
12.1 Ubuntu列印概述
12.2 配置和管理列印服務
12.2.1 快速完成基於GUI的列印機配置
12.2.2 管理列印服務
12.3 創建和配置本地列印機
12.3.1 創建列印隊列
12.3.2 編輯列印機設置
12.4 閱讀參考
第13章 游戲
13.1 Linux游戲
13.1.1 安裝專有顯卡驅動程序
13.1.2 安裝DOOM 3
13.1.3 安裝Unreal Tournament 2004
13.1.4 安裝Quake 4
13.1.5 安裝Wolfenstein: Enemy Territory
13.1.6 安裝Battle for Wesnoth
13.1.7 使用Cedega玩Windows游戲
13.2 閱讀參考
第Ⅱ部分 系統管理
第14章 管理用戶
14.1 用戶賬戶
14.1.1 用戶ID和組ID
14.1.2 文件訪問許可權
14.2 用戶組管理
14.3 用戶管理
14.3.1 用戶管理工具
14.3.2 添加新用戶
14.3.3 監視用戶在系統上的行為
14.4 口令管理
14.4.1 系統口令策略
14.4.2 口令文件
14.4.3 shadow口令
14.4.4 管理用戶口令的安全性
14.4.5 用戶口令的批量更改
14.5 許可權提升
14.5.1 用su命令臨時改變用戶身份
14.5.2 適時地用sudo命令獲取root許可權
14.5.3 用受限shell控制用戶許可權
14.6 用戶登錄過程
14.7 磁碟配額
14.7.1 使用磁碟配額
14.7.2 手動配置磁碟配額
14.8 閱讀參考
第15章 自動執行任務
15.1 自啟動服務
15.1.1 開始啟動載入過程
15.1.2 載入Linux內核
15.1.3 系統服務和運行級別
15.1.4 運行級別的定義
15.1.5 啟動到默認運行級別
15.1.6 用GRUB啟動到非默認的運行級別
15.1.7 理解init腳本以及初始化的最後步驟
15.1.8 用管理工具控制自啟動服務
15.1.9 改變運行級別
15.1.10 利用運行級別排除故障
15.2 手動啟動和停止服務
15.3 計劃任務
15.3.1 使用at和batch命令制定計劃任務
15.3.2 使用cron命令重復執行任務
15.4 shell控制基礎
15.4.1 shell命令行
15.4.2 在shell中進行模式匹配
15.4.3 輸入輸出的重定向
15.4.4 管道數據
15.4.5 後台處理
15.5 編寫和執行shell腳本
15.5.1 運行shell腳本程序
15.5.2 系統啟動時自動載入shell腳本
15.5.3 使用指定的命令行解釋器運行shell腳本
15.5.4 在腳本中使用變數
15.5.5 給變數賦值
15.5.6 獲取變數的值
15.5.7 位置參數
15.5.8 位置參數實例
15.5.9 使用位置參數從命令行獲取變數
15.5.10 使用簡單的腳本自動執行任務
15.5.11 內置變數
15.5.12 特殊字元
15.5.13 用雙引號處理字元串中含有空格的變數
15.5.14 用單引號保留未被擴展的變數
15.5.15 使用反斜杠作為逃逸符號
15.5.16 使用backtick符號
15.5.17 pdksh和bash中的表達式比較
15.5.18 tcsh中的表達式比較
15.5.19 for語句
15.5.20 while語句
15.5.21 until語句
15.5.22 repeat語句(tcsh)
15.5.23 select語句(pdksh)
15.5.24 shift語句
15.5.25 if語句
15.5.26 case語句
15.5.27 break和exit語句
15.5.28 在shell腳本中使用函數
15.6 閱讀參考
第16章 系統資源
16.1 系統監視工具
16.1.1 控制台環境下的系統監視
16.1.2 使用kill命令控制進程
16.1.3 進程優先順序調度與控制
16.1.4 使用free命令顯示內存使用情況
16.1.5 磁碟配額
16.1.6 圖形界面的進程和系統管理工具
16.1.7 KDE桌面環境的進程和系統監視工具
16.2 閱讀參考
第17章 備份. 還原和恢復
17.1 選擇合適的備份策略
17.1.1 為什麼會丟失數據
17.1.2 備份需求與所需資源的評估
17.1.3 如何評價備份策略的好壞
17.1.4 做出選擇
17.2 選擇備份硬體和介質
17.2.1 可移動存儲介質
17.2.2 網路存儲
17.2.3 磁帶驅動器備份
17.3 使用備份軟體
17.3.1 tar:最基本的備份工具
17.3.2 GNOME中的File Roller軟體
17.3.3 KDE中的歸檔工具(KDE ark和kdat)
17.3.4 使用dd命令歸檔
17.3.5 使用Amanda備份程序
17.3.6 可供選擇的其他備份軟體
17.4 復制文件
17.4.1 用tar命令復制文件
17.4.2 壓縮. 加密和發送tar數據流
17.4.3 用cp命令復制文件
17.4.4 用mc命令復制文件
17.4.5 用scp命令復制文件
17.4.6 用rsync命令復制文件
17.5 恢復被刪除的文件
17.5.1 在遇到未知的文件系統錯誤時使用-S選項重新格式化
17.5.2 用mc命令恢復被刪除的文件
17.6 系統修復
17.6.1 Ubuntu系統修復盤
17.6.2 備份和恢復主引導記錄
17.6.3 從普通的可引導軟盤啟動系統
17.6.4 使用GRUB可引導軟盤
17.6.5 使用系統恢復功能
17.7 閱讀參考
第18章 網路連接
18.1 基礎:localhost介面
18.1.1 檢查loopback介面是否可用
18.1.2 手動配置loopback介面
18.2 TCP/IP網路
18.2.1 TCP/IP地址
18.2.2 在Ubuntu中使用IP偽裝技術
18.2.3 埠
18.3 網路結構
18.3.1 子網劃分
18.3.2 子網掩碼
18.3.3 廣播. 單播和多播地址
18.4 網路硬體設備
18.4.1 網卡
18.4.2 網線
18.4.3 集線器和交換機
18.4.4 路由器和網橋
18.4.5 初始化新的網路硬體
18.5 使用網路配置工具
18.5.1 在命令行中配置網路介面
18.5.2 網路配置文件
18.5.3 使用圖形界面配置工具
18.6 動態主機配置協議
18.6.1 DHCP工作原理
18.6.2 在安裝和啟動時激活DHCP
18.6.3 DHCP軟體的安裝和配置
18.6.4 使用DHCP配置網路主機
18.6.5 DHCP的其他用途
18.7 無線網路
18.7.1 Ubuntu對無線網路的支持..
18.7.2 無線網路的優勢
18.7.3 從現有的無線網路協議中選擇合適的協議
18.8 連接Internet
18.9 通用的配置信息
18.10 配置數字用戶線路訪問Internet
18.10.1 理解乙太網上的點對點協議
18.10.2 手動配置PPPoE連接
18.11 配置撥號Internet訪問
18.12 排除連接故障
18.13 閱讀參考
18.13.1 通用
18.13.2 DHCP
18.13.3 無線網路
18.13.4 書籍
第19章 使用ssh和telnet進行遠程訪問
19.1 架設Telnet伺服器
19.2 Telnet與SSH的對比
19.3 架設SSH伺服器
19.4 SSH工具
19.4.1 使用scp在計算機之間復制單個文件
19.4.2 使用sftp在計算機之間復制多個文件
19.4.3 使用ssh-keygen啟動Key-based登錄方式
19.5 遠程X圖形環境
19.5.1 XDMCP
19.5.2 VNC
19.6 閱讀參考
第Ⅲ部分 伺服器應用
第20章 Apache Web伺服器管理
20.1 Apache Web伺服器簡介
20.2 安裝Apache伺服器
20.2.1 使用APT安裝
20.2.2 親自從源代碼構建
20.3 啟動與停止Apache
20.3.1 手動啟動Apache伺服器
20.3.2 使用/etc/init.d/apache2
20.4 設置運行時伺服器配置
20.4.1 運行時配置指令
20.4.2 編輯httpd.conf
20.4.3 Apache多處理模塊
20.4.4 使用.htaccess配置文件
20.5 文件系統認證與訪問控制
20.5.1 使用allow和deny限制訪問
20.5.2 認證
20.5.3 關於訪問控制的結束語
20.6 Apache模塊
20.6.1 mod_access
20.6.2 mod_alias
20.6.3 mod_asis
20.6.4 mod_auth
20.6.5 mod_auth_anon
20.6.6 mod_auth_dbm
20.6.7 mod_auth_digest
20.6.8 mod_autoindex
20.6.9 mod_cgi
20.6.10 mod_dir和mod_env
20.6.11 mod_expires
20.6.12 mod_headers
20.6.13 mod_include
20.6.14 mod_info和mod_log_config
20.6.15 mod_mime和mod_mime_magic
20.6.16 mod_negotiation
20.6.17 mod_proxy
20.6.18 mod_rewrite
20.6.19 mod_setenvif
20.6.20 mod_speling
20.6.21 mod_status
20.6.22 mod_ssl
20.6.23 mod_unique_id
20.6.24 mod_userdir
20.6.25 mod_usertrack
20.6.26 mod_vhost_alias
20.7 虛擬主機
20.7.1 基於地址的虛擬主機
20.7.2 基於名字的虛擬主機
20.8 日誌
20.9 動態內容
20.9.1 CGI
20.9.2 SSI
20.9.3 基本的SSI指令
20.9.4 流程式控制制
20.10 可在Ubuntu中使用的其他Web伺服器
20.10.1 Sun ONE Web伺服器
20.10.2 Zope
20.10.3 Zeus Web伺服器
20.11 閱讀參考
第21章 管理資料庫服務
21.1 簡要回顧資料庫的基本概念
21.1.1 關系資料庫的工作方式
21.1.2 了解SQL的基礎知識
21.1.3 創建表
21.1.4 向表中插入數據
21.1.5 從資料庫中檢索數據
21.2 選擇資料庫:MySQL和PostgreSQL
21.2.1 速度
21.2.2 數據鎖定
21.2.3 在事務處理中用來保護數據完整性的ACID兼容性
21.2.4 SQL子查詢
21.2.5 過程語言與觸發器
21.3 配置MySQL
21.3.1 為MySQL root用戶設置口令
21.3.2 在MySQL中創建資料庫
21.3.3 在MySQL中授予與撤銷特權
21.4 配置PostgreSQL
21.4.1 在PostgreSQL中初始化數據目錄
21.4.2 在PostgreSQL中創建資料庫
21.4.3 在PostgreSQL中創建資料庫用戶
21.4.4 在PostgreSQL中刪除資料庫用戶
21.4.5 在PostgreSQL中授予和撤銷特權
21.5 資料庫客戶端
21.5.1 通過SSH訪問資料庫
21.5.2 通過本地GUI客戶端訪問資料庫
21.5.3 通過Web訪問資料庫
21.5.4 MySQL命令行客戶端
21.5.5 PostgreSQL命令行客戶端
21.5.6 圖形界面的客戶端
21.6 閱讀參考
第22章 文件和列印
22.1 使用網路文件系統
22.1.1 安裝和啟動/停止NFS
22.1.2 NFS伺服器配置
22.1.3 NFS客戶端配置
22.2 讓Samba工作
22.2.1 用/etc/samba/smb.conf手動配置Samba
22.2.2 使用testparm命令測試Samba
22.2.3 啟動smbd守護進程
22.2.4 掛載Samba共享
22.2.5 使用SWAT配置Samba
22.3 使用Ubuntu進行網路和遠程列印
22.3.1 創建網路列印機
22.3.2 在區域網上進行網路列印
22.3.3 任務消息塊列印
22.4 使用通用UNIX列印系統GUI
22.5 避免列印機支持問題
22.5.1 多功能一體機(列印/傳真/掃描)設備
22.5.2 使用USB和老式列印機
22.6 閱讀參考
第23章 FTP遠程文件服務
23.1 使用FTP客戶端
23.1.1 FTP客戶端界面
23.1.2 使用基於文本的FTP客戶端界面
23.1.3 使用圖形界面FTP客戶端
23.2 FTP伺服器
23.2.1 選擇認證的或匿名伺服器
23.2.2 Ubuntu的FTP伺服器包
23.2.3 其他FTP伺服器
23.3 安裝FTP軟體
23.4 FTP用戶
23.5 為wu-ftpd配置inetd
23.6 配置VSFTP伺服器
23.6.1 控制匿名訪問
23.6.2 其他的vsftpd伺服器配置文件
23.6.3 默認的vsftpd行為
23.7 配置Wu-FTPd伺服器
23.8 使用ftpaccess文件中的命令對wu-ftpd進行配置
23.8.1 配置訪問控制
23.8.2 配置用戶信息
23.8.3 配置系統日誌
23.8.4 配置許可權控制
23.8.5 配置定向到cdpath的命令
23.8.6 shutdown文件的結構
23.9 配置FTP伺服器的文件轉換操作
23.9.1 剝離前綴
23.9.2 剝離後綴
23.9.3 添加前綴
23.9.4 添加後綴
23.9.5 外部命令
23.9.6 類型
23.9.7 選項
23.9.8 描述
23.9.9 一個轉換操作的例子
23.10 使用ftphosts文件中的命令允許或禁止FTP 伺服器連接
23.11 伺服器管理
23.11.1 顯示關於連接用戶的信息
23.11.2 計算連接的數目
23.11.3 使用/usr/sbin/ftpshut安排FTP伺服器停機時間
23.11.4 使用/var/log/xferlog查看伺服器事務的日誌
23.12 閱讀參考
第24章 處理電子郵件
24.1 電子郵件是如何發送和接收的
24.1.1 郵件傳輸代理
24.1.2 選擇一個MTA
24.1.3 郵件分發代理
24.1.4 郵件用戶代理
24.2 基本的Postfix配置和操作
24.2.1 配置偽裝
24.2.2 使用智能主機
24.2.3 設置消息傳遞時間間隔
24.2.4 郵件中繼
24.2.5 轉發帶別名的電子郵件
24.3 使用Fetchmail獲取郵件
24.3.1 安裝Fetchmail
24.3.2 配置Fetchmail
24.4 選擇郵件分發代理
24.4.1 Procmail
24.4.2 Spamassassin
24.4.3 Squirrelmail
24.4.4 病毒掃描器
24.5 郵件守護程序
24.6 Microsoft Exchange Server的替代者
24.6.1 Microsoft Exchange Server/Outlook客戶端
24.6.2 CommuniGate Pro
24.6.3 Oracle協作套件
24.6.4 Bynari
24.6.5 Open-Xchange
24.6.6 phpgroupware
24.6.7 PHProjekt
24.6.8 Horde
24.7 閱讀參考
24.7.1 Web資源
24.7.2 參考書目
第25章 代理與反向代理
25.1 什麼是代理伺服器
25.2 安裝Squid
25.3 配置客戶端
25.4 訪問控制列表
25.5 指定客戶端IP地址
25.6 配置示例
25.7 閱讀參考
第26章 LDAP
26.1 配置LDAP伺服器
26.2 配置客戶端
26.2.1 Evolution
26.2.2 Thunderbird
26.3 管理
26.4 閱讀參考
第Ⅳ部分 Linux編程
第27章 使用Perl
27.1 在Linux中使用Perl
27.1.1 Perl的版本
27.1.2 一個簡單的Perl程序
27.2 Perl中的變數和數據結構
27.2.1 Perl的變數類型
27.2.2 特殊變數
27.3 操作符
27.3.1 比較操作符
27.3.2 復合操作符
27.3.3 算術操作符
27.3.4 其他操作符
27.3.5 特殊字元串常量
27.4 條件語句:if/else和unless
27.4.1 if
27.4.2 unless
27.5 循環
27.5.1 for
27.5.2 foreach
27.5.3 while
27.5.4 until
27.5.5 last和next
27.5.6 do…while和do…until
27.6 正則表達式
27.7 訪問shell
27.8 模塊和CPAN
27.9 代碼示例
27.9.1 發送電子郵件
27.9.2 清理日誌
27.9.3 往新聞組發信
27.9.4 單行小程序
27.9.5 命令行處理
27.10 閱讀參考
27.10.1 書目
27.10.2 新聞組
27.10.3 萬維網
27.10.4 其他資源
第28章 使用Python
28.1 Linux中的Python
28.2 Python基礎
28.2.1 數字
28.2.2 進一步討論字元串
28.2.3 列表
28.2.4 字典
28.2.5 條件和循環
28.3 函數
28.4 面向對象
28.4.1 類和對象變數
28.4.2 構造函數和析構函數
28.4.3 類繼承
28.4.4 多重繼承
28.5 標准庫和Vaults of Parnassus
28.6 閱讀參考
第29章 編寫PHP腳本
29.1 PHP入門
29.1.1 進入和退出PHP模式
29.1.2 變數
29.1.3 數組
29.1.4 常量
29.1.5 引用
29.1.6 注釋
29.1.7 轉義序列
29.1.8 變數替換
29.1.9 操作符
29.1.10 條件語句
29.1.11 特殊操作符
29.1.12 switch語句
29.1.13 循環
29.1.14 包含其他文件
29.2 基本函數
29.2.1 字元串
29.2.2 數組
29.2.3 文件
29.2.4 其他函數
29.3 處理HTML表格
29.4 資料庫
29.5 閱讀參考
第30章 Ubuntu中的C/C++ 編程工具
30.1 Linux中的C編程
30.1.1 C++編程
30.1.2 Linux C/C++編程入門
30.1.3 編程的步驟
30.2 C/C++語言的基本元素
30.3 Ubuntu中的C語言編程項目管理工具
30.3.1 使用make構建程序
30.3.2 使用autoconf工具配置代碼
30.3.3 使用RCS和CVS管理軟體項目
30.3.4 調試工具
30.4 使用GNU C編譯器
30.5 一個簡單的C程序
30.6 圖形界面開發工具
30.6.1 使用KDevelop客戶端
30.6.2 Trolltech的Qt Designer
30.6.3 GNOME中的開發工具Glade客戶端
30.7 閱讀參考
第Ⅴ部分 Ubuntu日常維護
第31章 保護您的機器
31.1 了解計算機攻擊
31.2 評估機器的弱點
31.3 保護您的機器
31.3.1 保護無線網路
31.3.2 口令和物理安全
31.3.3 配置和使用Tripwire
31.3.4 設備
31.4 病毒
31.5 配置防火牆
31.6 構建一個災難恢復計劃
31.7 在Linux安全問題上要保持最新
31.8 閱讀參考
第32章 性能調整
32.1 硬碟
32.1.1 使用BIOS和內核來調整磁碟驅動器
32.1.2 hdparm命令
32.1.3 文件系統調整
32.1.4 tune2fs命令
32.1.5 e2fsck命令
32.1.6 badblocks命令
32.1.7 禁止文件訪問時間
32.2 內核
32.3 Apache
32.4 MySQL
32.4.1 衡量關鍵字緩沖區的使用
32.4.2 使用查詢緩存
32.4.3 其他調整
32.4.4 查詢優化
32.5 閱讀參考
第33章 命令行高級班
33.1 為什麼使用Shell
33.2 基本命令
33.2.1 使用cat輸出文件的內容
33.2.2 使用cd改變目錄
33.2.3 使用chmod修改文件訪問許可權
33.2.4 使用cp復制文件
33.2.5 使用輸出磁碟使用情況
33.2.6 通過使用find查找文件
33.2.7 使用grep在輸入中查找字元串
33.2.8 使用less為輸出翻頁
33.2.9 使用ln在文件間創建鏈接
33.2.10 使用locate通過索引查找文件
33.2.11 使用ls命令列出當前目錄下的文件
33.2.12 使用man閱讀用戶手冊頁
33.2.13 使用mkdir創建目錄
33.2.14 使用mv移動文件
33.2.15 使用ps列出進程
33.2.16 使用rm刪除文件和目錄
33.2.17 使用tail輸出文件的最後一行
33.2.18 使用top輸出資源利用率
33.2.19 使用which輸出命令的位置
33.3 將命令組合使用
33.4 多終端
33.5 閱讀參考
第34章 高級APT
34.1 使用Aptitude
34.2 dpkg後端
34.3 配置APT
34.4 閱讀參考
第35章 內核和模塊管理
35.1 Linux內核
35.1.1 Linux源代碼樹
35.1.2 內核的類型
35.2 管理模塊
35.3 何時進行重新編譯
35.4 內核版本
35.5 獲得內核源代碼
35.6 為內核打補丁
35.7 編譯內核
35.7.1 使用xconfig配置內核
35.7.2 創建一個初始的RAM磁碟映像
35.8 當發生故障時
35.8.1 編譯時的錯誤
35.8.2 運行時錯誤. 啟動載入器問題和內核oops
35.9 閱讀參考
第Ⅵ部分 附錄
附錄A Ubuntu和Linux的Internet資源
A.1 Web站點和搜索引擎
A.2 Usenet新聞組
A.3 郵件列表
A.4 Internet Relay Chat

熱點內容
為什麼蘋果機比安卓機價格穩定 發布:2025-05-15 17:37:01 瀏覽:460
公司收信伺服器地址 發布:2025-05-15 17:31:27 瀏覽:696
idle運行python文件 發布:2025-05-15 17:12:19 瀏覽:231
主存儲器屬於外存儲器嗎 發布:2025-05-15 16:54:00 瀏覽:755
顯示屏看股票都有哪些配置 發布:2025-05-15 16:52:39 瀏覽:397
android行情 發布:2025-05-15 16:52:25 瀏覽:438
活動上線前伺服器配置要注意什麼 發布:2025-05-15 16:38:43 瀏覽:949
王者榮耀安卓區怎麼免費轉蘋果 發布:2025-05-15 16:18:02 瀏覽:763
威朗pro高配都有哪些配置 發布:2025-05-15 15:57:09 瀏覽:958
資料庫分頁查詢數據 發布:2025-05-15 15:45:13 瀏覽:522