androidlogger
『壹』 android和linux的區別
有以下三點區別:
1、Android沒有本地窗口系統,而Linux是有X窗口系統。
2、Android沒有glibc支持,而Linux是有glibc支持的。
3、Android是有自己專有的驅動程序。
雖然Android基於Linux內核,但是它與Linux之間還是有很大的差別。
(1)androidlogger擴展閱讀
Android專有的驅動程序
1、Android Binder 基於OpenBinder框架的一個驅動,用於提供 Android平台的進程間通信(InterProcess Communication,IPC)功能。源代碼位於drivers/staging/android/binder.c。
2、Android電源管理(PM) 一個基於標准Linux電源管理系統的輕量級Android電源管理驅動,針對嵌入式設備做了很多優化。源代碼位於:
kernel/power/earlysuspend.c
kernel/power/consoleearlysuspend.c
kernel/power/fbearlysuspend.c
kernel/power/wakelock.c
kernel/power/userwakelock.c
3、低內存管理器(Low Memory Killer) 比Linux的標準的OOM(Out Of Memory)機制更加靈活,它可以根據需要殺死進程以釋放需要的內存。源代碼位於 drivers/staging/ android/lowmemorykiller.c。
4、匿名共享內存(Ashmem) 為進程間提供大塊共享內存,同時為內核提供回收和管理這個內存的機制。源代碼位於mm/ashmem.c。
5、Android PMEM(Physical) PMEM用於向用戶空間提供連續的物理內存區域,DSP和某些設備只能工作在連續的物理內存上。源代碼位於drivers/misc/pmem.c。
6、Android Logger 一個輕量級的日誌設備,用於抓取Android系統的各種日誌。源代碼位於drivers/staging/android/logger.c。
7、Android Alarm 提供了一個定時器,用於把設備從睡眠狀態喚醒,同時它還提供了一個即使在設備睡眠時也會運行的時鍾基準。源代碼位於drivers/rtc/alarm.c。
8、USB Gadget驅動 一個基於標准 Linux USB gadget驅動框架的設備驅動,Android的USB驅動是基於gaeget框架的。源代碼位於drivers/usb/gadget/。
9、Android Ram Console 為了提供調試功能,Android允許將調試日誌信息寫入一個被稱為RAM Console的設備里,它是一個基於RAM的Buffer。源代碼位於drivers/staging/android / ram_console.c。
10、Android timed device 提供了對設備進行定時控制的功能,目前支持vibrator和LED設備。源代碼位於drivers/staging/android /timed_output.c(timed_gpio.c)。
參考資料:網路——Android
網路——linux
『貳』 android上如何實現後台日誌記錄並寫文件到sd卡
1.debug alarm manager 啟動的service,你想要知道是否每一次service的執行都正常,一切都是按照你所想的; 2.一些重要的信息,需要保存起來做分析或者需要上傳到伺服器做分析的; 3.開發期間,了解各個主要是網路介面的工作狀態,執行效率(每個介面的執行時間)等等;過程分析1、下載 下載下來的microlog.properties是microlog.properties.txt,修改一下後綴名) 2、建立使用logger對象 private static final Logger logger = LoggerFactory.getLogger(main.class); 3、在程序的第activit或者service的oncreate方法里初始化方法 PropertyConfigurator.getConfigurator(this).configure(); 4、把microlog.properties文件放到assets文件夾里 注意:assets文件夾是與res文件夾平級的 然後更改microlog.properties文件為以下內容: microlog.level=DEBUG microlog.appender=LogCatAppender;FileAppender microlog.formatter=PatternFormatter microlog.formatter.PatternFormatter.pattern=%c [%P] %m %T 5、寫日誌記錄 logger.debug(my debug); 6、在AndroidManifest.xml 添加寫sd卡的許可權 <uses-permission android:name=android.permission.WRITE_EXTERNAL_STORAGE / 啟動程序,然後到SD卡根目錄,可以發現有一個microlog.txt的文件,裡面就是我們記錄的日誌了。 1.上面的日誌在多地方調用,有時候可能會發現只保存了一條記錄,每次後面的日誌都覆蓋了前面的日誌,所以我們需要增加點額外代碼; 2.在第三步後面: final FileAppender fa = logger.getAppender(1); fa.setAppend(true); ok, 到此大功告成。
『叄』 Android-android Logcat怎麼讓它只顯示我自己的應用程序信息
添加過濾器,您可以右擊並選擇filter similar messages
填上你應用的包名當filter Name,其餘的項都清空,然後把
by application name一項填上你的包名即可。
以後查看的時候,點擊你包名就是只看你應用程序的log信息。
注意,底層的報錯,不會顯示在你的應用程序log信息中,要看All messages(no filter)
『肆』 Android手機在開發調試時logcat不顯示輸出信息的辦法
問題表現:連接手機與電腦後,驅動安裝正確,USB調試模式打開,在DDMS中可以看到device及其進程的信息,但是logcat中就是沒有信息輸出
問題原因:一些rom默認關閉logcat
問題說明:ddms中設備名字顯示為問號不影響,即adb
get-serialno顯示為問號不影響.
解決方法:
1.需要root許可權(部分rom不需要)
2.打開logcat,並設置level,執行命令如下(android
升級之後
adb
在
platform-tools中,不在tools中)
adb
shell
echo
1
>
/sys/kernel/logger/log_main/enable
說明:將1寫入日誌開關文件,1為開,0為關
echo
2
>/sys/kernel/logger/log_main/priority
說明:將代表level的2寫入優先順序文件
3.重啟adb,如果使用eclipse,先關閉eclipse,再重啟adb,再啟動eclipse
adb
kill-server
adb
start-server
4.此時logcat應該可以工作了,如果仍舊不工作,則更新adb
android
update
adb
5.重復第三步,此時logcat應該可以工作了,如果仍舊不工作,找到個人主目錄下的android目錄,如C:Documents
and
SettingsAdministrator.android
找到這個目錄下的adb_usb.ini文件,其內容默認只有三行,全為注釋,在後面添加一行,內容為0x12d1
6.重復第三步,此時logcat應該可以工作了
『伍』 linux和android的區別
雖然Android基於Linux內核,但是它與Linux之間還是有很大的差別,比如Android在Linux內核的基礎上添加了自己所特有的驅動程序。下面我們就來分析一下它們之間究竟有什麼關系?
android是否能稱為一種新的操作系統呢?至少我自己認為不算是,它最多算作一個新的應用程序罷了。
一、Android為什麼會選擇Linux
成熟的操作系統有很多,但是Android為什麼選擇採用Linux內核呢?這就與Linux的一些特性有關了,比如:
1、強大的內存管理和進程管理方案
2、基於許可權的安全模式
3、支持共享庫
4、經過認證的驅動模型
5、Linux本身就是開源項目
更多關於上述特性的信息可以參考Linux 2.6版內核的官方文檔,這便於我們在後面的學習中更好地理解Android所特有的功能特性。接下來分析Android與Linux的關系。
二、Android不是Linux
看到這個標題大家可能會有些迷惑,前面不是一直說Android是基於Linux內核的嗎,怎麼現在又不是Linux了?迷惑也是正常的,請先看下面幾個要點,然後我們將對每一個要點進行分析,看完後你就會覺得Android不是Linux了。
因為它沒有本地窗口系統,沒有glibc的支持,而且並不包括一整套標準的Linux使用程序,同時增強了Linux以支持其特有的驅動。
1.它沒有本地窗口系統
什麼是本地窗口系統呢?本地窗口系統是指GNU/Linux上的X窗口系統,或者Mac OX X的Quartz等。不同的操作系統的窗口系統可能不一樣,Android並沒有使用(也不需要使用)Linux的X窗口系統,這是Android不是Linux的一個基本原因。
我很奇怪的是linux的Xwindow並不是其核心程序,你可以看到很多嵌入式linux根本不會用到這個圖形界面系統,而手機上的android不使用Xwindow不是很正常嗎?我們學習的時候用QT難道就不叫做linux系統了么?
2.它沒有glibc支持
由於Android最初用於一些便攜的移動設備上,所以,可能出於效率等方面的考慮,Android並沒有採用glibc作為C庫,而是Google自己開發了一套Bionic Libc來代替glibc。
庫文件不同,好吧,因為移植顯然是要修改庫文件和頭文件的吧,求指教
3.它並不包括一整套標準的Linux使用程序
Android並沒有完全照搬Liunx系統的內核,除了修正部分Liunx的Bug之外,還增加了不少內容,比如:它基於ARM構架增加的Gold-Fish平台,以及yaffs2 FLASH文件系統等。
4.Android專有的驅動程序
除了上面這些不同點之外,Android還對Linux設備驅動進行了增強,主要如下所示。
1)Android Binder 基於OpenBinder框架的一個驅動,用於提供 Android平台的進程間通信(InterProcess Communication,IPC)功能。源代碼位於drivers/staging/android/binder.c。
2)Android電源管理(PM) 一個基於標准Linux電源管理系統的輕量級Android電源管理驅動,針對嵌入式設備做了很多優化。源代碼位於:
kernel/power/earlysuspend.c
kernel/power/consoleearlysuspend.c
kernel/power/fbearlysuspend.c
kernel/power/wakelock.c
kernel/power/userwakelock.c
如果給內核添加驅動也可以稱之為不同的話?
3)低內存管理器(Low Memory Killer) 比Linux的標準的OOM(Out Of Memory)機制更加靈活,它可以根據需要殺死進程以釋放需要的內存。源代碼位於 drivers/staging/ android/lowmemorykiller.c。
4)匿名共享內存(Ashmem) 為進程間提供大塊共享內存,同時為內核提供回收和管理這個內存的機制。源代碼位於mm/ashmem.c。
5)Android PMEM(Physical) PMEM用於向用戶空間提供連續的物理內存區域,DSP和某些設備只能工作在連續的物理內存上。源代碼位於drivers/misc/pmem.c。
6)Android Logger 一個輕量級的日誌設備,用於抓取Android系統的各種日誌。源代碼位於drivers/staging/android/logger.c。
7)Android Alarm 提供了一個定時器,用於把設備從睡眠狀態喚醒,同時它還提供了一個即使在設備睡眠時也會運行的時鍾基準。源代碼位於drivers/rtc/alarm.c。
8)USB Gadget驅動 一個基於標准 Linux USB gadget驅動框架的設備驅動,Android的USB驅動是基於gaeget框架的。源代碼位於drivers/usb/gadget/。
9)Android Ram Console 為了提供調試功能,Android允許將調試日誌信息寫入一個被稱為RAM Console的設備里,它是一個基於RAM的Buffer。源代碼位於drivers/staging/android / ram_console.c。
10)Android timed device 提供了對設備進行定時控制的功能,目前支持vibrator和LED設備。源代碼位於drivers/staging/android /timed_output.c(timed_gpio.c)。
11)Yaffs2 文件系統 Android採用Yaffs2作為MTD nand flash文件系統,源代碼位於fs/yaffs2/目錄下。Yaffs2是一個快速穩定的應用於NAND和NOR Flash的跨平台的嵌入式設備文件系統,同其他Flash文件系統相比,Yaffs2能使用更小的內存來保存其運行狀態,因此它佔用內存小。Yaffs2的垃圾回收非常簡單而且快速,因此能表現出更好的性能。Yaffs2在大容量的NAND Flash上的性能表現尤為突出,非常適合大容量的Flash存儲。
『陸』 android的日誌Logger和Log比較,哪個好
建議使用Log,這是android專門用來開發列印日誌使用的。輸出的日誌可以在Logcat中查看。
Android開發中,所的有輸出都在logcat中 包含System.out輸出和printStackTrace()輸出都在Logcat中,Android開發,建議使用android提供的Log工具類來列印信息。
找到Logcat視圖的方式:
Eclipse 點擊 Window
Show View會出來一個對話框
點擊Ok按鈕時,會在控制台窗口出現LogCat視圖
android.util.Log常用的方法有以下5個:Log.v()Log.d()Log.i()Log.w()以及Log.e()。根據首字母對應VERBOSE,DEBUG,INFO,WARN,ERROR。
1、Log.v 的調試顏色為黑色的,任何消息都會輸出,這里的v代表verbose啰嗦的意思,平時使用就是Log.v("","");
2、Log.d的輸出顏色是藍色的,僅輸出debug調試的意思,但他會輸出上層的信息,過濾起來可以通過DDMS的Logcat標簽來選擇.
3、Log.i的輸出為綠色,一般提示性的消息information,它不會輸出Log.v和Log.d的信息,但會顯示i、w和e的信息
4、Log.w的意思為橙色,可以看作為warning警告,一般需要我們注意優化Android代碼,同時選擇它後還會輸出Log.e的信息。
5、Log.e為紅色,可以想到error錯誤,這里僅顯示紅色的錯誤信息,這些錯誤就需要認真的分析,查看棧的信息了。
『柒』 android中log文件能否刪除太占空間了
你的手機內置logger抓取工具,主要是捕捉你的操作記錄的,MODEM LOG (關於機身發射器的記錄); MOBILE LOG(關於通話方面的記錄) ; NET LOG(關於網路方面的記錄)分別指抓取工具的捕捉類型。如果是系統自帶的這個工具,你可以把它關閉,然後記得從你的文件管理中把MTKLOG文件夾刪除(這個文件夾會隨著你的使用逐漸增大)。關閉Logger功能的操作步驟:1、點擊右下角的狀態欄,找到MODEM log/其他log通知;2、在彈出的界面,先點擊Modem log,點擊裡面的「stop」按鈕;返回;再點Mobile log,同樣點擊「stop」;返回;再點Net log,同樣點擊「stop」即可!另,需要徹底解決這個問題,還是需要通過系統的方式把logger抓取工具給卸掉比較好,希望能對你有所幫助!
『捌』 如何把安卓驅動封裝成jni介面
說到 android 驅動是離不開 Linux 驅動的。Android 內核採用的是 Linux2.6 內核 (最近Linux 3.3 已經包含了一些 Android 代碼)。但 Android 並沒有完全照搬 Linux 系統內核,除了對Linux 進行部分修正,還增加了不少內容。android 驅動 主要分兩種類型:Android 專用驅動 和 Android 使用的設備驅動(linux)。 Android 專有驅動程序: 1)Android Ashmem 匿名共享內存; 為用戶空間程序提供分配內存的機制,為進程間提供大塊共享內存,同時為內核提供回收和管理這個內存。 2)Android Logger 輕量級的LOG(日誌) 驅動; 3)Android Binder 基於 OpenBinder 框架的一個驅動; 4)Android Power Management 電源管理模塊; 5)Low Memory Killer 低內存管理器; 6)Android PMEM 物理內存驅動; 7)USB Gadget USB 驅動(基於 gaeget 框架); 8)Ram Console 用於調試寫入日誌信息的設備; 9)Time Device 定時控制設備; 10)Android Alarm 硬體時鍾; Android 上的設備驅動: 1)Framebuff 顯示驅動; 2)Event 輸入設備驅動; 3)ALSA 音頻驅動; 4)OSS 音頻驅動; 5)v412攝像頭:視頻驅動; 6)MTD 驅動; 7)藍牙驅動; 8)WLAN 設備驅動; Android 專有驅動程序 1.Android Ashmem 為用戶空間程序提供分配內存的機制,為進程間提供大塊共享內存,同時為內核提供回收和管理這個內存。 設備節點:/dev/ashmen .主設備號 10. 源碼位置: include/linux/ashmen.h Kernel /mm/ashmen.c 相比於 malloc 和 anonymous/named mmap 等傳統的內存分配機制,其優勢是通過內核驅動提供了輔助內核的內存回收演算法機制(pin/unoin) 2.Android Logger 無論是底層的源代碼還上層的應用,我們都可以使用 logger 這個日誌設備看、來進行調試。 設備節點: /dev/log/main /dev/log/event /dev/log/radio 源碼位置:include/linux/logger.h include/linux/logger.c 3.Android Binder IPC Binder 一種進程間通信機制。他的進程能夠為其它進程提供服務 ----- 通過標準的 Linux 系統調用 API。 設備節點 :/dev/binder 源碼位置:Kernel/include/linux/binder.h Kernel/drivers/misc/binder.c 4.Android Power Management 一個基於標准 linux 電源管理的輕量級 Android 電源管理系統,在 drivers/android/power.c kernel/power/ 5.Low Memory Killer 它在用戶空間中指定了一組內存臨界值,當其中某個值與進程描述中的 oom_adj 值在同一范圍時,該進程將被Kill掉(在parameters/adj中指定oome_adj 的最小值)。它與標準的Linux OOM機制類似,只是實現方法不同 源碼位置:drivers/misc/lowmemorykiller.c 6.Android PMEM PMEM 主要作用就是向用戶空間提供連續的物理內存區域。 1.讓 GPU 或 VPU 緩沖區共享 CPU 核心。 2.用於 Android service 堆。 源碼位置:include/linux/android_pmem.h drivers/android/pmem.c 7.USB Gadget 基於標准 Linux USB gaeget 驅動框架的設備驅動。 源碼位置:drivers/usb/gadet/ 8.Ram Console 為了提供調試功能,android 允許將調試日誌信息寫入這個設備,它是基於 RAM 的 buffer. 源碼位置: drivers/staging/android/ram_console.c 9.Time Device 定時控制,提供了對設備進行定時控制的功能。 源碼位置:drivers/staging/android/timed_output.c(timed_gpio.c) 10.Android Alarm 提供一個定時器,用於把設備從睡眠狀態喚醒,同時它還提供了一個即使在設備睡眠時也會運行的時鍾基準。 設備節點:/dev/alarm 源碼位置:drivers/trc/alarm.c Android 設備驅動 1. Framebuffer 幀緩存設備 Framebuffer 驅動在 Linux 中是標準的顯示設備的驅動。對於 PC 系統,它是顯卡的驅動 ; 對於嵌入式 SOC 處理器系統,它是 LCD 控制器或者其他顯示控制器的驅動。它是一個字元設備,在文件系統中設備節點通常是 /dev/fbx 。 每個系統可以有多個顯示設備 , 依次用 /dev/fbO 、 /dev/fb l 等來表示。在 Android 系統中主設備號為 29 ,次設備號遞增生成。 Android 對 Framebuffer 驅動的使用方式是標準的 , 在 / dev / graphie / 中的 Framebuffer 設備節點由 init 進程自動創建 , 被 libui 庫調用 。 Android 的 GUI 系統中 , 通過調用 Framebuffer 驅動的標准介面,實現顯示設備的抽象。 Framebuff的結構框架和實現 : linux LCD驅動(二)--FrameBuffer Linux LCD驅動(四)--驅動的實現 2.Event輸入設備驅動 Input 驅動程序是 Linux 輸入設備的驅動程序 , 分為游戲桿 (joystick) 、 滑鼠 (mouse 和 mice)和事件設備 (Event queue)3 種驅動程序。其中事件驅動程序是目前通用的程序,可支持鍵盤 、 滑鼠、觸摸屏等多種輸入設備。 Input 驅動程序的主設備號是 l3 ,每一種 Input 設備從設備號占 用5 位 , 3 種從設備號分配是 : 游戲桿 0 ~ 61 ; Mouse 滑鼠 33 ~ 62 ; Mice 滑鼠 63 ; 事件設備 64 ~ 95 ,各個具體的設備在 misc 、 touchscreen 、 keyboard 等目錄中。 Event 設備在用戶空問使用 read 、 ioctl 、 poll 等文件系統的介面操作, read 用於讀取輸入信息, ioctl 用於獲取和設置信息, poll 用於用戶空間的阻塞,當內核有按鍵等中斷時,通過在中斷中喚醒內核的 poll 實現。 Event 輸入驅動的架構和實現: Linux設備驅動之——input子系統 3.ALSA音頻驅動 高級 Linux 聲音體系 ALSA(Advanced Linux Sound Architecture ) 是為音頻系統提供驅動 的Linux 內核組件,以替代原先的開發聲音系統 OSS 。它是一個完全開放源代碼的音頻驅動程序集 ,除了像 OSS 那樣提供一組內核驅動程序模塊之外 , ALSA 還專門為簡化應用程序的編寫提供相應的函數庫,與 OSS 提供的基於 ioctl 等原始編程介面相比, ALSA 函數庫使用起來要更加方便一些 利用該函數庫,開發人員可以方便、快捷地開發出自己的應用程序,細節則留給函數庫進行內部處理 。 所以雖然 ALSA 也提供了類似於 OSS 的系統介面 , 但建議應用程序開發者使用音頻函數庫,而不是直接調用驅動函數。 ALSA 驅動的主設備號為 116 ,次設備號由各個設備單獨定義,主要的設備節點如下: / dev / snd / contmlCX —— 主控制 ; / dev / snd / pcmXXXc —— PCM 數據通道 ; / dev / snd / seq —— 順序器; / dev / snd / timer —— 定義器。 在用戶空問中 , ALSA 驅動通常配合 ALsA 庫使用 , 庫通過 ioctl 等介面調用 ALSA 驅動程序的設備節點。對於 AIJSA 驅動的調用,調用的是用戶空間的 ALsA 庫的介面,而不是直接調用 ALSA 驅動程序。 ALSA 驅動程序的主要頭文件是 include / sound ./ sound . h ,驅動核心數據結構和具體驅動的注冊函數是 include / sound / core . h ,驅動程序 的核心實現是 Sound / core / sound . c 文件。 ALSA 驅動程序使用下面的函數注冊控制和設備: int snd _ pcm _ new (struct snd _ card * card , char * id , int device , int playback _ count , int capture _ count , struct snd _ pcm ** rpcm) ; int snd ctl _ add(struct snd _ card * card , struct snd _ kcontrol * kcontro1) ; ALSA 音頻驅動在內核進行 menuconfig 配置時 , 配置選項為 「 Device Drivers 」 > 「 Sound c ard support 」 一 > 「 Advanced Linux Sound Architecture 」 。子選項包含了 Generic sound devices( 通用聲音設備 ) 、 ARM 體系結構支持,以及兼容 OSS 的幾個選項。 ALsA 音頻驅動配置對應的文件是sound / core / Kconfig 。 Android 沒有直接使用 ALSA 驅動,可以基於 A-LSA 驅動和 ALSA 庫實現 Android Audio 的硬體抽象層; ALSA 庫調用內核的 ALSA 驅動, Audio 的硬體抽象層調用 ALSA 庫。 4.OSS音頻驅動 OSS(Open Sound System開放聲音系統)是 linux 上最早出現的音效卡驅動。OSS 由一套完整的內核驅動程序模塊組成,可以為絕大多數音效卡提供統一的編程介面。 OSS 是字元設備,主設備號14,主要包括下面幾種設備文件: 1) /dev/sndstat 它是音效卡驅動程序提供的簡單介面,它通常是一個只讀文件,作用也只限於匯報音效卡的當前狀態。(用於檢測音效卡) 2)/dev/dsp 用於數字采樣和數字錄音的設備文件。對於音頻編程很重要。實現模擬信號和數字信號的轉換。 3)/dev/audio 類似於/dev/dsp,使用的是 mu-law 編碼方式。 4)/dev/mixer 用於多個信號組合或者疊加在一起,對於不同的音效卡來說,其混音器的作用可能各不相同。 5)/dev/sequencer 這個設備用來對音效卡內建的波表合成器進行操作,或者對 MIDI 匯流排上的樂器進行控制。 OSS 驅動所涉及的文件主要包括: kernel/include/linux/soundcard.h kernel/include/linux/sound.h 定義 OSS 驅動的次設備號和注冊函數 kernel/sound_core.c OSS核心實現部分 5.V4l2視頻驅動 V4L2是V4L的升級版本,為linux下視頻設備程序提供了一套介面規范。包括一套數據結構和底層V4L2驅動介面。V4L2提供了很多訪問介面,你可以根據具體需要選擇操作方法。需要注意的是,很少有驅動完全實現了所有的介面功能。所以在使用時需要參考驅動源碼,或仔細閱讀驅動提供者的使用說明。 V4L2的主設備號是81,次設備號:0~255,這些次設備號里也有好幾種設備(視頻設備、Radio設備、Teletext、VBI)。 V4L2的設備節點: /dev/videoX, /dev/vbiX and /dev/radioX Android 設備驅動(下) MTD 驅動 Flash 驅動通常使用 MTD (memory technology device ),內存技術設備。 MTD 的字元設備: /dev/mtdX 主設備號 90. MTD 的塊設備: /dev/block/mtdblockX 主設備號 13. MTD 驅動源碼 drivers/mtd/mtdcore.c:MTD核心,定義MTD原始設備 drivers/mtd/mtdchar.c:MTD字元設備 drivers/mtd/mtdblock.c:MTD塊設備 MTD 驅動程序是 Linux 下專門為嵌入式環境開發的新一類驅動程序。Linux 下的 MTD 驅動程序介面被劃分為用戶模塊和硬體模塊: 用戶模塊 提供從用戶空間直接使用的介面:原始字元訪問、原始塊訪問、FTL (Flash Transition Layer)和JFS(Journaled File System)。 硬體模塊 提供內存設備的物理訪問,但不直接使用它們,二十通過上述的用戶模塊來訪問。這些模塊提供了快閃記憶體上讀、寫和擦除等操作的實現。 藍牙驅動 在 Linux 中,藍牙設備驅動是網路設備,使用網路介面。 Android 的藍牙協議棧使用BlueZ實現來對GAP, SDP以及RFCOMM等應用規范的支持,並獲得了SIG認證。由於Bluez使用GPL授權, 所以Android 框架通過D-BUS IPC來與bluez的用戶空間代碼交互以避免使用未經授權的代碼。 藍牙協議部分頭文件: include/net/bluetooth/hci_core.h include/net/bluetooth/bluetooth.h 藍牙協議源代碼文件: net/bluetooth/* 藍牙驅動程序部分的文件: drivers/bluetooth/* 藍牙的驅動程序一般都通過標準的HCI控制實現。但根據硬體介面和初始化流程的不同,又存在一些差別。這類初始化動作一般是一些晶振頻率,波特率等基礎設置。比如CSR的晶元一般通過BCSP協議完成最初的初始化配置,再激活標准HCI控制流程。對Linux來說,一旦bluez可以使用HCI與晶元建立起通信(一般是hciattach + hciconfig),便可以利用其上的標准協議(SCO, L2CAP等),與藍牙通信,使其正常工作了。 WLAN 設備驅動(Wi-Fi)(比較復雜我面會專門寫個wifi分析) 在linux中,Wlan設備屬於網路設備,採用網路介面。 Wlan在用戶空間採用標準的socket介面進行控制。 WiFi協議部分頭文件: include/net/wireless.h WiFi協議部分源文件: net/wireless/* WiFi驅動程序部分: drivers/net/wireless/*
『玖』 Linux和安卓具體是存在什麼關系
Android一種基於Linux的自由及開放源代碼的操作系統。Linux操作系統的內核,安卓則是基於Linux內核開發的操作系統,安卓在Linux的基礎上提供了驅動以及用戶編程介面。
操作系統管理計算機硬體與軟體資源的計算機程序,同時也是計算機系統的內核與基石。操作系統需要處理如管理與配置內存、決定系統資源供需的優先次序、控制輸入設備與輸出設備、操作網路與管理文件系統等基本事務。操作系統也提供一個讓用戶與系統交互的操作界面。
Android以Bionic 取代Glibc、以Skia 取代Cairo、再以opencore取代FFmpeg等等。Android 為了達到商業應用,必須移除被GNU GPL授權證所約束的部份,例如Android將驅動程序移到 Userspace,使得Linux driver 與 Linux kernel徹底分開。
Bionic/Libc/Kernel/ 並非標準的Kernel header files。Android 的 Kernel header 是利用工具由 Linux Kernel header 所產生的,這樣做是為了保留常數、數據結構與宏。
(9)androidlogger擴展閱讀
APK安卓應用的後綴,是AndroidPackage的縮寫,即Android安裝包(apk)。APK是類似Symbian Sis或Sisx的文件格式。通過將APK文件直接傳到Android模擬器或Android手機中執行即可安裝。
apk文件和sis一樣,把android sdk編譯的工程打包成一個安裝程序文件,格式為apk。 APK文件其實是zip格式,但後綴名被修改為apk,通過UnZip解壓後,可以看到Dex文件,Dex是Dalvik VM executes的全稱,即Android Dalvik執行程序,並非Java ME的位元組碼而是Dalvik位元組碼。
Android在運行一個程序時首先需要UnZip,然後類似Symbian那樣直接執行安裝,和Windows Mobile中的PE文件有區別;
這樣做對於程序的保密性和可靠性不是很高,通過dexmp命令可以反編譯,但這樣做符合發展規律,微軟的 Windows Gadgets或者說WPF也採用了這種構架方式。
在Android平台中dalvik vm的執行文件被打包為apk格式,最終運行時載入器會解壓然後獲取編譯後androidmanifest.xml文件中的permission分支相關的安全訪問,但仍然存在很多安全限制,如果你將apk文件傳到/system/app文件夾下會發現執行是不受限制的。
最終平時安裝的文件可能不是這個文件夾,而在android rom中系統的apk文件默認會放入這個文件夾,它們擁有著root許可權。
『拾』 android logcat 無法使用
android開發中如果碰到logcat中不輸出信息的情況,請按以下步驟排除問題:
重啟Eclipse和android模擬器
如果是真機測試的話,數據線拔下重新連接
打開logcat,並設置level,執行命令如下(android 升級之後 adb 在 platform-tools中,不在tools中)adb shellecho 1 > /sys/kernel/logger/log_main/enable
說明:將1寫入日誌開關文件,1為開,0為關echo 2 >/sys/kernel/logger/log_main/priority說明:將代表level的2寫入優先順序文件
重啟adb,如果使用eclipse,先關閉eclipse,再重啟adb,再啟動eclipseadb kill-serveradb start-server
此時logcat應該可以工作了,如果仍舊不工作,則更新adbandroid update adb
重復第三步,此時logcat應該可以工作了,如果仍舊不工作,找到個人主目錄下的android目錄,如C:Documents and SettingsAdministrator.android 找到這個目錄下的adb_usb.ini文件,其內容默認只有三行,全為注釋,在後面添加一行,內容為0x12d1
重復第三步,此時logcat應該可以工作了
如果logcat還不輸出日誌
打開 開發工具中的DDMS
點擊所有連接設備的信息,連接幾個顯示幾個
雙擊連接的設備,logcat就顯示哪個設備的信息了