㈠ _v版app如何自定義介面地址
自定義介面地址的方法:
第一步、保證電視和電腦或者手機在同一WIFI下,啟動電視或者盒子上我們安裝好的FreeDTV。
第二步、切換到「應用設置」,自定義介面內輸入「local」提交,即可開啟介面本地化。
㈡ uniapp在項目靜態資源中配置介面地址
然後再main.js中引入,掛載到Vue.prototype上
b. 另一種方式就是直搏哪接main.js中去請求config.json的數據,然後掛載到Vue.prototype上,同時把Vue實例也放在請求返回結果中(request.request是我自己封裝吵叢的請求方法,替換成自己的或者axios就行)升銀櫻
㈢ 怎麼寫 App 介面設計方案
編寫介面設計方薯斗案頭部必定是目錄,要是在目錄和正文中間插入本方案總設計師姓名和他的手機郵件等聯系方式方便雙方項目上對接自是極好的
一闡述面向的用戶群和平台有哪些;
二要達到怎樣的設計目標,如並發量,延遲等;
三設計的系統介面可能會有哪些問題和風險,基於以上,在進行設計過程中將會採用那些技術手段;
四是闡述數銷磨一些介面命名規范,欄位和數據長度限制規范,最大連接時間等;
在後面概述介面按業務或非業務分斗敗為哪幾大塊,訂單一塊,賬戶管理一塊,日誌一塊,文件/圖片一塊;
接下來詳述每塊分別有哪些介面,具體如何定義的等等;
最後在闡述下整個系統與哪些第三方會有交集,這些介面提供方的公司名字?與這些公司的技術聯系人是誰,聯系方式是什麼,與他們的數據通信方式是什麼,他們的訪問地址在何處,經過一系列測試後發現的延遲情況,安全問題等等,我方是如何解決的,在本次設計的介面中有哪些用到了這個第三方介面;
㈣ App 和 Web 的通用介面該怎麼設計
1、在介面定義中確定MVC的GET或者POST方式
由於我埋滲們整個Web API平台是基於MVC的基礎上進行的API開發,因此整個Web API的介面,在定義的時候,一般需要顯示來聲明介面是[HttpGet]或者[HttpPost],雖然有些介面也可以不用聲明,但是避免出現類似下面的錯誤信息,顯式聲明還是有好處的。
請求的資源不支持 http 方法「POST
例如在基類定義的查找對象介面如下所示。
/// <summary>
/// 查詢資料庫,檢查是否存在指定ID的對象
/// </summary>
/// <param name="id">對象的ID值</param>
/// <returns>存在則返回指定的對象,否則返回Null</returns>
[HttpGet]
public virtual T FindByID(string id, string token)
如果是增刪改的介面,一般需要聲明為POST方式提交數據,而且基於安全性的考慮,需要攜帶更多的參數。
/// <summary>
///兆液激 插入指定對象到資料庫中
/// </summary>
/// <param name="info">指定的對象</param>
/// <returns>執行操作是否成功。</returns>
[HttpPost]
public virtual CommonResult Insert(T info, string token, string signature, string timestamp, string nonce, string appid)
2、動態對象的介面定義
在一般的Web API介面裡面,我們可能都會碰到很多簡單類型的參數,但是又想讓它們以POST方式提交數據,那麼我們就可以有兩種方法來處理,一種是定義一個類來放置這些參數,一種是採用動態的JObject參數,前者有很多不方便的地方,因為我們不可能為每個介面參數定義多一個實體類,這樣可能會有很多難以管理的類定義。如下面是微信API的調用介面案例,我們也需要設置這樣的處理規則。
介面調用請求說明
http請求方式: POST(請使用https協議)
https://api.weixin.qq.com/cgi-bin/groups/update?access_token=ACCESS_TOKEN
POST數據格式:json
POST數據例子:{"group":{"id":108,"name":"test2_modify2"}}
那麼我們採用JObject是這么樣的呢,我們來看介面的定義和處理代碼。JObject是Newtonsoft.Json.Linq命名空間下的一個對象。
/// <summary>
/// 修改用戶密碼
/// </summary>
/// <param name="param">包含userName和userPassword的復合對象族襪</param>
/// <param name="token">用戶訪問令牌</param>
/// <returns></returns>
[HttpPost]
public CommonResult ModifyPassword(JObject param, string token)
{
//令牌檢查,不通過則拋出異常
CheckResult checkResult = CheckToken(token);
dynamic obj = param;
if (obj != null)
{
string userName = obj.userName;
string userPassword = obj.userPassword;
bool success = BLLFactory<User>.Instance.ModifyPassword(userName, userPassword);
return new CommonResult(success);
}
else
{
throw new MyApiException("傳遞參數出現錯誤");
}
}
其中我們把JObject對象轉換為我們所需要的對象的時候,因為我們沒有定義具體的實體類,因此採用了dynamic語法,聲明這是一個動態對象,由運行時獲取對應的屬性。
dynamic obj = param;
這樣我們就可以在調用的時候,動態POST對應的JSON對象給Web API介面,而不需要預先定義各種介面參數的類了。
/// <summary>
/// 調用Web API介面,修改用戶密碼
/// </summary>
/// <param name="userName">用戶名稱</param>
/// <param name="userPassword">修改的密碼</param>
/// <returns>如果修改成功返回true,否則返回false</returns>
public bool ModifyPassword(string userName, string userPassword)
{
var action = "ModifyPassword";
var postData = new
{
userName = userName,
userPassword = userPassword
}.ToJson();
string url = GetTokenUrl(action);
CommonResult result = JsonHelper<CommonResult>.ConvertJson(url, postData);
return (result != null) ? result.Success : false;
}
其中GetTokenUrl是根據token和API的地址等參數,構建一個完整的提交地址。我們在上面代碼通過
var postData = new
{
userName = userName,
userPassword = userPassword
}.ToJson();
就可以動態創建一個對象,並生成它的JSON字元串,把數據POST提交到對應的API介面裡面即可,然後對結果進行對象的轉換就算完成了。
3、集合和分頁的處理
在很多介面裡面,我們都需要用到分頁的處理,Web API也不例外,這樣可以提交數據檢索效率,減少伺服器數據處理的壓力,同時也提交客戶端的數據顯示速度。
一般的集合介面定義如下所示(通用性基類介面)。
/// <summary>
/// 返回資料庫所有的對象集合
/// </summary>
/// <returns>指定對象的集合</returns>
[HttpGet]
public virtual List<T> GetAll(string token)
{
//檢查用戶是否有許可權,否則拋出MyDenyAccessException異常
base.CheckAuthorized(AuthorizeKey.ListKey, token);
List<T> list = baseBLL.GetAll();
return list;
}
但是這樣的返回記錄會比較多,一般情況下需要分頁,那麼分頁的處理介面定義如下所示。
/// <summary>
/// 根據條件查詢資料庫,並返回對象集合(用於分頁數據顯示)
/// </summary>
/// <returns>指定對象的集合</returns>
[HttpPost]
public virtual PagedList<T> FindWithPager(string condition, PagerInfo pagerInfo, string token)
分頁介面,在這里返回的結果裡面,用了一個PageList的泛型類,這個方便我們獲取當前的記錄及總數,它的定義如下所示。
/// <summary>
/// 分頁集合
/// </summary>
/// <typeparam name="T">對象</typeparam>
public class PagedList<T>
{
/// <summary>
/// 返回記錄的總數
/// </summary>
public int total_count { get; set; }
/// <summary>
/// 列表集合
/// </summary>
public List<T> list { get; set; }
}
最後整個分頁的處理Web API介面實現如下所示。
/// <summary>
/// 根據條件查詢資料庫,並返回對象集合(用於分頁數據顯示)
/// </summary>
/// <returns>指定對象的集合</returns>
[HttpPost]
public virtual PagedList<T> FindWithPager(string condition, PagerInfo pagerInfo, string token)
{
//檢查用戶是否有許可權,否則拋出MyDenyAccessException異常
base.CheckAuthorized(AuthorizeKey.ListKey, token);
List<T> list = baseBLL.FindWithPager(condition, pagerInfo);
//構造成Json的格式傳遞
var result = new PagedList<T>() { total_count = pagerInfo.RecordCount, list = list };
return result;
}
最後客戶端調用分頁的Web API代碼如下所示。
/// <summary>
/// 根據條件查詢資料庫,並返回對象集合(用於分頁數據顯示)
/// </summary>
/// <param name="condition">查詢的條件</param>
/// <param name="pagerInfo">分頁實體</param>
/// <returns>指定對象的集合</returns>
public virtual List<T> FindWithPager(string condition, ref PagerInfo pagerInfo)
{
var action = "FindWithPager";
string url = GetTokenUrl(action) + string.Format("&condition={0}", condition);
var postData = pagerInfo.ToJson();
List<T> result = new List<T>();
PagedList<T> list = JsonHelper<PagedList<T>>.ConvertJson(url, postData);
if (list != null)
{
pagerInfo.RecordCount = list.total_count;//修改總記錄數
result = list.list;
}
return result;
}
4、混合框架界面整合Web API介面
在整個Web API的平台構建以及在混合框架的整合過程中,我把各個模塊還是遵循相對獨立的方式進行開發和整合,它們實現了從直接訪問資料庫、以WCF服務獲取數據,以及通過WebAPI調用方式獲取數據幾種方式的統一,從而實現了整個混合框架的高度整合。
整個混合框架的核心是以相對獨立的方式,整合各個可重用的模塊,我們可以遵循一定的基礎上,快速構建統一的應用平台。
搭建完畢的整個WebAPI平台,其中包括了服務端內容,以API控制器的方式,發布了對應的Web API介面。
在每個混合框架的獨立模塊裡面,我們封裝了對應的Web API客戶端調用處理,從而實現了Web API的調用方式。
在Win10下,使用Web API模式運行混合框架,獲得的主體界面效果如下所示。
獨立模塊許可權管理系統界面如下所示。
系列文章如下所示:
Web API應用架構在Winform混合框架中的應用(1)
Web API應用架構在Winform混合框架中的應用(2)--自定義異常結果的處理
Web API介面設計經驗總結
Web API應用架構在Winform混合框架中的應用(3)--Winfrom界面調用WebAPI的過程分解
Web API應用架構在Winform混合框架中的應用(4)--利用代碼生成工具快速開發整套應用
Web API應用架構在Winform混合框架中的應用(5)--系統級別字典和公司級別字典並存的處理方式
㈤ App介面需求文檔
1.介面地址:
2.支持格式:json
3.請求方式:post
4.請求參數:
| 名稱 | 類型 | 必填 |說明|
| -------- |:------:|: -----:|:--------:|
| mobile | string | 是 |手機號|
|password | string | 是 |密碼|
| nickname| string | 是 |昵稱|
| smsCode| string | 是 |驗證碼|
5.返滾純回欄位說明:
6.返回JSON實例
1.介面地址:
2.支持格式:json
3.請求方式:post
4.請求參數:
| 名稱 | 類型 | 必填 |說明|
| -------- |:------:|: -----:|:--------:|
| mobile | string | 是 |手機號|
5.返回欄位說明:
1.介面地址:
2.支持格式:json
3.請求方式:post
4.請求參數:
| 名稱 | 類型 | 必填 |說明|
| -------- |:------:|: -----:|:--------:|
| mobile | string | 是 |手機號|
|password | string | 是 |密碼|
5.返回欄位說明:
6.返回JSON實例
1.介面地址:
2.支持格式:json
3.請求方式:delete
4.請求參數:session_id
5.返回欄位說明:
6.返回JSON實例
1.介面地址:
2.支持格式:json
3.請求方式:post
4.請求參數:
| 名稱 | 類型 | 必填 |說明|
| -------- |:------:|: -----:|:--------:|
| page | string | 是 |頁碼|
5.返回欄位說明:
6.返回JSON實例
1.介面地址:
2.支持格式:json
3.請求宏核方式:post
4.請求參數:
| 名稱 | 類型 | 必填 |說明|
| -------- |:------:|: -----:|:--------:|
| page | string | 是 |頁碼|
| type | string | 是 |商品蔽備掘類型|
5.返回欄位說明:
6.返回JSON實例
1.介面地址:
2.支持格式:json
3.請求方式:post
4.請求參數:
| 名稱 | 類型 | 必填 |說明|
| -------- |:------:|: -----:|:--------:|
| ID | string | 是 |商品ID|
5.返回欄位說明:
6.返回JSON實例
1.介面地址:
2.支持格式:json
3.請求方式:post
4.請求參數:
| 名稱 | 類型 | 必填 |說明|
| -------- |:------:|: -----:|:--------:|
| page | string | 是 |頁碼|
5.返回欄位說明:
6.返回JSON實例
1.介面地址:
2.支持格式:json
3.請求方式:post
4.請求參數:
| 名稱 | 類型 | 必填 |說明|
| -------- |:------:|: -----:|:--------:|
| type | string | 是 |訂單類型|
5.返回欄位說明:
6.返回JSON實例
1.介面地址:
2.支持格式:json
3.請求方式:post
4.請求參數:
| 名稱 | 類型 | 必填 |說明|
| -------- |:------:|: -----:|:--------:|
| consignee | string | 是 |收貨人|
| telephone_num | string | 是 |收貨人電話|
| address | string | 是 |收貨地址|
| goods_id | string | 是 |商品編號|
| goods_num | string | 是 |商品數量|
| order_price | string | 是 |訂單金額|
| charges | string | 是 |運費|
5.返回欄位說明:
6.返回JSON實例
1.介面地址:
2.支持格式:json
3.請求方式:post
4.請求參數:
| 名稱 | 類型 | 必填 |說明|
| -------- |:------:|: -----:|:--------:|
| goods_id | string | 是 |商品編號|
| content | string | 是 |評論內容|
| score | string | 是 |評分|
| images | array | 否 |圖片鏈接|
5.返回欄位說明:
6.返回JSON實例
1.介面地址:
2.支持格式:json
3.請求方式:get
4.請求參數:
4.請求參數:
| 名稱 | 類型 | 必填 |說明|
| -------- |:------:|: -----:|:--------:|
| goods_id | string | 是 |商品編號|
| page | string | 是 |頁碼|
5.返回欄位說明:
6.返回JSON實例
㈥ app移動介面開發需要注意什麼
1.制定規范
開發前一定要定好一個規范,比如要定好數據返回的通用參數和格式。關於數據格式,用的比較多的有xml和json,我建議用json,因為json比xml的好處更多。
2.精簡的返回數據
介面數據因符合需要什麼返回什麼的原則,比如要查詢某個用戶的余額和注冊時間,網頁禪洞裡面的做法可能是select * from user where uid=1,但是介面一定要select balance,regtime from user where uid=1。因為介面返回數據是要有開銷的,要流量的,能少返回數據就盡量少返回,這樣可以大大的提高性能。
3.數據類型要嚴格
要注意數據的類型,整數類型的數據一定要轉為int,因為app客戶端開發的java、object-c語言對數據類型比較嚴格,類型不對會照成app閃退。
4.要寫介面文檔
一定要寫好介面文檔,並按照模塊寫,而且還要書寫規范,最好的格式是:
介面請求地址;請求參數(包括參數名、類型、是否必填);測試參數舉例;返回參數(參數名,並註明每個參數的含義)。
這樣哪怕以後項目很大,以不會照成維護困難的問題。
5.保證代碼正確性
要驗證保證代碼正確無誤,而且生成環境中要屏蔽掉錯誤,避免頭部有額外的輸出,照成返回的json等數據解析失敗而導致app閃退等。
6.要優化代碼的性能
app要求響應迅速,這樣才能給用戶比較好的體驗感。所以移動介面端在處理業務邏輯的時候,要避免不要執行太復雜的sql語句,或者含有大量的循環,能做成緩存的盡量做頌檔緩存,比如將首頁的熱點模塊信息可以存到redis緩存中。在不考慮網速的情況下,比較理想的介面響應時間應該是200毫秒以內。
7.不要隨意更改舊介面
app不像網頁,app一旦發布,有人使用之後,介面就不要亂修改了。以後升級也是,修改要在保證介面原有結構之野襲亂上進行額外的擴展,否則會導致調用舊版介面的app出現bug。
8. 注意介面的安全
安全高於一切,必須要保證介面的安全。電話號碼等敏感信息在傳輸的過程中一定要加密,否則可能會被別人抓包到。拿取用戶信息的介面一定要驗證許可權,以防止介面被惡意調用,泄密用戶信息,甚至篡改信息。
以上只是一些基礎注意事項,真正要完成一個項目,得注意很多很多,其中的點點滴滴都需要謹慎對待,這些需要在開發中慢慢體會、總結。
㈦ android 管理介面地址
說到 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/*
㈧ 路由器上的介面怎麼配置IP地址實現全網互通
1.先給PC配置不同網段的IP地址;
2.配置路由器實現全網互通;
配置命令:
路由器AR1:
<Huawei>system-view 進入特權
[Huawei]interface GigabitEthernet 0/0/0 進入埠
[Huawei-GigabitEthernet0/0/0]ip address 192.168.1.254 24 配置ip及子網掩碼
[Huawei-GigabitEthernet0/0/0]undo shutdown 開啟埠
[Huawei-GigabitEthernet0/0/0]quit 退出到上一模式
[Huawei]interface GigabitEthernet 0/0/1 進入埠 進入埠
[Huawei-GigabitEthernet0/0/1]ip address 192.168.2.1 24 配置ip及子網掩碼
[Huawei-GigabitEthernet0/0/1]undo shutdown 開啟埠
[Huawei-GigabitEthernet0/0/0]quit 退出到上一模式
[Huawei]ip route-static 0.0.0.0 0.0.0.0 192.168.2.2 配置默認IP及下一跳地址
路由器AR2:
<Huawei>system-view 進入特權
[Huawei]interface GigabitEthernet 0/0/0 進入埠
[Huawei-GigabitEthernet0/0/0]ip address 192.168.2.2 24 配置ip及子網掩碼
[Huawei-GigabitEthernet0/0/0]un shutdown 開啟埠
[Huawei-GigabitEthernet0/0/0]quit 退出到上一模式
[Huawei]interface GigabitEthernet 0/0/1 進入埠
[Huawei-GigabitEthernet0/0/1]ip address 192.168.3.1 24 配置ip及子網掩碼
[Huawei-GigabitEthernet0/0/1]un shutdown 開啟埠
[Huawei-GigabitEthernet0/0/0]quit 退出到上一模式
[Huawei]ip route-static 192.168.1.0 255.255.255.0 192.168.2.1 配置默認IP及下一跳地址
[Huawei]ip route-static 192.168.4.0 255.255.255.0 192.168.3.2 配置默認IP及下一跳地址
路由器AR3:
<Huawei>system-view 進入特權
[Huawei]interface GigabitEthernet 0/0/0 進入埠
[Huawei-GigabitEthernet0/0/0]ip address 192.168.3.2 24 配置ip及子網掩碼
[Huawei-GigabitEthernet0/0/0]un shutdown 開啟埠
[Huawei-GigabitEthernet0/0/0]quit 退出到上一模式
[Huawei]interface GigabitEthernet 0/0/1 進入埠
[Huawei-GigabitEthernet0/0/1]ip address 192.168.4.254 255.255.255.0 配置ip及子網掩碼
[Huawei]ip route-static 0.0.0.0 0.0.0.0 192.168.3.1 配置默認IP及下一跳地址
[Huawei-GigabitEthernet0/0/1]un shutdown 開啟埠
驗證: