當前位置:首頁 » 編程軟體 » nginx交叉編譯

nginx交叉編譯

發布時間: 2023-02-18 05:27:57

A. 使用 k3s 在 Fedora IoT 上運行 K8S

Fedora IoT 是一個即將發布的、面向物聯網的 Fedora 版本。去年 Fedora Magazine 的《 如何使用 Fedora IoT 點亮 LED 燈 》一文第一次介紹了它。從那以後,它與 Fedora Silverblue 一起不斷改進,以提供針對面向容器的工作流的不可變基礎操作系統。

Kubernetes 是一個頗受歡迎的容器編排系統。它可能最常用在那些能夠處理巨大負載的強勁硬體上。不過,它也能在像樹莓派 3 這樣輕量級的設備上運行。讓我們繼續閱讀,來了解如何運行它。

雖然 Kubernetes 在雲計算領域風靡一時,但讓它在小型單板機上運行可能並不是常見的。不過,我們有非常明確的理由來做這件事。首先,這是一個不需要昂貴硬體就可以學習並熟悉 Kubernetes 的好方法;其次,由於它的流行性,市面上有 大量應用 進行了預先打包,以用於在 Kubernetes 集群中運行。更不用說,當你遇到問題時,會有大規模的社區用戶為你提供幫助。

最後但同樣重要的是,即使是在家庭實驗室這樣的小規模環境中,容器編排也確實能夠使事情變得更加簡單。雖然在學習曲線方面,這一點並不明顯,但這些技能在你將來與任何集群打交道的時候都會有幫助。不管你面對的是一個單節點樹莓派集群,還是一個大規模的機器學習場,它們的操作方式都是類似的。

一個「正常」安裝的 Kubernetes(如果有這么一說的話)對於物聯網來說有點沉重。K8s 的推薦內存配置,是每台機器 2GB!不過,我們也有一些替代品,其中一個新人是 k3s —— 一個輕量級的 Kubernetes 發行版。

K3s 非常特殊,因為它將 etcd 替換成了 sqlite 以滿足鍵值存儲需求。還有一點,在於整個 k3s 將使用一個二進制文件分發,而不是每個組件一個。這減少了內存佔用並簡化了安裝過程。基於上述原因,我們只需要 512MB 內存即可運行 k3s,極度適合小型單板電腦!

安裝 k3s 非常簡單。直接運行安裝腳本

它會下載、安裝並啟動 k3s。安裝完成後,運行以下命令來從伺服器獲取節點列表:

需要注意的是,有幾個選項可以通過環境變數傳遞給安裝腳本。這些選項可以在 文檔 中找到。當然,你也完全可以直接下載二進制文件來手動安裝 k3s。

對於實驗和學習來說,這樣已經很棒了,不過單節點的集群也不能算一個集群。幸運的是,添加另一個節點並不比設置第一個節點要難。只需要向安裝腳本傳遞兩個環境變數,它就可以找到第一個節點,而不用運行 k3s 的伺服器部分。

上面的 example-url 應被替換為第一個節點的 IP 地址,或一個完全限定域名。在該節點中,(用 XXX 表示的)令牌可以在 /var/lib/rancher/k3s/server/node-token 文件中找到。

現在我們有了一個 Kubernetes 集群,我們可以真正做些什麼呢?讓我們從部署一個簡單的 Web 伺服器開始吧。

這會從名為 nginx 的容器鏡像中創建出一個名叫 my-server 的 部署 (默認使用 docker hub 注冊中心,以及 latest 標簽)。

為了訪問到 pod 中運行的 nginx 伺服器,首先通過一個 服務 來暴露該部署。以下命令將創建一個與該部署同名的服務。

服務將作為一種負載均衡器和 Pod 的 DNS 記錄來工作。比如,當運行第二個 Pod 時,我們只需指定 my-server(服務名稱)就可以通過 curl 訪問 nginx 伺服器。有關如何操作,可以看下面的實例。

默認狀態下,一個服務只能獲得一個 ClusterIP(只能從集群內部訪問),但你也可以通過把它的類型設置為 LoadBalancer 為該服務申請一個外部 IP。不過,並非所有應用都需要自己的 IP 地址。相反,通常可以通過基於 Host 請求頭部或請求路徑進行路由,從而使多個服務共享一個 IP 地址。你可以在 Kubernetes 使用 Ingress 完成此操作,而這也是我們要做的。Ingress 也提供了額外的功能,比如無需配置應用即可對流量進行 TLS 加密

Kubernetes 需要 Ingress 控制器來使 Ingress 資源工作,k3s 包含 Traefik 正是出於此目的。它還包含了一個簡單的服務負載均衡器,可以為集群中的服務提供外部 IP。這篇 文檔 描述了這種服務:

Ingress 控制器已經通過這個負載均衡器暴露在外。你可以使用以下命令找到它正在使用的 IP 地址。

找到名為 traefik 的服務。在上面的例子中,我們感興趣的 IP 是 10.0.0.8。

讓我們創建一個 Ingress,使它通過基於 Host 頭部的路由規則將請求路由至我們的伺服器。這個例子中我們使用 xip.io 來避免必要的 DNS 記錄配置工作。它的工作原理是將 IP 地址作為子域包含,以使用 10.0.0.8.xip.io 的任何子域來達到 IP 10.0.0.8。換句話說,my-server.10.0.0.8.xip.io 被用於訪問集群中的 Ingress 控制器。你現在就可以嘗試(使用你自己的 IP,而不是 10.0.0.8)。如果沒有 Ingress,你應該會訪問到「默認後端」,只是一個寫著「404 page not found」的頁面。

我們可以使用以下 Ingress 讓 Ingress 控制器將請求路由到我們的 Web 伺服器的服務。

將以上片段保存到 my-ingress.yaml 文件中,然後運行以下命令將其加入集群:

你現在應該能夠在你選擇的完全限定域名中訪問到 nginx 的默認歡迎頁面了。在我的例子中,它是 my-server.10.0.0.8.xip.io。Ingress 控制器會通過 Ingress 中包含的信息來路由請求。對 my-server.10.0.0.8.xip.io 的請求將被路由到 Ingress 中定義為 backend 的服務和埠(在本例中為 my-server 和 80)。

想像如下場景:你的家或農場周圍有很多的設備。它是一個具有各種硬體功能、感測器和執行器的物聯網設備的異構集合。也許某些設備擁有攝像頭、天氣或光線感測器。其它設備可能會被連接起來,用來控制通風、燈光、百葉窗或閃爍的 LED。

這種情況下,你想從所有感測器中收集數據,在最終使用它來制定決策和控制執行器之前,也可能會對其進行處理和分析。除此之外,你可能還想配置一個儀表盤來可視化那些正在發生的事情。那麼 Kubernetes 如何幫助我們來管理這樣的事情呢?我們怎麼保證 Pod 在合適的設備上運行?

簡單的答案就是「標簽」。你可以根據功能來標記節點,如下所示:

一旦它們被打上標簽,我們就可以輕松地使用 nodeSelector 為你的工作負載選擇合適的節點。拼圖的最後一塊:如果你想在所有合適的節點上運行 Pod,那應該使用 DaemonSet 而不是部署。換句話說,應為每個使用唯一感測器的數據收集應用程序創建一個 DaemonSet,並使用 nodeSelector 確保它們僅在具有適當硬體的節點上運行。

服務發現功能允許 Pod 通過服務名稱來尋找彼此,這項功能使得這類分布式系統的管理工作變得易如反掌。你不需要為應用配置 IP 地址或自定義埠,也不需要知道它們。相反,它們可以通過集群中的命名服務輕松找到彼此。

隨著集群的啟動並運行,收集數據並控制燈光和氣候,可能使你覺得你已經把它完成了。不過,集群中還有大量的計算資源可以用於其它項目。這才是 Kubernetes 真正出彩的地方。

你不必擔心這些資源的確切位置,或者去計算是否有足夠的內存來容納額外的應用程序。這正是編排系統所解決的問題!你可以輕松地在集群中部署更多的應用,讓 Kubernetes 來找出適合運行它們的位置(或是否適合運行它們)。

為什麼不運行一個你自己的 NextCloud 實例呢?或者運行 gitea ?你還可以為你所有的物聯網容器設置一套 CI/CD 流水線。畢竟,如果你可以在集群中進行本地構建,為什麼還要在主計算機上構建並交叉編譯它們呢?

這里的要點是,Kubernetes 可以更容易地利用那些你可能浪費掉的「隱藏」資源。Kubernetes 根據可用資源和容錯處理規則來調度 Pod,因此你也無需手動完成這些工作。但是,為了幫助 Kubernetes 做出合理的決定,你絕對應該為你的工作負載添加 資源請求 配置。

盡管 Kuberenetes 或一般的容器編排平台通常不會與物聯網相關聯,但在管理分布式系統時,使用一個編排系統肯定是有意義的。你不僅可以使用統一的方式來處理多樣化和異構的設備,還可以簡化它們的通信方式。此外,Kubernetes 還可以更好地對閑置資源加以利用。

容器技術使構建「隨處運行」應用的想法成為可能。現在,Kubernetes 可以更輕松地來負責「隨處」的部分。作為構建一切的不可變基礎,我們使用 Fedora IoT。

via: https://fedoramagazine.org/kubernetes-on-fedora-iot-with-k3s/

作者: Lennart Jern 選題: lujun9972 譯者: StdioA 校對: wxy

B. jdk nginx. redis 在arm和x86要分別編譯

一、注意openssl和pcre只需要把源碼壓縮,不需要單獨交叉編譯!
開始的時候不知道,傻傻的把這兩個庫弄半天把它們編譯過去了。誰知道nginx的--with-pcre和--with-openssl選項,指定的是這兩個庫源代碼的路徑,並非安裝路徑!nginx的編譯系統只會從/usr、/usr/local等少數幾個目錄查找是否有預編譯的pcre、zlib、openssl等庫。對於交叉編譯,直接把交叉編譯後的pcre等安裝在/usr、/usr/local顯然不合適,因此需要使用--with-pcre和--with-openssl指定源代碼的位置

二、交叉編譯nginx
在x64 linux上面編譯非常簡單的nginx,沒想到在交叉編譯的時候巨多坑。下面一個configure是編譯成功的配置

進入/usr/local/src目錄,創建nginx文件夾。入剛創建的nginx目錄,下載nginx的tar包,解壓,進入解壓生成的目錄,進行配置(後面有補充,建議通讀一遍)編譯安裝查找安裝路徑,在執行make編譯時,可以添加要編譯的參數,已安裝完成,比如我現在要新增 http_stub_status_mole 模塊參數,那麼我只要把該參數添加進去然後重新編譯即可,需要注意的是原先編譯過的參數也要加進來。
進入nginx的安裝目錄,因為我安裝的時候沒有添加任何參數,所以這里我只需要執行

我這里只需要這一個模塊,如果你安裝的nginx還使用其他的模塊,記得在上面的編譯命令中加上。
另外,這里只能 make 千萬別 make install,否則就覆蓋安裝了。

  • make完成後,在源碼目錄下會有一個objs目錄,objs目錄下就多了個nginx,這個就是新版本的程序了;

  • 然後將objs目錄下的nginx替換之前已經安裝過的nginx(建議將舊的nginx程序做下備份)


C. 如果想學Linux,應該怎麼學

學嵌入式Linux要先學以下幾點:
1.C語言。要有C語言的基礎,當然越熟練越好,不熟也沒關系,具備基本技能就可以:比如寫一個數組排序、輸入數字求和什麼的。C語言的學習就是多些多練。
2.Linux基礎
Linux操作系統的概念、安裝方法,詳細了解Linux下的目錄結構、基本命令、編輯器VI ,編譯器GCC,調試器GDB和 Make 項目管理工具, Shell、 Makefile腳本編寫等知識,嵌入式開發環境的搭建。
3.Linux系統編程
重點學習標准I/O庫,Linux多任務編程中的多進程和多線程,以及進程間通信(pipe、FIFO、消息隊列、共享內存、signal、信號量等),同步與互斥對共享資源訪問控制等重要知識,主要提升對Linux應用開發的理解和代碼調試的能力。
4.Linux網路編程
計算機網路在嵌入式Linux系統應用開發過程中使用非常廣泛,通過Linux網路發展、TCP/IP協議、socket編程、TCP網路編程、UDP網路編程、Web編程開發等方面入手,全面了解Linux網路應用程序開發。重點學習網路編程相關API,熟練掌握TCP協議伺服器的編程方法和並發伺服器的實現,了解HTTP協議及其實現方法,熟悉UDP廣播、多播的原理及編程方法,掌握混合C/S架構網路通信系統的設計,熟悉HTML,Javascript等Web編程技術及實現方法。
5.數據結構與演算法
數據結構及演算法在嵌入式底層驅動、通信協議、及各種引擎開發中會得到大量應用,對其掌握的好壞直接影響程序的效率、簡潔及健壯性。此階段的學習要重點理解數據結構與演算法的基礎內容,包括順序表、鏈表、隊列、棧、樹、圖、哈希表、各種查找排序演算法等應用及其C語言實現過程。
6.Cortex A8 、Linux 平台開發
通過基於ARM Cortex-A8處理s5pv210了解晶元手冊的基本閱讀技巧,掌握s5pv210系統資源、時鍾控制器、電源管理、異常中斷控制器、nand flash控制器等模塊,為底層平台搭建做好准備。Linux平台包括內核裁減、內核移植、交叉編譯、GNU工具使用、內核調試、Bootloader介紹、製作與原理分析、根文件系統製作以及向內核中添加自己的模塊,並在s5pv210實驗平台上運行自己製作的Linux系統,集成部署Linux系統整個流程。同時了解Android操作系統開發流程。Android系統是基於Linux平台的開源操作系統,該平台由操作系統、中間件、用戶界面和應用軟體組成,是首個為移動終端打造的真正開放和完整的移動軟體,目前它的應用不再局限於移動終端,還包括數據電視、機頂盒、PDA等消費類電子產品。
7.驅動開發
驅動程序設計是嵌入式Linux開發工作中重要的一部分,也是比較困難的一部分。本階段的學習要熟悉Linux的內核機制、驅動程序與用戶級應用程序的介面,掌握系統對設備的並發操作。熟悉所開發硬體的工作原理,具備ARM硬體介面的基礎知識,熟悉ARM Cortex-A8處理器s5pv210各資源、掌握Linux設備驅動原理框架,熟悉工程中常見Linux高級字元設備、塊設備、網路設備、USB設備等驅動開發,在工作中能獨立勝任底層驅動開發。

D. nginx +beego 怎麼部署

beego如何調試這個問題很好啊,我一般都是使用:
http://beego.Info()
beego.Debug()
這些日誌函數來輸出調試信息,GDB至今我都沒用過。

開發環境的話,我基本上都是在Mac下開發,然後Go都是採用了源碼編譯安裝,因為Go支持交叉編譯,但是我接下來還是希望採用vagrant+Docker的方式來部署我們的整個系統,這樣才能夠保證整個系統從開發到部署的一致性。

E. Linux內核應該怎麼去學習

學嵌入式Linux要先學以下幾點:
1.C語言。要有C語言的基礎,當然越熟練越好,不熟也沒關系,具備基本技能就可以:比如寫一個數組排序、輸入數字求和什麼的。C語言的學習就是多些多練。
2.Linux基礎
Linux操作系統的概念、安裝方法,詳細了解Linux下的目錄結構、基本命令、編輯器VI ,編譯器GCC,調試器GDB和 Make 項目管理工具, Shell、 Makefile腳本編寫等知識,嵌入式開發環境的搭建。
3.Linux系統編程
重點學習標准I/O庫,Linux多任務編程中的多進程和多線程,以及進程間通信(pipe、FIFO、消息隊列、共享內存、signal、信號量等),同步與互斥對共享資源訪問控制等重要知識,主要提升對Linux應用開發的理解和代碼調試的能力。
4.Linux網路編程
計算機網路在嵌入式Linux系統應用開發過程中使用非常廣泛,通過Linux網路發展、TCP/IP協議、socket編程、TCP網路編程、UDP網路編程、Web編程開發等方面入手,全面了解Linux網路應用程序開發。重點學習網路編程相關API,熟練掌握TCP協議伺服器的編程方法和並發伺服器的實現,了解HTTP協議及其實現方法,熟悉UDP廣播、多播的原理及編程方法,掌握混合C/S架構網路通信系統的設計,熟悉HTML,Javascript等Web編程技術及實現方法。
5.數據結構與演算法
數據結構及演算法在嵌入式底層驅動、通信協議、及各種引擎開發中會得到大量應用,對其掌握的好壞直接影響程序的效率、簡潔及健壯性。此階段的學習要重點理解數據結構與演算法的基礎內容,包括順序表、鏈表、隊列、棧、樹、圖、哈希表、各種查找排序演算法等應用及其C語言實現過程。
6.Cortex A8 、Linux 平台開發
通過基於ARM Cortex-A8處理s5pv210了解晶元手冊的基本閱讀技巧,掌握s5pv210系統資源、時鍾控制器、電源管理、異常中斷控制器、nand flash控制器等模塊,為底層平台搭建做好准備。Linux平台包括內核裁減、內核移植、交叉編譯、GNU工具使用、內核調試、Bootloader介紹、製作與原理分析、根文件系統製作以及向內核中添加自己的模塊,並在s5pv210實驗平台上運行自己製作的Linux系統,集成部署Linux系統整個流程。同時了解Android操作系統開發流程。Android系統是基於Linux平台的開源操作系統,該平台由操作系統、中間件、用戶界面和應用軟體組成,是首個為移動終端打造的真正開放和完整的移動軟體,目前它的應用不再局限於移動終端,還包括數據電視、機頂盒、PDA等消費類電子產品。
7.驅動開發
驅動程序設計是嵌入式Linux開發工作中重要的一部分,也是比較困難的一部分。本階段的學習要熟悉Linux的內核機制、驅動程序與用戶級應用程序的介面,掌握系統對設備的並發操作。熟悉所開發硬體的工作原理,具備ARM硬體介面的基礎知識,熟悉ARM Cortex-A8處理器s5pv210各資源、掌握Linux設備驅動原理框架,熟悉工程中常見Linux高級字元設備、塊設備、網路設備、USB設備等驅動開發,在工作中能獨立勝任底層驅動開發。

