PIXNET Logo登入

傑克的下午茶

跳到主文

把手放在我手上,讓我帶妳找到一生的幸福

部落格全站分類:生活綜合

  • 相簿
  • 部落格
  • 留言
  • 名片
  • 12月 02 週四 201011:04
  • DesireHD ROM移植HD2近況

Desire版核心移植HD2已全,大部分作者都換跑道改移植DHD rom,因為有原始的zImage所以移植很快,以下是GPC做的版本,功能差不多都OK只有點小頓。








(繼續閱讀...)
文章標籤

傑克鼠 發表在 痞客邦 留言(2) 人氣(299)

  • 個人分類:系統開發經驗與心得
▲top
  • 10月 29 週五 201015:57
  • ActiveX開發:錯誤代碼:0x80070002

開發ActiveX時候,原本程式執行好好的,註冊OCX/反註冊OCX都很正常,當照著MSDN步驟進行安全碼加註後,每次返註冊OCX都會出現DllUnregisterServer函數出錯,錯誤代碼:0x80070002 可能不敢相信,但以下是MSDN程式碼: STDAPI DllUnregisterServer(void)
{
   HRESULT hr; // HResult used by Safety Functions
   AFX_MANAGE_STATE(_afxModuleAddrThis);
   if (!AfxOleUnregisterTypeLib(_tlid))
      return ResultFromScode(SELFREG_E_TYPELIB);
   if (!COleObjectFactoryEx::UpdateRegistryAll(FALSE))
      return ResultFromScode(SELFREG_E_CLASS);
   // Remove entries from the registry.
   hr=UnRegisterCLSIDInCategory(CLSID_SafeItem, CATID_SafeForInitializing);
  if (FAILED(hr)) return hr;
   hr=UnRegisterCLSIDInCategory(CLSID_SafeItem, CATID_SafeForScripting);
   if (FAILED(hr)) return hr;
  return NOERROR;
}
(繼續閱讀...)
文章標籤

傑克鼠 發表在 痞客邦 留言(0) 人氣(790)

  • 個人分類:系統開發經驗與心得
▲top
  • 7月 27 週二 201006:11
  • Linux Driver基礎篇-編譯與掛載

先前介紹了一個簡單的字元範例,這個範例不需要任何硬體線路單純只使用printk函數輸出,一個標準的HELLO WORLD程式。那建立完範本該如何編譯? 如何掛載? 如何使用? 往後一一講解。 首先我的開發環境是使用ubuntu,核心版本是2.6.24,PC環境基本上用哪個版本的套件對以下步驟無多大影響,在這先以PC環境為主,往後在介紹ARM的cross compiler。而我們開發的是linux driver,因此編譯的時候linux核心src是不能缺少,所編譯的driver版本與核心版本必須是近似甚至相同的,反則會面臨雖然編譯程公卻無法掛載的命運,所幸PC環境上的套件都會有src,因此這部分無需擔心。 現在先將先開啟一新的資料夾,並將先前介紹的範本檔案建立存入該資料夾中。在開一個新檔案叫Makefile,對linux開發不熟的可能對此檔不清楚,這是make編譯程式的批次檔,方便開發使用,該檔案內容如下:TARGET=demo
KDIR:=/lib/modules/$(shell uname -r)/build
PWD:=$(shell pwd)
obj-m:=$(TARGET).o
default:
make -C $(KDIR) M=$(PWD) modules
clean:
rm -rf *.o *.ko modules.* Modules.* *.mod.c
(繼續閱讀...)
文章標籤

傑克鼠 發表在 痞客邦 留言(1) 人氣(8,305)

  • 個人分類:系統開發經驗與心得
▲top
  • 7月 26 週一 201011:52
  • Linux Driver 字元型基礎篇




1. 引入標頭檔

在撰寫 driver 前必須先 include 一些標頭檔:


#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/fs.h>

2. 撰寫控制元件的函式

struct file_operations 即為定義各個 function pointer 的 structure。


