行動電子商務技術
無線通訊的發達,使得手機的通訊服務延伸到網際網路,日益擴增的頻寬,使得電子商務發達於行動通訊網路。
支援無線網路的技術骨幹:3個W:WLAN, WiFi, Wimax, 3個G:GSM, GPRS, 3G
VPN: 節省成本,具有彈性,具有擴充性。虛擬通道。通道私有性。利用既有網際網路,不需建置私有網路。依據需求規劃頻寬。用戶頻寬不足時由ISP進行提供服務升級,不需大規模修改線路。需要時才連線,非永久連線。在共享網路上建立私有通道進行資料傳輸。
VPN 服務類型:Intranet VPN, 以固接專線方式連接企業總部與大型分公司的內部連線。VPDN (Virtual Private Dialup Network) 小企業或行動用戶用撥接方式連接ISP。
Extranet VPN, 利用專線連接ISP,企業間以安全連線傳輸企業間的重要資訊。
SSL-VPN的優點:(1) 操作簡易:使用者端不用安裝軟體,只要使用瀏覽器,透過網路即可針對公司資料作存取。(2) 功能彈性:只要瀏覽器內建SSL的裝置,都可以利用SSL-VPN作加密,如支援Web的手機或PDA。(3) 高安全性:使用IPSec的連線方式,每一個使用者端在網路上都會被當成一個節點,並且處於一直連線的狀態,因此一旦使用者端被駭,駭客就可以透過此網路聯結到另一個端點,也就是公司的內部。SSL協定使用Stateless 機制,當Client與Server 完成資料交換後就切斷連線,下一筆交易才重新啓動連線。如此SSL通訊協定可以有效避免駭客入侵。(4)中心權限控管:所有使用者遠端連線都需要經過SSL-VPN伺服器,網管可以使用SSL-VPN的ACL(權限控管界面)來管理。(5) 確實實現遠端登入:例如軟體公司員工到客戶端支援,需要由客戶端連回公司,如果是傳統VPN則會被客戶的防火牆阻隔。但SSL-VPN使用port 80和443,因為這是HTTP 連線port,一般都是啓動狀態。
2012年10月16日 星期二
傳統軟體開發模型
瀑布式模型 (Waterfall Model) 古典生命週期 (Classic life cycle) 線性序列模型 (linear sequential model) 將軟體開發的生命週期分為6個階段:
(1) 系統規劃 (System Planning) 考慮整個系統的大部規劃,由上而下設計。
(2) 需求分析 (Requirement Analysis) 蒐集使用者對於系統的需求。
(3) 設計 (Design) 設計工程師將需求轉化成軟體,通常在程式碼產生前瞭解其設計品質如何。
(4) 建置 (Implement) 程式開始Coding ,設計工程師將程式轉變成機器碼。
(5) 測試 (Testing) 開始測試所設計的程式碼。
(6) 維護 (Support) 軟體交付給客戶之後,針對客戶反應的問題,需求的變更等,提供調整與改變。
雛形式模型 (Prototyping Model) 設計者先以經濟有效的方式快速建立一個可操作的系統模型,完成系統部分的關鍵功能供使用者評估,藉以展示或的客戶的認同或意見後再逐步修改雛形系統,反覆客戶意見回饋與雛形修改後,最後完成所有正式的系統功能。
優點: (1)允許使用者隨時改變需求(2)與使用者互動中可以隨時協助發現使用者新的需求(3)隨著系統開發,可以充分瞭解使用者需求(4)系統開發迅速、應變性高,可以降低風險。
缺點:(1)缺少有效的設計評估準則以決定軟體開發成熟與否。(2)缺少嚴謹的分析與設計,系統執行效率差(3)因雛形系統改變快速,文件製作管理落後,造成維護上的困難(4)使用者必須不斷的參與,如果使欲者無法配合將造成開發中斷或延遲
快速開發模型 (RAD Model) 線性順序軟體開發模型的變種,強調快速,利用基礎元件建造快速開發,如果對於需求掌握清楚,可以在短時間發展出功能完善的系統。分為5個開發階段:
(1) 企業流程建模 將企業活動中的資訊流模型化,決定需要產生哪些資訊,資訊的傳遞流程,資訊的使用者。
(2) 資料模型建立 將資訊流簡化,並建立所需資料的物件,標出物件的特徵與定義物件之間的關係。
(3) 處理建模 資料物件導入資訊流,再加以描述其操作如增加、修改、刪除或查詢等功能。
(4) 應用程式生成 利用自動化輔助軟體來建造模型,與4GL程式語言來編寫系統程式。
(5) 測試與反覆 RAD過程強調重複使用,大多數持繩原都已經測試與驗證過,可大幅縮短開發時間。
優點:系統在節省成本下快速被開發,具有瀑布式模型的優點,模型件過程循序漸進,且標準化流程。
缺點:需有足夠人力建立RAD小組。快速開發的結果,難免影響到品質。並非適用於所有型態的應用程式開發。技術性風險高時不適用。
漸增式模型 結合了瀑布型模型與雛形式模型的觀念,時間進行時交錯的使用線性序列,使得每個線性序列都能夠產生可交付的軟體與版次。例如:第一版產出基礎的檔案管理,第二版再產出版面編排功能,第三版產出拼字校對語文法見查,第四版產出頁面設定,每一次漸增式營的軟體的產出都是完整的軟體系統。
優點:每一層都是序列性開發,因此解決了雛形法維護困難的問題。開發過程可以即時接受使用者的回饋,於下一層開發時做修改。
缺點:開放式體系,會使設計效率變差。
螺旋式模型 結合線性序列模型與雛形模型,並加入風險分析。以螺線形式,由內往外發展,每旋轉一圈便開發出新的一個更完善的版本。在旋轉的圓圈切成若干扇形區,稱為任務區。分為(1)需求溝通(2)專案計畫(3)風險分析(4)工程執行(5)建構與釋出(6)客戶評估 此六階段如圓圈般週而復始,每轉一圈便完成一個新的版本。
軟體能力成熟度模型 CMMI (Capability Maturity Model) 卡耐基美隆軟體工程學院將軟體開發目前的程序的成熟度定義了5個等級:
(1) 初始級 (Initial)
(2) 可重複級 (Repeatable)
(3) 已定義級 (Defined)
(4) 已管理級 (Managed)
(5) 優化級 (Optimized)
(1) 系統規劃 (System Planning) 考慮整個系統的大部規劃,由上而下設計。
(2) 需求分析 (Requirement Analysis) 蒐集使用者對於系統的需求。
(3) 設計 (Design) 設計工程師將需求轉化成軟體,通常在程式碼產生前瞭解其設計品質如何。
(4) 建置 (Implement) 程式開始Coding ,設計工程師將程式轉變成機器碼。
(5) 測試 (Testing) 開始測試所設計的程式碼。
(6) 維護 (Support) 軟體交付給客戶之後,針對客戶反應的問題,需求的變更等,提供調整與改變。
雛形式模型 (Prototyping Model) 設計者先以經濟有效的方式快速建立一個可操作的系統模型,完成系統部分的關鍵功能供使用者評估,藉以展示或的客戶的認同或意見後再逐步修改雛形系統,反覆客戶意見回饋與雛形修改後,最後完成所有正式的系統功能。
優點: (1)允許使用者隨時改變需求(2)與使用者互動中可以隨時協助發現使用者新的需求(3)隨著系統開發,可以充分瞭解使用者需求(4)系統開發迅速、應變性高,可以降低風險。
缺點:(1)缺少有效的設計評估準則以決定軟體開發成熟與否。(2)缺少嚴謹的分析與設計,系統執行效率差(3)因雛形系統改變快速,文件製作管理落後,造成維護上的困難(4)使用者必須不斷的參與,如果使欲者無法配合將造成開發中斷或延遲
快速開發模型 (RAD Model) 線性順序軟體開發模型的變種,強調快速,利用基礎元件建造快速開發,如果對於需求掌握清楚,可以在短時間發展出功能完善的系統。分為5個開發階段:
(1) 企業流程建模 將企業活動中的資訊流模型化,決定需要產生哪些資訊,資訊的傳遞流程,資訊的使用者。
(2) 資料模型建立 將資訊流簡化,並建立所需資料的物件,標出物件的特徵與定義物件之間的關係。
(3) 處理建模 資料物件導入資訊流,再加以描述其操作如增加、修改、刪除或查詢等功能。
(4) 應用程式生成 利用自動化輔助軟體來建造模型,與4GL程式語言來編寫系統程式。
(5) 測試與反覆 RAD過程強調重複使用,大多數持繩原都已經測試與驗證過,可大幅縮短開發時間。
優點:系統在節省成本下快速被開發,具有瀑布式模型的優點,模型件過程循序漸進,且標準化流程。
缺點:需有足夠人力建立RAD小組。快速開發的結果,難免影響到品質。並非適用於所有型態的應用程式開發。技術性風險高時不適用。
漸增式模型 結合了瀑布型模型與雛形式模型的觀念,時間進行時交錯的使用線性序列,使得每個線性序列都能夠產生可交付的軟體與版次。例如:第一版產出基礎的檔案管理,第二版再產出版面編排功能,第三版產出拼字校對語文法見查,第四版產出頁面設定,每一次漸增式營的軟體的產出都是完整的軟體系統。
優點:每一層都是序列性開發,因此解決了雛形法維護困難的問題。開發過程可以即時接受使用者的回饋,於下一層開發時做修改。
缺點:開放式體系,會使設計效率變差。
螺旋式模型 結合線性序列模型與雛形模型,並加入風險分析。以螺線形式,由內往外發展,每旋轉一圈便開發出新的一個更完善的版本。在旋轉的圓圈切成若干扇形區,稱為任務區。分為(1)需求溝通(2)專案計畫(3)風險分析(4)工程執行(5)建構與釋出(6)客戶評估 此六階段如圓圈般週而復始,每轉一圈便完成一個新的版本。
軟體能力成熟度模型 CMMI (Capability Maturity Model) 卡耐基美隆軟體工程學院將軟體開發目前的程序的成熟度定義了5個等級:
(1) 初始級 (Initial)
(2) 可重複級 (Repeatable)
(3) 已定義級 (Defined)
(4) 已管理級 (Managed)
(5) 優化級 (Optimized)
2012年10月15日 星期一
資料庫一二三
資料庫 是一組相關資料的集合。由最底層之的欄位構成記錄,相關的紀錄組成檔案,而相關的檔案組成資料庫
資料庫的優點
(1) 減少重複
(2) 維持資料一致性
(3) 資料共享
(4) 強迫推行標準
(5) 確保安全
(6) 維持整合性
(7) 提供程式物件永久的儲存空間
(8) 提供處理查詢
(9) 提供多種使用者介面
(10) 允許使用規則來進行推理與主動執行
(11) 縮短運用程式的開發時間
資料庫的缺點
(1) 初期必須購置軟硬體設備,花費極大的成本
(2) 為了特定需求與一般需求而造成資源重複投入的浪費
(3) Database Administrator 若無適當的人管理,可能造成資料庫監控失靈
資料庫系統的功能
(1) 資料定義
(2) 資料操作
(3) 資料安全性與整合性
(4) 復原與同步控制
(5) 資料字典
(6) 效能
資料庫的優點
(1) 減少重複
(2) 維持資料一致性
(3) 資料共享
(4) 強迫推行標準
(5) 確保安全
(6) 維持整合性
(7) 提供程式物件永久的儲存空間
(8) 提供處理查詢
(9) 提供多種使用者介面
(10) 允許使用規則來進行推理與主動執行
(11) 縮短運用程式的開發時間
資料庫的缺點
(1) 初期必須購置軟硬體設備,花費極大的成本
(2) 為了特定需求與一般需求而造成資源重複投入的浪費
(3) Database Administrator 若無適當的人管理,可能造成資料庫監控失靈
資料庫系統的功能
(1) 資料定義
(2) 資料操作
(3) 資料安全性與整合性
(4) 復原與同步控制
(5) 資料字典
(6) 效能
2012年10月10日 星期三
資料庫正規化形式
正規化形式(Normal Form) 滿足某一組特別規定的條件的關聯式,可稱為正規化形式。例如一關聯式其中各屬性只有包含基元值(Atomic Value)的條件,就屬於第一正規化形式(First Normal Form, 1NF)
正規化 靠著分割關聯式的屬性,可以將原本不滿足某些條件的關聯式綱要,分成幾個較小的關連式以滿足我們希望它擁有的特性。
無失分割(Nonloss decomposition) 一個關連式如果分割後,自將分割後的關聯式合併,則可得的到原來的關聯式,也就是分割過程沒有損失任何資訊,則我們稱此分割為無失分割。此分割過程稱為可逆的(Reversible)
第一正規化形式 關聯式屬性所屬的定義域中僅能有基元值(Atomic Value),也就是每一個屬性必須是單一的。 關聯式的屬性如果是多值屬性或是複合屬性,就不符合1NF。
正規化的步驟 (1)先將複合屬性分解為單一屬性 (2)多值屬性集合的部份鍵納入主鍵屬性集合,不同值的拆成許多值組。
第二正規化形式 關聯式必須符合第一正規化形式,同時其中非屬主鍵集合的屬性必須完全功能相依於主鍵。
第三正規化形式 關聯式必須符合第二正規化形式,同時其中非屬主鍵屬性集合的屬性必須非遞移地功能相依於主鍵。
非遞移性功能相依 指兩個屬性是直接功能相依如A->C而非經由遞移而達成功能相依,也就是不存在A->B,B->C的情形。
正規化 靠著分割關聯式的屬性,可以將原本不滿足某些條件的關聯式綱要,分成幾個較小的關連式以滿足我們希望它擁有的特性。
無失分割(Nonloss decomposition) 一個關連式如果分割後,自將分割後的關聯式合併,則可得的到原來的關聯式,也就是分割過程沒有損失任何資訊,則我們稱此分割為無失分割。此分割過程稱為可逆的(Reversible)
第一正規化形式 關聯式屬性所屬的定義域中僅能有基元值(Atomic Value),也就是每一個屬性必須是單一的。 關聯式的屬性如果是多值屬性或是複合屬性,就不符合1NF。
正規化的步驟 (1)先將複合屬性分解為單一屬性 (2)多值屬性集合的部份鍵納入主鍵屬性集合,不同值的拆成許多值組。
第二正規化形式 關聯式必須符合第一正規化形式,同時其中非屬主鍵集合的屬性必須完全功能相依於主鍵。
第三正規化形式 關聯式必須符合第二正規化形式,同時其中非屬主鍵屬性集合的屬性必須非遞移地功能相依於主鍵。
非遞移性功能相依 指兩個屬性是直接功能相依如A->C而非經由遞移而達成功能相依,也就是不存在A->B,B->C的情形。
資料倉儲
Bill Inmon 所提的『資料倉儲』的概念就是建立一個資訊環境,提供企業整合性資訊來協助企業主做決策,並使企業內的資訊一致並能建立彈性互動的策略。
資料倉儲的特性有(1)主題導向 (2)整合性 (3)時間變異性 (4) 非揮發性
主題導向:依系統的設計資料倉儲功能可為一銷售管理系統,但各部門對於資料倉儲的主題會有不同觀點,例如經營階層希望以區域別的角度來比較各產品的銷售狀況,營業部門則可能以客戶別或產品別來推估市場需求。同時會計部門則希望由時間別來分析獲利趨勢。
整合性:因企業資訊分散於各地,或導入系統時間不同,造成資料格式不一,因此整合分散的資訊,供企業經營參考。利用資料倉儲的系統機制,將分散的交易資料庫進行資料萃取,擷取相關的欄位與紀錄,進行清理與轉換,統一資料格式為一致性的資料描述。資料倉儲將切業內的營運資訊統一定義與管理。使其具有一致性,達到整合性。
時間變動性:交易處理系統,屬於作業性質,每日有其交易記錄或異動,為短期的歷史紀錄或目前現況。資料倉儲則定期向交易系統擷取資料轉化成長期保存的歷史資料,並進行整理與彙總已變後續的時間趨勢分析。例如交易處理統中的每日、週、月、年的資料定期匯入資料倉儲並累積有關產品、客戶、庫存等資料並將摘要資訊重新計算與彙總。
非揮發性:交易性質的作業資料,隨時會新增更新與刪除或查詢,但是資料倉儲的的資料內容具有非揮發性,乃因為資料倉儲的資料只會定期匯入資料,而且保存的是企業經營參考的歷史資料與彙總資訊,因此不可刪除與修改,只能進行查詢,也因為只會增加資料,不會刪除資料,並只允許查詢具有唯讀性質,因此稱為非揮發性。
資料倉儲的主要功能有:(1)整合性的資料儲存 (2)有價值的資料存取
資料倉儲的優點:(1)整合企業內部資訊,降低查詢成本。(2)統一資料格式,提供一致性的溝通與呈現方式(3)資料來源直接來自企業各部門,提高資料的正確性,藉由資料的自動轉換,提高作業效率與企業的生產力(4)能快速的提供『整合的』資訊,利於企業決策效率與品質(5)使用者不需瞭解資料儲存位置,經由統一的介面(WEB)便可以查到所需的資訊。
資料倉儲的缺點:(1)系統建置需要投入大量的資源(時間,人力,金錢),失敗的風險也大。(2)系統龐大,若軟硬體沒有妥善規劃,擴充不易。
資料倉儲的特性有(1)主題導向 (2)整合性 (3)時間變異性 (4) 非揮發性
主題導向:依系統的設計資料倉儲功能可為一銷售管理系統,但各部門對於資料倉儲的主題會有不同觀點,例如經營階層希望以區域別的角度來比較各產品的銷售狀況,營業部門則可能以客戶別或產品別來推估市場需求。同時會計部門則希望由時間別來分析獲利趨勢。
整合性:因企業資訊分散於各地,或導入系統時間不同,造成資料格式不一,因此整合分散的資訊,供企業經營參考。利用資料倉儲的系統機制,將分散的交易資料庫進行資料萃取,擷取相關的欄位與紀錄,進行清理與轉換,統一資料格式為一致性的資料描述。資料倉儲將切業內的營運資訊統一定義與管理。使其具有一致性,達到整合性。
時間變動性:交易處理系統,屬於作業性質,每日有其交易記錄或異動,為短期的歷史紀錄或目前現況。資料倉儲則定期向交易系統擷取資料轉化成長期保存的歷史資料,並進行整理與彙總已變後續的時間趨勢分析。例如交易處理統中的每日、週、月、年的資料定期匯入資料倉儲並累積有關產品、客戶、庫存等資料並將摘要資訊重新計算與彙總。
非揮發性:交易性質的作業資料,隨時會新增更新與刪除或查詢,但是資料倉儲的的資料內容具有非揮發性,乃因為資料倉儲的資料只會定期匯入資料,而且保存的是企業經營參考的歷史資料與彙總資訊,因此不可刪除與修改,只能進行查詢,也因為只會增加資料,不會刪除資料,並只允許查詢具有唯讀性質,因此稱為非揮發性。
資料倉儲的主要功能有:(1)整合性的資料儲存 (2)有價值的資料存取
資料倉儲的優點:(1)整合企業內部資訊,降低查詢成本。(2)統一資料格式,提供一致性的溝通與呈現方式(3)資料來源直接來自企業各部門,提高資料的正確性,藉由資料的自動轉換,提高作業效率與企業的生產力(4)能快速的提供『整合的』資訊,利於企業決策效率與品質(5)使用者不需瞭解資料儲存位置,經由統一的介面(WEB)便可以查到所需的資訊。
資料倉儲的缺點:(1)系統建置需要投入大量的資源(時間,人力,金錢),失敗的風險也大。(2)系統龐大,若軟硬體沒有妥善規劃,擴充不易。
2010年1月1日 星期五
Java I/O 串流
Java 語言能夠流行於網路昌行的今天,很大的原因是因為其很好的駕馭了串流輸出入。網路程式多半時間都在處理簡單的輸入和輸出,也就是從一個系統向另一個系統的移動位元組。串流是一個抽像的觀念,當程式需要輸入資料,或輸出資料,則就會開啟一個輸入或輸出的資料源的串流。而通常有三種不同的I/O需要考慮:檔案,控制台,網路連接。Java 所處理的串流分為兩種:位元組串流與字元串流。分別用4個抽像類別來表示:InputStream、OutputStream、Reader、Writer。前二者專門處理位元組串流,後二者處理則處理字元串流。
如下程式:
public class IOStream {
public static void main(String[] args) throws FileNotFoundException、IOException、 ClassNotFoundException{
FileOutputStream fos = new FileOutputStream("t.tmp"); //檔案輸出串流
ObjectOutputStream oos = new ObjectOutputStream(fos);
// 透過物件序列化的方式傳送資料
oos.writeInt(12345); //傳送不同的資料型態
oos.writeObject("Today");
oos.writeObject(new Date());
oos.close();
FileInputStream fis = new FileInputStream("t.tmp");
ObjectInputStream ois = new ObjectInputStream(fis);
//透過物件序列化的方式接收資料
int i = ois.readInt();
System.out.println("i="+i);
String today = (String) ois.readObject();
System.out.println(today);
Date date = (Date) ois.readObject();
System.out.println(date.toString());
ois.close();
}
}
使用了Java "物件序列化;(Object Serialization) 功能實現了Serializable 介面的物件,將其轉化為一個位元組序列,並且再完全回復原來的樣子。
其好處在於:不限於檔案,在網路上也能夠進行,因此如果在Windows建立一個物件,將其序列化,然後透過網路送給Linux機器,可以準確無誤地重新裝配回來。
如下程式:
public class IOStream {
public static void main(String[] args) throws FileNotFoundException、IOException、 ClassNotFoundException{
FileOutputStream fos = new FileOutputStream("t.tmp"); //檔案輸出串流
ObjectOutputStream oos = new ObjectOutputStream(fos);
// 透過物件序列化的方式傳送資料
oos.writeInt(12345); //傳送不同的資料型態
oos.writeObject("Today");
oos.writeObject(new Date());
oos.close();
FileInputStream fis = new FileInputStream("t.tmp");
ObjectInputStream ois = new ObjectInputStream(fis);
//透過物件序列化的方式接收資料
int i = ois.readInt();
System.out.println("i="+i);
String today = (String) ois.readObject();
System.out.println(today);
Date date = (Date) ois.readObject();
System.out.println(date.toString());
ois.close();
}
}
使用了Java "物件序列化;(Object Serialization) 功能實現了Serializable 介面的物件,將其轉化為一個位元組序列,並且再完全回復原來的樣子。
其好處在於:不限於檔案,在網路上也能夠進行,因此如果在Windows建立一個物件,將其序列化,然後透過網路送給Linux機器,可以準確無誤地重新裝配回來。
2009年12月24日 星期四
Embedded Linux Kernel Module using Hello Wolrd
Most people thought Linux is difficult and especially embedded Linux,as they required to porting a linux driver,hey,it choked their throats. But it is really simple if you know the rule,let me show you the rope using the "Hello world" example. Let us check the code as below:
#include
#include
#include
MODULE_LICENSE("Dual BSD/GPL");
MODULE_AUTHOR("Henry");
static int hello_int(void)
{
printk(KERN_ALERT "Hello、world\n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT "Goodbye、cruel world!\n");
}
module_init(hello_exit);
module_exit(hello_ext);
It is the simplest linux kernel module example
if you have a ARM base embedded board、you coul make it a hello.ko module and then
load the module into kernel :insmod ./hello.ko
then you can see Hello、world
you can check if the module being installed correctly or not by lsmod
then you remove the module: rmmod hello,
the message come out: Goodby cruel world
As typical Makefile you can refer as below:
ifeq($KERNELRELEASE),)
KERNELDIR ?=/lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
modules_install:
$(MAKE) -C $(KERNELDIR) M=$(PWD) module_install
clean:
rm -rf *.o *~core .depend .*.cmd *.ko *.mod,c .tmp_versions
.PHONY: modules modules_install clean
else
obj -m :=hello.o
endif
#include
#include
#include
MODULE_LICENSE("Dual BSD/GPL");
MODULE_AUTHOR("Henry");
static int hello_int(void)
{
printk(KERN_ALERT "Hello、world\n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT "Goodbye、cruel world!\n");
}
module_init(hello_exit);
module_exit(hello_ext);
It is the simplest linux kernel module example
if you have a ARM base embedded board、you coul make it a hello.ko module and then
load the module into kernel :insmod ./hello.ko
then you can see Hello、world
you can check if the module being installed correctly or not by lsmod
then you remove the module: rmmod hello,
the message come out: Goodby cruel world
As typical Makefile you can refer as below:
ifeq($KERNELRELEASE),)
KERNELDIR ?=/lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
modules_install:
$(MAKE) -C $(KERNELDIR) M=$(PWD) module_install
clean:
rm -rf *.o *~core .depend .*.cmd *.ko *.mod,c .tmp_versions
.PHONY: modules modules_install clean
else
obj -m :=hello.o
endif
訂閱:
文章 (Atom)