F. <!--#include virtual="conn.asp"-->

你的表單是用form提前的吧?
那麼你要把你的收集語句改一下:
request.querystring改成request("user")
另給你virtual和file的區別:
include
file
與include
virtual的區別
1。#include
file
包含文件的相對路徑,#include
virtual包含文件的虛擬路徑。
2。在同一個虛擬目錄內,<!--#include
file="file.asp"-->和<!--#include
virtual="file.asp"-->效果是相同的,但假設虛擬目錄名為myweb,則<!--#include
virtual="myweb/file.asp"-->也可以通過調試,但我們知道<!--#include
file="myweb/file.asp"-->是絕對要報錯的。
3。如果一個站點下有2個虛擬目錄myweb1和myweb2,myweb1下有文件file1.asp,myweb2下有文件file2.asp,如果file1.asp要調用file2.asp,那麼在file1.asp中要這樣寫:<!--#include
virtual="myweb2/file2.asp"-->,在這種情況下用#include
file是無法實現的,用<!--#include
file="myweb2/file2.asp"-->必然報錯。相反,在myweb2的文件中包含myweb1中的文件也是一樣。如果該被包含文件在某個文件夾下面,只要在虛擬路徑中加上該文件夾即可。
4。不論用#include
file
還是
#include
virtual,在路徑中用「/」還是「\」或者二者交叉使用都不會影響編譯效果,程序會順利執行。
5。以上情況不適用於2個站點文件的相互調用,而且在同一個站點內,<!--#include
file="file.asp"-->和<!--#include
virtual="file.asp"-->等效,但假設站點名為website,使用<!--#include
virtual="website/file.asp"-->是錯誤的。

G. 如何學習linux

1、學習linux要學的內容很多,很多東西必須了解其機制,所以並不單單的如windows那樣傻瓜式的學習,因為windows本身就是針對不懂電腦的人群。。
2、精通這種詞很難定義,反正要學的東西很多。
3、在windows下安裝虛擬機對於新手學習linux較方便,在linux安裝windows虛擬機(我的經驗是卡,我用的是vmware 而且不是一般的卡) ,起初條件差,自己裝了雙系統,後來就買兩台電腦,一台LINUX一台WINDOWS。

下面就是詳細的說一下。。
一.為什麼要學linux?
當然最重要是愛好和興趣!如果你這種必要學,或者根本不喜歡,請不要浪費時間,你學也學不好!
二.起步
你應該為自己創造一個學習linux的環境--在電腦上裝一個linux或unix
如何選擇版本:北美用redhat,歐洲用SuSE,桌面mandrake較多,而debian是技術最先進的linux開發人員中用debian的最多,其次是redhat,從全球linux各應用領域市場份額來看無疑redhat是最多的,此外還有很多出名的發行版本,不再列舉。
對於初學linux的人來說,我建議是使用redhat,原因如下:
1)現在很多書都是以redhat為例講的,為了與書本協調一致
2)周圍的人都用redhat,交流比較方便
3)redhat應用范圍廣,有典型性和代表性
4)它易於使用和安裝,我們沒有必要把時間浪費在「裝系統」上而應集中精力學習最有用的東西。
【注】現在覺得RH很死板,AS,ES等用在伺服器上或許不錯,Personal desktop用mandrake,debian,suse都不錯,筆者現在用Mandrake,因為她長得漂亮:)
如果你並不打算深入學習linux,而是有諸如適應北京市政府辦公平台遷移到linux上這種需要,那麼中軟,紅旗等中文linux是不錯的選擇
我強烈建議:自己親自動手把linux裝到你的硬碟上,你必須學會獨立安裝linux系統的技能,對於現在的版本來說,其實跟裝WinXP一樣簡單
從此現在開始,請不要以windows的工作方式來考慮問題,應該嘗試挖掘linux身上的「天才unix」的氣質。
三.進階
掌握至少50個以上的常用命令
理解shell管道"|",文件流重定向">"及追加">>"等
熟悉Gnome/KDE等X-windows桌面環境操作
掌握.tgz.rpm.biz等軟體包的常用安裝方法
學習添加外設,安裝設備驅動程序(比如modem)
熟悉Grub/Lilo引導器及簡單的修復操作
熟悉系統固有目錄的名稱及公用
學會用mount命令訪問其他文件系統
了解vi,gcc,gdb等常用編輯器,編譯器,調試器
學習linux環境下的簡單組網
建議:買一本不需要太厚的linux教材,大致可以滿足要求(現在的書越來越多了,還帶很多圖,我當時可沒這么多書)
四.高級應用
澄清一些概念:linux的普通操作與真正的系統管理不能相提並論,後者需要很多知識
1.英語
即使你不學linux,我也強烈建議你學好英文[U.S.english]。因為實質上計算機語言就是英文和字元,所謂的多國語言只是外部包裝。你必須能無障礙的閱讀大量的英文技術文檔在搜索引擎找到的英文網站和網頁中熟練的檢索最好能有用英文直接交流的能力,擺脫了這個障礙,你的學習和理解速度就能快很多,你就有機會拉開和別人的差距。
2.shell[sed/awk]
shell是命令解釋器,是內核與用戶界面交流通道,shell寫的小腳本有點類似於win下的.bat但shell比.bat強大的多,shell不只是解釋命令,更是一種編程語言,有時候幾百行的c用shell幾十行就能代替完成工作,因為shell的工作方式建立在系統已有的眾多應用程序之上
這也是CS中的一個重要思想。此外,shell可以實現工作自動化,這個概念也比較重要sed,awk用來處理文本,歷來很常用。
3.Perl/php
漂亮的腳本, CGI的首選,比ASP好,應用面很廣
4.C\C++
C、C++是linux/unix的核心語言,系統代碼都是C寫的
5.ASM
系統底層及內核,硬體,設備驅動程序,嵌入式開發都需要。//走核心路線的話,c\c++,asm最重要
6.Java,Python,Tcl,XML
五、系統管理篇
在熟悉linux的基礎上還需要掌握至少一種unix。我首推Solaris,其次是FreeBSD比如運營級系統一般是Solaris+Oracle/DB2之類的學習apache、ssh、sendmail/Qmail、proftp/vsftp、Samba、Squid、MySQL/PostgreSQL/Oracle、Bind等各種應用伺服器的構架及電子商務的應用熟悉TCP/IP協議族,學習諸如apache+php+proftp+mysql+quota的實現以及大型區域網,分布式集群等各種企業級應用解決方案熟悉多用戶管理,資料庫管理,文件系統,邏輯存儲管理,日誌分析,備份與災難數據修復系統補丁,內核升級,以及在此基礎上的防火牆構架等以保障系統安全在內的各種系統管理技能。
我覺得,如果在此基礎上再掌握路由/交換設備便是一個不錯的系統管理員
各種基於linux的解決方案可參考相關書籍和文獻,必要時用google或各大linux站點站內搜索引擎尋找最新文檔,以避免錯誤和漏洞有幾本技術大全和技術內幕我認為都是這方面不錯的書
六、深入學習linux
我個人理解的讀linux內核需要的基礎:在此之前,希望先把應用層的東西學一下,那樣會比較好理解
1.C
如果學過潭浩強的大學教科書(除了編幾個數學模型好像什麼也做不了的那種),建議再看一下《The C Programming Language》Second Edition這本聖經(如果想學緩沖區溢出,這點C的功力可能是不夠的,還有<C陷阱與缺陷>,<C專家編程>,<C\C++深層探索>,反正經典書看多了是沒有壞處的)
2.asm (AT&T語法,保護模式)
保護模式下的比較復雜,基本上每本講內核的書都會有介紹有80x86 Intel語法的基礎就行,
有興趣可以看看Intel的官方網站
3.數據結構(離散數學)
計算機專業的核心課程,重要性我就不說了
4.操作系統原理
看懂這個再去讀linux吧
5.微機原理/組成原理(數字電路)
底層直接和硬體打交道,所以這個也要
6.了解linux/unix
我想至少你要會操作吧,了解unix的API
7.軟體工程/編譯原理

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:748
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:1010
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:718
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:878
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:774
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1124
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:349
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:227
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:911
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:875