static ssize_t drv_read(struct file *filp, char *buf, size_t count, loff_t *ppos)
{
printk("device read\n");
return count;
}
static ssize_t drv_write(struct file *filp, const char *buf, size_t count, loff_t *ppos)
{
printk("device write\n");
return count;
}
static int drv_open(struct inode *inode, struct file *filp)
{
printk("device open\n");
return 0;
}
int drv_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg)
{
printk("device ioctl\n");
return 0;
}
static int drv_release(struct inode *inode, struct file *filp)
{
printk("device close\n");
return 0;
}
struct file_operations drv_fops =
{
read: drv_read,
write: drv_write,
ioctl: drv_ioctl,
open: drv_open,
release: drv_release,
};

3. 撰寫初始化、結束元件的函式
#define MAJOR_NUM 60
#define MODULE_NAME "DEMO"
static int demo_init(void) {
if (register_chrdev(MAJOR_NUM, "demo", &drv_fops) < 0) {
printk("<1>%s: can't get major %d\n", MODULE_NAME, MAJOR_NUM);
return (-EBUSY);
}
printk("<1>%s: started\n", MODULE_NAME);
return 0;
}
static void demo_exit(void) {
unregister_chrdev(MAJOR_NUM, "demo");
printk("<1>%s: removed\n", MODULE_NAME);
}
module_init(demo_init);
module_exit(demo_exit);

其中 MAJOR_NUM 即為 driver 所對應的 device 的 major number




(繼續閱讀...)
文章標籤

傑克鼠 發表在 痞客邦 留言(0) 人氣(1,328)

  • 個人分類:系統開發經驗與心得
▲top
  • 7月 12 週一 201011:05
  • 軀動程式開發

軀動程式本身是屬於「軟體硬介面」的程式設計技術,不管是學習WinCE或是Embedded Linux,最精彩的部份絕對是驅動程式莫屬。由於嵌入式系統整體來看,除了軟體開發外,也包含硬體的客制化,因此驅動程式在嵌入式系統技術領域中,佔了舉足輕重的地位。

學習驅動程式需要確實瞭解硬體的規格與微處理器架構,並且工程師還要能分得清楚哪些東西是介面(interfacing)也就是與硬體無關的程式(machine-independent);以及哪些是站在第一線做硬體控制的程式(machine-dependent)。各種軟體硬介面與滙流排也都要精通。

 

現在的嵌入式系統學習主軸

現今嵌入式系統的實作,幾乎都會加入嵌入式作業系統(embedded OS)的元素,有了作業系統,我們都可以為目標裝置「寫軟體」。總合來看,如果要學習所謂的嵌入式系統,從熱門的WinCE或Embedded Linux領域切入是相當不錯的選擇。

驅動程式是「寫軟體」與「做硬體」的 “connectivity”,因此現今資訊業界最熱門的嵌入式系統學習主軸為驅動程式的設計。

 

WinCE驅動程式

WinCE驅動程式的核心人物當然就是在WDM(Windows Driver Model)身上了。WDM是Windows 98/2000之後的驅動程式架構,WDM是一個嚴密的分層(layered)架構,架構層間以IRPs(I/O Request Packets)做通訊。

WDM驅動程式分為三種類型:bus driver、function driver與filter driver。Bus driver是device-independent的驅動程式,主要在驅動I/O bus,例如:PCI bus driver、USB bus driver;function driver是 “device” 的驅動程式,我們常講的「驅動程式設計」大部份都是講 function driver,function driver 主要在驅動各種裝置,因此大多是由裝置廠造商撰寫並提供給使用者安裝,function driver 的設計大多著墨在「讀/寫」外部裝置。Filter driver是非必要的驅動程式,主要在過瀘 I/O requests。

WDM驅動程式的設計是使用Windows DDK,學習資源豐富並且完整;相較於Linux驅動程式,WDM驅動程式的學習材料較系統化。

 

Linux驅動程式

Linux驅動程式採取嚴謹的分層式架構設計(layered architecture),利用分層的架構設計來徹底區分generic device driver(machine independent)與machine dependent driver。

