隨著內核版本的演進,其源代碼的膨脹速度也在遞增,這讓Linux的學習曲線變得越來越陡峭了。這對初識內核的同學而言當然不是什么好事情,滿腔熱情很容易被當頭澆滅。
2020-09-18 15:45:22
1222 
寫過Linux驅動的人都知道`module_init`宏,因為它聲明了一個驅動的入口函數。
2023-06-01 15:12:21
362 很多內核開發者喜歡的調試工具是printk,在Linux內核中,使用printk()函數來打印信息,它與C庫的printf()函數類似。
2023-06-01 15:14:40
574 上篇說到printk調試,但printk是全局的,只能設置輸出等級。而動態輸出可以動態選擇打開某個內核子系統的輸出,可以有選擇性地打開某些模塊的輸出。
2023-06-01 15:16:46
302 
應用程序如果想要設置/獲取驅動層的數據,一般是驅動提供一個ioclt接口,然后應用層調用。因此,學會在驅動中實現ioctl接口是必要的一項技能。
2023-06-12 16:21:01
227 
在應用程序中,使用open函數打開一個`/dev`目錄下的一個設備文件時,默認是以阻塞的方式打開。
2023-06-12 16:22:12
394 
簡單來說,就是解決能夠同時操作多個設備的方法,及時處理多個設備的數據。
2023-06-12 16:23:21
147 
前幾篇介紹了幾種IO模型,今天介紹另一種IO模型——異步IO。
2023-06-12 16:24:17
438 異步通知在Linux的實現中是通過信號,而 **信號是在軟件層次上對中斷機制的一種模擬** 。這種機制和中斷非常類似,所以可以以中斷的思想來理解這一過程,信號其實就相當于應用層的中斷。
2023-06-12 16:25:15
271 將會結合自己的幾年的個人開發經驗,及對 Linux,更是類UNIX系統,及開源軟件文化, 談談Linux的學習方法與學習中應該注意的一些事。就如同剛才說的,很多同學以前可能連Linux是什么都不
2020-06-09 04:35:41
Mini Linux EMMC
2023-03-28 13:06:25
為什么要學習Linux? 為什么學Linux,每個人都有自己的理由: Linux是免費的不用花一分錢,能夠節約大筆的成本; Linux是開源的,你可以根據自已的需要修改源代碼; Linux是開放
2017-04-21 15:21:45
為什么要學習Linux? 為什么學Linux,每個人都有自己的理由: Linux是免費的不用花一分錢,能夠節約大筆的成本; Linux是開源的,你可以根據自已的需要修改源代碼; Linux是開放
2017-04-16 16:21:50
再努力一把。在接下來的時間里,我會把自己的學習筆記進行整理上傳,加深對技術的理解,避免遺忘。為什么要學習linux操作系統?事實上,ARM通常都是用來做比較復雜的系統的,而且一般都是多任務系統的,當...
2021-12-17 06:49:06
作為新人,要如何學習嵌入式Linux?首先您要具備基本的C語言基礎,然后,您要想好學習嵌入式Linux目標是什么,是想做底層系統、還是應用開發。如果是關于底層開發,是學習Linux驅動,還是項目
2021-11-08 09:27:53
linux學習課件3
2006-04-08 00:31:19
44 linux學習資料有以下內容:Linux系統管理員指南,Linux基本教程,Linux掃描式教程等教程。
2008-10-07 11:22:01
48 Linux內核學習起步介紹
2009-04-10 17:22:04
0 本書將Linux內核的學習分為四個層次:全面了解,掌握基本功;興趣導向,選擇重點深度鉆研;融入
2010-11-09 17:05:15
0 嵌入式linux學習方法總結
嵌入式linux的學習現在挺流行
2008-09-10 10:44:57
3442 2012-05-25 17:07:55
24 2012-06-07 22:31:19
23 2012-10-18 21:55:55
32 2013-09-27 15:44:06
258 2015-06-04 16:40:56
6 linux簡單的學習過程希望對你有用。
2016-01-18 16:11:15
0 linux相關學習資料,有興趣的同學可以參考下載看看啦。
2016-03-29 11:13:55
0 TI AM3352 ARM Cortex-A8 linux 下的學習例程。
2016-04-26 16:55:36
3 TI AM3352 ARM Cortex-A8 linux 下的學習例程。
2016-04-26 16:55:36
3 TI AM3352 ARM Cortex-A8 linux 下的學習例程。
2016-04-26 16:55:36
2 TI AM3352 ARM Cortex-A8 linux 下的學習例程。
2016-04-26 16:55:36
14 TI AM3352 ARM Cortex-A8 linux 下的學習例程。
2016-04-26 16:55:36
3 TI AM3352 ARM Cortex-A8 linux 下的學習例程。
2016-04-26 16:55:36
5 TI AM3352 ARM Cortex-A8 linux 下的學習例程。
2016-04-26 16:55:36
5 TI AM3352 ARM Cortex-A8 linux 下的學習例程。
2016-04-26 16:55:36
9 TI AM3352 ARM Cortex-A8 linux 下的學習例程。
2016-04-26 16:55:36
2 TI AM3352 ARM Cortex-A8 linux 下的學習例程。
2016-04-26 16:55:36
2 TI AM3352 ARM Cortex-A8 linux 下的學習例程。
2016-04-26 16:55:36
6 TI AM3352 ARM Cortex-A8 linux 下的學習例程。
2016-04-26 16:55:36
3 TI AM3352 ARM Cortex-A8 linux 下的學習例程。
2016-04-26 16:55:36
11 TI AM3352 ARM Cortex-A8 linux 下的學習例程。
2016-04-26 16:55:36
11 TI AM3352 ARM Cortex-A8 linux 下的學習例程。
2016-04-26 16:55:36
13 TI AM3352 ARM Cortex-A8 linux 下的學習例程。
2016-04-26 16:55:36
8 用于Linux入門基礎,適合準備學習Linux編程的菜鳥
2016-06-27 14:55:38
4 嵌入式 Linux+Android 學習路線圖
2017-08-31 17:19:10
323 新手Linux內核學習起步
2017-10-27 16:10:30
13 Linux是開源免費的,而且其源代碼是開放的,更加適合我們學習嵌入式。
2017-12-28 16:38:11
2823 太多細節未說明,可根據實際情況調整。重點在于1、3,不必完全按照順序作。對于學習c++,理由是c++不只是一種語言,一種工具,她還是一種藝術,一種文化,一種哲學理念、但不是拿來炫耀得東西。對于linux內核,學習編程,讀一些優秀代碼也是有必要的。
2018-04-06 19:09:00
5496 1、Linux 基礎安裝Linux操作系統 Linux文件系統 Linux常用命令 Linux啟動過程詳解 熟悉Linux服務能夠獨立安裝Linux操作系統 能夠熟練使用Linux系統的基本命
2018-07-23 13:59:26
837 1、Linux 基礎安裝Linux操作系統 Linux文件系統 Linux常用命令 Linux啟動過程詳解 熟悉Linux服務能夠獨立安裝Linux操作系統 能夠熟練使用Linux系統的基本命
2018-07-25 09:31:14
286 1、Linux 基礎安裝Linux操作系統 Linux文件系統 Linux常用命令 Linux啟動過程詳解 熟悉Linux服務能夠獨立安裝Linux操作系統 能夠熟練使用Linux系統的基本命
2018-07-27 14:31:08
430 1、Linux 基礎安裝Linux操作系統 Linux文件系統 Linux常用命令 Linux啟動過程詳解 熟悉Linux服務能夠獨立安裝Linux操作系統 能夠熟練使用Linux系統的基本命
2018-08-01 14:38:52
322 1、Linux 基礎安裝Linux操作系統 Linux文件系統 Linux常用命令 Linux啟動過程詳解 熟悉Linux服務能夠獨立安裝Linux操作系統 能夠熟練使用Linux系統的基本命
2018-08-06 15:31:46
296 1、Linux 基礎安裝Linux操作系統 Linux文件系統 Linux常用命令 Linux啟動過程詳解 熟悉Linux服務能夠獨立安裝Linux操作系統 能夠熟練使用Linux系統的基本命
2018-08-07 10:33:55
309 1、Linux 基礎安裝Linux操作系統 Linux文件系統 Linux常用命令 Linux啟動過程詳解 熟悉Linux服務能夠獨立安裝Linux操作系統 能夠熟練使用Linux系統的基本命
2018-08-08 11:43:46
341 操作系統是介于底層硬件和應用軟件之間的接口,其各個子系統的實現很大程度上依賴于硬件特性。書上介紹這些子系統的設計和實現的時候,我們讀過了,也就知道了,如果再深入考慮一下,為什么整體架構要按照這種方式組織,為什么局部函數要遵循這樣的步驟處理,知其然,知其所以然,如果你知道了某個功能的實現是因為芯片就是這么設計的,CPU就是這么做的,那么你的疑問也就基本上到此為止了。
2018-08-13 17:40:27
2997 隨著計算機嵌入式的普遍應用,越來越多的人選擇投向嵌入式領域,但嵌入式學習有接一些誤區,接下來尚觀教育小編分析一下同學們的幾種常見的嵌入式linux學習誤區,然后提出一種比較合適的嵌入式linux
2018-08-30 17:04:11
327 一部較適合Linux學習者學習的書籍,特別是剛從Windows轉向Linux的朋友。主講Linux基本技能。隨著Linux日益強大,越來越多的人接觸Linux,但苦于無參考書籍,使得Linux學習倍感吃力,本書將指引你通向Linux高手之路。
2018-08-31 15:18:14
23 思想。嵌入式Linux開發.也是一樣一樣的,實踐是最好的學習方法,對于一個系統,不妨一個一個模塊去實踐去完成,不要一直停留在理論階段。對于前天老師所講解的知識,自然也不要以為自己聽懂了,除非自己親自
2018-09-30 15:40:13
297 現在每年畢業的大學生非常多,然而很多用人單位仍然招不到合適的軟件開發人員。這是什么原因呢?畢業大學生雖然多,但大部分都能力不夠,不能達到他們的工作的要求。而很多同學往往在學習嵌入式linux時有
2018-10-11 11:08:54
341 學習Linux,首先得了解它,linux是一種類unix的操作系統,在源代碼級上兼容絕大部分的Unix標準,他的標志是一直可愛的企鵝,linux從一開始,就決定自由擴散它,包括源代碼,這引起了很多
2018-10-30 19:13:42
10 Linux系統現在越來越滿足人們對技術的要求,因此Linux不論在市場中還是企業里都備受歡迎,所以學習Linux的人越來越多,那么Linux到底應該怎么學呢?有沒有Linux入門視頻教程供大家觀看呢?
2019-01-15 17:17:09
63 Linux系統目前主要應用在企業服務器上,學習Linux,更多的是向Linux系統/運維工程師方向進軍。比如云計算系統工程師,大數據運維工程師,運維開發工程師其職位都是Linux運維工程師的進階。下面就整體介紹下,作為過來人,怎么學習Linux,以及Linux入門和學習的路線。
2019-03-26 16:22:22
5552 子系統進行管理工作需要大量的數據結構。子系統之間交互的一種方式就是各個子系統各自的主要數據結構通過指針成員相互引用。
2019-05-12 10:20:21
836 ?觸摸屏歸納為輸入子系統,這里主要是針對電阻屏,其使用過程如下當用觸摸筆按下時,產生中斷。在中斷處理函數處理函數中啟動ADC轉換x,y坐標。ADC結束,產生ADC中斷在ADC中斷處理函數里上報(input_event)啟動定時器再次啟動定時器(可以處理滑動、長按)松開按鍵?其驅動程序的寫法和之前寫輸入子系統的寫法基本上一致。寫出入口函數,出口函數并加以修飾,加入相關頭文件,然后開始完善各函數,在入口函數中分配input_dev結構體,設置(能產生哪類事件,能產生這類事件中的哪些事件),注冊設備,硬件相關的操作等。出口函數中主要對之前注冊、分配的一些資源進行釋放。還應根據2440數據手冊ADC轉換和觸摸屏那一章,對相關寄存器根據實際需要進行設置。?點擊(此處)折疊或打開?#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include struct s3c_ts_regs { ? ? ? ? ? ? ? ? ? ? /* 相關的寄存器 */? ? unsigned long adccon;? ? unsigned long adctsc;? ? unsigned long adcdly;? ? unsigned long adcdat0;? ? unsigned long adcdat1;? ? unsigned long adcupdn;};static struct input_dev *s3c_ts_dev;static volatile struct s3c_ts_regs *s3c_ts_regs;static struct timer_list ts_timer;void enter_wait_pen_down_mode(void) ?/* 進入等待觸摸筆按下模式 */{? ? s3c_ts_regs->adctsc = 0xd3; ? ? ?/* 進入等待中斷模式 bit[8]為0 2440手冊P442 */}void enter_wait_pen_up_mode(void) ? ? ? /* 進入等待觸摸筆松開模式 */{? ? s3c_ts_regs->adctsc = 0x1d3; ? ? ? ?/* 進入等待中斷模式 bit[8]為1 2440手冊P442 */}static void enter_measure_xy_mode(void) /* 進入xy測量模式 */{? ? s3c_ts_regs->adctsc = (1 avr_x) ? (x[3 - avr_x) : (avr_x - x[3);? ? det_y = (y[3 > avr_y) ? (y[3 - avr_y) : (avr_y - y[3);? ? if ((det_x > ERR_LIMIT) || (det_y > ERR_LIMIT))? ? ? ? return 1;}static void s3c_ts_timer_functions(unsigned long data){? ? if (s3c_ts->adcdat0 & (1adcdat0 & (1evbit); ?/* 能夠產生絕對位移事件 */? ? /* 2.2 能產生這類事件里的哪些事件 */? ? set_bit(BTN_TOUCH, s3c_ts_dev->evbit); /* 能夠產生按鍵類里面的觸摸屏事件 */? ? input_set_abs_params(s3c_ts_dev, ABS_X, 0, 0x3FF, 0, 0); ? /* X方向 0xFF是因為觸摸屏ADC是10位 */? ? input_set_abs_params(s3c_ts_dev, ABS_Y, 0, 0x3FF, 0, 0); ? /* Y方向 */? ? input_set_abs_params(s3c_ts_dev, ABS_PRESSURE, 0, 1, 0, 0);/* 壓力方向 */? ? /* 3.注冊 */? ? input_register_device(s3c_ts_dev);? ? /* 4.硬件相關的操作 */? ? /* 4.1 使能時鐘CLKCON[15 (總開關,一般對不用的設備,時鐘一般是關閉的) */? ? clk = clk_get(NULL, "adc");? ? clk_enable(clk);? ? /* 4.2 設置S3c2440的ADC/TS寄存器 */? ? s3c_ts_regs = ioremap(0x58000000, sizeof(struct s3c_ts_regs));? ? /* ADCCON? ? ?* bit[14 ? : 1 預分頻使能? ? ?* bit[13:6 : ? 預分頻系數? ? ?* ? ? ? ? ? ? ? 49 ,ADCCLK = PCLK/(49+1) = 50MHz/(49+1)=1MHz? ? ?* bit[5:3 ?: 多路選擇? ? ?* bit[2 ? ?: 省電模式選擇? ? ?* bit[1 ? ?: AD啟動方式,通過讀來啟動? ? ?* bit[0 ? ?: 啟動AD轉換,啟動后會自動清零? ? ?*/? ? s3c_ts_regs->adccon = (1
2019-04-02 14:33:03
150 用戶不希望這樣操作,就要在信號處理函數結尾再調用一次signal,進行重裝。??????? b. 信號會丟失。????????Linux支持不可靠信號,信號值小于SIGRTMIN的都是不可靠的, 但是
2019-04-02 14:46:40
142 結合自己的幾年的個人開發經驗,及對 Linux,更是類UNIX系統,及開源軟件文化,談談Linux的學習方法與學習中應該注意的一些事。
2019-05-07 18:20:00
3 Linux學習階段,可以分為四個階段,linux初級入門-linux中級進階-linux高級提升,和資深方向細化。
2020-05-20 09:15:01
969 kmdr 收納了非常多的 CLI 命令解釋,例如常見的 ansible, conda, docker, git, go, kubectl, mongo, mysql, npm, ruby gems, vagrant 等等,不僅如此,那些 bash 內置命令 它都能為你解釋,非常給力!
2020-08-14 17:04:48
2124 Linux內核是一個操作系統(OS)內核,本質上定義為類Unix。它用于不同的操作系統,主要是以不同的Linux發行版的形式。Linux內核是第一個真正完整且突出的免費和開源軟件示例。Linux 內核是第一個真正完整且突出的免費和開源軟件示例,促使其廣泛采用并得到了數千名開發人員的貢獻。
2020-09-16 15:49:50
2323 Linux學習方法: 宋寶華:迭代螺旋法關于Linux學習方法的血淚建議 宋寶華: 紀念金庸先生程序員的武俠世界 如何閱讀Linux內核的源碼 Linux任督二脈之進程管理 郭健:Linux進程調度
2020-10-10 16:28:50
2482 一、linux內核學習之一:環境搭建--安裝Debian7.3 本系列文章假設讀者已對linux有一定的了解,其實學習linux內核不需要有很深的關于linux的知識,只需要了解以下內容:linux
2021-01-02 18:01:00
1868 嵌入式linux系統的學習步驟 Linux 基礎 安裝Linux操作系統 Linux文件系統 Linux常用命令 Linux啟動過程詳解 熟悉Linux服務能夠獨立安裝Linux操作系統 能夠熟練
2021-03-29 14:55:31
443 嵌入式linux系統的學習步驟 Linux 基礎 安裝Linux操作系統 Linux文件系統 Linux常用命令 Linux啟動過程詳解 熟悉Linux服務能夠獨立安裝Linux操作系統 能夠熟練
2021-03-29 15:10:52
438 嵌入式linux系統的學習步驟 Linux 基礎 安裝Linux操作系統 Linux文件系統 Linux常用命令 Linux啟動過程詳解 熟悉Linux服務能夠獨立安裝Linux操作系統 能夠熟練
2021-04-12 10:44:20
440 的、有做網絡產品的等等。 總結一句話,IT的很大部分從業者都需要掌握Linux的部分知識,但是由于每個人的從事領域不一樣,對Linux的要求也不一樣,這就直接導致,網上搜索學習路線有很多種,還有就是推薦的書籍很多都不利于初學者。 比如Linux命令的學習,很多人都
2021-06-30 16:03:03
1742 
很多人喜歡從系統啟動流程開始學習:先學習裸機,裸機集合起來就是 u-boot,再學習內核移植、驅動開發,接下來學習根文件系統,最后學習 APP 開發。學習裸機需要 2、3 個月,學習 u-boot
2021-10-20 21:06:03
5 嵌入式Linux開發學習如何入門、如何深入?學習步驟如下:1、Linux 基礎安裝Linux操作系統Linux文件系統Linux常用命令Linux啟動過程詳解熟悉Linux服務能夠獨立安裝Linux
2021-10-21 10:21:00
10 嵌入式Linux應用開發學習路線–自用嵌入式應用開發路線:對于實驗室隊員(有簡單的ST32基礎和AD基礎的人比較合適)個人理解:先按照韋東山老師的思路,學下來,建議一個基本的框架,然后根據嵌入式
2021-11-01 16:31:11
14 ?轉自韋東山處,記錄保存,學習Linux參考應用。?
2021-11-01 17:21:18
11 如何理解嵌入式系統◆嵌入式系統是面向用戶、面向產品、面向應用的,它必須與具體應用相結合才會具有生命力、才更具有優勢。因此可以這樣理解上述三個面向的含義,即嵌入式系統是與應用緊密結合的,它具有很強的專用性,必須結合實際系統需求進行合理的裁減利用。◆嵌入式系統是將先進的計算機技術、半導體技術和電子技術和各個行業的具體應用相結合后的產 物,這一點就決定了它必然是一個技術密集、資金密集、高度分散、不斷...
2021-11-01 17:22:21
8 嵌入式linux開發的學習之路linux操作系統的基本使用以及常見指令;linux環境下的c語言編寫整套流程操作熟悉;ARM裸機開發;嵌入式c語言詳解uboot和系統移植Linux應用編程和網絡編程
2021-11-01 17:59:18
15 入門。作為嵌入式linux驅動學習的新人,可能心里都有自己的想法,期望有一個自己心中完美的資料來幫助自己入門。然而,每個人基礎不同,悟性不同,對待 問題的態度不同,所以根本難以一個教程滿足所有人。但是總結來說,就是新手可能更希望從現象出發,從最高層出發,從應用出發,然后到底層驅動是如何調用下來的
2021-11-01 18:00:16
11 找到相關工作學習內容:一共分為四個部分:基礎入門、編程進階、ARM開發高階、終極深入。基礎入門linux基本操作:學習書籍:《Linux命令行大全》——人民郵電出版社需要掌握的知識如下:環境的搭建;Linux目錄結構;文件類型;基本目錄操作,文件操作,vim,ifc
2021-11-02 14:06:07
10 嵌入式linux入門學習規劃如何理解嵌入式系統◆嵌入式系統是面向用戶、面向產品、面向應用的,它必須與具體應用相結合才會具有生命力、才更具有優勢。因此可以這樣理解上述三個面向的含義,即嵌入式系統
2021-11-04 11:06:00
12 嵌入式物聯網方面免費學習資料大家可以看下啊 直接點擊下方學習鏈接即可觀看-嵌入式系統移植(主要講UBOOT移植)高效學習ARM匯編語言(stm32直流電機驅動)紅外線人流感應器智能溫控小風扇超聲波
2022-01-13 11:23:54
5 目錄一、學習操作系統(Linux內核)的重要性二、Linux內核的組成部分三、Linux內核源碼組織結構四、Linux內核需要重點學習的知識點五、如何開啟你的Linux內核學習之路
2022-01-13 14:39:40
4 一、學習操作系統(Linux內核)的重要性 為什么要學習Linux內核,這個問題我相信很多人都不一定答得上來。只是從技術層上講,對內核的研究會加深我們的技術的理解,更多的理解源碼,是從思想和思考方式
2022-05-06 22:15:20
1688 
學習linux內核,這個可不像學一門語言,c或者java一個月或者3月你就能精通掌握。學習linux內核是需要一步一步循序漸進,掌握正確的linux內核學習路線對學習至關重要,本篇文章就來分享學習linux內核的一些建議吧。
2022-05-07 15:20:27
447 
Shell 腳本編程是在 Linux 下學習或練習編程的最簡單的方式。尤其對運維工程師處理著自動化任務,且要開發新的簡單的實用程序或工具等(這里只是僅舉幾例)更是必備技能。
2022-05-09 15:26:01
1241 Linux是一個命令行組成的操作系統,精髓在命令行,無論圖形界面發展到什么水平這個原理是不會變的,Linux命令有許多強大的功能:從簡單的磁盤操作、文件存取、到進行復雜的多媒體圖象和流媒體文件的制作。
2023-02-17 13:55:24
1259 
隨著計算機技術的不斷發展,Linux操作系統已成為IT行業中備受關注的操作系統之一。Linux以其安全性、穩定性和開放性,受到了廣泛的認可和歡迎。
2023-04-12 10:27:27
156 input子系統所有的設備主設備號都是13,在使用input系統的時候不需要去注冊字符設備,只需要向系統申請一個input_device即可。
2023-06-23 14:28:00
1024 
內核會使用CONFIG_HZ來配置自己的系統頻率。CONFIG_HZ可以在make menuconfig中配置,配置完的.config文件會有CONFIG_HZ。然后在include/asm-generic/param.h中。
2023-06-23 14:29:00
688 
2023-08-21 17:49:57
0 在Windows 11中通過VMware安裝Ubuntu 22.04做一些Linux相關的學習,剛安裝的時候VMware虛擬磁盤空間也就6~7GB,但是沒用幾天,VMware虛擬磁盤空間就飆升
2023-08-28 10:15:49
2303 
2023-08-29 14:49:22
0 直播報名入口: ? 識別下方二維碼? 進群報名直播 ? 【 進群領取 直播課件 + 直播回放 】 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 直播時間: 2023年9月8日 周五晚8點 直播介紹: 凡億教育: 凡億教育打通了“人才培養+人才輸送”的閉環,致力于做電子工程師的夢工廠,打造“真正有就業保障的電子工程師職業教育平臺”。幫助電子人快速成長,實現升職加薪。為了滿足學員多樣化
2023-09-08 07:40:01
175 在虛擬機中編程Linux系統是學習和探索計算機科學的一個重要方面。使用虛擬機可以在主機上模擬出一個或多個獨立的計算環境,我們可以在其中安裝和運行不同的操作系統。通過創建虛擬機,我們可以
2023-11-17 10:10:44
586
評論