Linux驅動程式採用分層架構的觀念設計,透過「註冊」與「回呼」的機制來清楚地區分每一層的關係。分層架構的實作必須在下層將自己註冊給上層,上層再回呼下層;上層的驅動程式必須提供註冊函數供下層呼叫,下層驅動程式所使用的註冊函數也將決定自己的上層架構。

與 user application 如何互動,是撰寫驅動程式時所要考慮的重要一環,因此在撰寫驅動程式時,要提供什麼「功能」給應用程式引用,就必須事先定義清楚。Linux的generic device driver層已經幫我們把這些功能定義清楚了。Linux驅動程式如何透過 I/O port 或 I/O memory來控制裝置,也就是與晶片組的溝通,方式是使用 Linux kernel 所提供的I/O函數來存取並控制實體硬體裝置。

Linux驅動程式的學習困難度較高,並且也沒有像是Windows DDK這樣的完整開發工具;但是若能掌握正確的學習步驟,要邁向高手之路並非遙不可及。

 

-- 作者/陳俊宏 (jollen)
原文刊載於 Run! PC 雜誌 8 月號
歡迎任意轉貼引用.但請務必註明出處

(繼續閱讀...)
文章標籤

傑克鼠 發表在 痞客邦 留言(0) 人氣(2,712)

  • 個人分類:系統開發經驗與心得
▲top
  • 6月 16 週二 200909:52
  • LINQ to SQL

說道.Net Framework 3.5最強的新功能,莫過於LINQ了,它簡化了更多資料處理的指令,讓設計者有更多的時間關注在系統核心,其中,最不可思議的莫過於LINQ to SQL這部份,方便的感動如同小弟當年乍見的Typed DataSet,LINQ to SQL更直覺的解決資料庫的操作,底下有幾部影片範例,無須多言,看完就能知道他的強大。

http://www.asp.net/learn/linq-videos/
Part 1: Introduction to LINQ to SQL
Part 2: Defining our Data Model Classes
Part 3: Querying our Database
Part 4: Updating our Database
Part 5: Binding UI using the ASP:LinqDataSource Control
Part 6: Retrieving Data Using Stored Procedures
Part 7: Updating our Database using Stored Procedures
Part 8: Executing Custom SQL Expressions
Part 9 - Using a Custom LINQ Expression with the <asp:LinqDatasource> control
(繼續閱讀...)
文章標籤

傑克鼠 發表在 痞客邦 留言(0) 人氣(940)

  • 個人分類:系統開發經驗與心得
▲top
  • 6月 05 週五 200914:33
  • RTX51 Tiny的任務切換

RTX51 Tiny是基於Timesharing的RTOS,與系統中斷不同,它以非搶佔式的任務切換。所以在一個任務被執行時不能對其進行中斷,除非該任務主動放棄CPU的資源,中斷才可以打斷當前的任務,中斷完成後把CPU的控制權再交還該被中斷的任務。任務切換有兩種情況,一種是當前任務主動讓出CPU資源;另一種情況是在當前任務的時間片已經用完的情況下,進行任務切換。CPU執行時間被分成若干個時間片,RTX51 TINY為每個任務分配一個時間片。時間片是通過對變量INT_CLOCK與TIMESHARING兩個參數的設置來確定的。系統內定INT_CLOCK為10000、TIMESHARING為5,如果晶振頻率為11.059 2 MHz,則最大的時間片為(1/11.0592Mhz)×10000×5=4.52ms。
RTX51 TINY的任務切換共有 TASKSWITCHING 和SWITCHINGNOW兩個入口,前者供定時器Timer0的中斷服務程序,後者供系統函數os_delete和os_wait使用。相應地也有兩個不同的出口,分別是恢復保護現場和清除狀態標誌位。系統首先將當前任務置為「TIMEOUT」狀態,等待下一次時間片循環,然後找到下一個處於「READY」狀態的任務,通過堆棧管理,將自由堆棧空間分配給該任務,使其成為當前任務。清除使該任務進入「READY」或「TIMEOUT」狀態的相關位後,執行該任務。
(繼續閱讀...)
文章標籤

傑克鼠 發表在 痞客邦 留言(2) 人氣(1,031)

  • 個人分類:系統開發經驗與心得
▲top
  • 10月 09 週四 200820:00
  • [WinCE]將FTPD帳號密碼

前篇簡單說明如何啟動WinCE上的FTPD功能,當然前提是必須在Platform Builder就已加入FTPD功能。但前所提的方式是以匿名方式存取WinCE FTPD,在獨立網域系統內這是最簡單便捷的方式,但若在開放網路環境下這方法就十分不保險,任何有心人士都能輕易找到這個匿名節點,所以至少要設專用的帳號密碼,以下說明如何讓WinCE FTPD具有登入特定帳號的功能。 Private Sub SetFTPD(byVal User as string, ByVal Password as string )      NTLMSetUserInfo(User , Password )      Dim strKeyName As String = "HKEY_LOCAL_MACHINE\Comm\FTPD"      Microsoft.Win32.Registry.SetValue(strKeyName, "AllowAnonymousUpload", 0)      Microsoft.Win32.Registry.SetValue(strKeyName, "AllowAnonymous", 0)
(繼續閱讀...)
文章標籤

傑克鼠 發表在 痞客邦 留言(0) 人氣(708)

  • 個人分類:系統開發經驗與心得
▲top
  • 10月 08 週三 200817:39
  • 啟動FTPD in WinCE

WinCE內建有簡單的FTPD服務,內定是關閉的,可透過修改註冊表將之開啟: [HKEY_LOCAL_MACHINE\Comm\FTPD]
    "IsEnabled"=dword:1
    "UseAuthentication"=dword:1
    "AllowAnonymous"=dword:1
    "AllowAnonymousUpload"=dword:1
    "DefaultDir"="\\temp"
(繼續閱讀...)
文章標籤

傑克鼠 發表在 痞客邦 留言(0) 人氣(741)

  • 個人分類:系統開發經驗與心得
▲top
  • 10月 03 週五 200810:53
  • 變更網路卡IP for WinCE

想要用程式來變更WinCE的網路卡IP,微軟可能認為嵌入式系統的網卡IP在設備安裝後就不會更動,原因未知,但就是未提供方便API方便修改,因此想要更改IP就必須從修改Registry註冊表下手。
首先,要修改網卡IP就必須先知道網卡資訊在註冊表的位置與CreateFile時需要用的設備名稱。對於「設備名稱」,若系統只有單一網卡通常都會是"NDS0:",若是多張網卡就要找該網卡的Index了,沒錯,就是到BuiltIn區找驅動程式的設定,到下面位置取得下列兩參數:
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\網卡名稱]
   "Prefix"="NDS" 
   "InstanceIndex"=dword:1 
(繼續閱讀...)
文章標籤

傑克鼠 發表在 痞客邦 留言(4) 人氣(3,561)

  • 個人分類:系統開發經驗與心得
▲top
123»

參觀人氣

  • 本日人氣:
  • 累積人氣:

熱門文章

  • (9,276)組語基礎篇-Lea與Mov
  • (20,979)遭遇0xC0000005錯誤

文章分類

  • 雲端技術 (2)
  • Android (4)
  • 系統開發經驗與心得 (26)
  • 心靈補帖 (14)
  • 休閒與攝影 (26)
  • 生活手紀 (65)
  • 未分類文章 (1)

近期文章

  • DesireHD ROM移植HD2近況
  • 移植MySQL to ARM
  • 在.NET使用ActiveX控制項
  • 超重要~民國100年請休假建議
  • ActiveX開發:錯誤代碼:0x80070002
  • [錄影]小英吉他社練習
  • 肌肉的興奮劑:肌酸
  • 蛋白質補充
  • Linux Driver基礎篇-編譯與掛載
  • Linux Driver 字元型基礎篇

Google Analytics