天天看點

基于ARM-contexA9-Linux驅動開發:如何擷取闆子上獨有的ID号

每個cpu,都有它固定的id号,id号就是這個cpu唯一的辨別,它可能隐含着cpu的生産日期,版本号,型号等等,那麼,在我們的這款友善之臂tiny4412的闆子上,我的這個cpu的id又是多少呢?從我在CD光牒裡拿到的linux-3.5核心其實已經将id相關的驅動開發好了,我們在核心啟動的過程中就可以看到闆子cpu的id:

    看下圖,我們看到cpu exynos4412 (id 0xe4412011)。這個就是我闆子上cpu的id号。其它跟我相同的闆子,雖然cpu也是相同的,但是闆子的id号會不一樣,不信可以試試

基于ARM-contexA9-Linux驅動開發:如何擷取闆子上獨有的ID号
基于ARM-contexA9-Linux驅動開發:如何擷取闆子上獨有的ID号

    那麼,現在我不加載linux-3.5這個核心上的id,我自己寫一個驅動程式來将這個id讀出來,能否實作?

    驗證結果:如果我寫的驅動程式讀出來的id和linux核心3.5啟動過程中的id:0xe4412011相同的話,那麼就證明我讀對了。

    好,我們來看看具體如何來實作這個驅動程式。

基于ARM-contexA9-Linux驅動開發:如何擷取闆子上獨有的ID号
基于ARM-contexA9-Linux驅動開發:如何擷取闆子上獨有的ID号

    還是一樣的,和以前的步驟相同,但是這裡的話就不用看電路圖了,因為id号是cpu内部的,我們隻需要去看手冊配置寄存器就可以得到相應的id号了。

     1、看手冊

基于ARM-contexA9-Linux驅動開發:如何擷取闆子上獨有的ID号
基于ARM-contexA9-Linux驅動開發:如何擷取闆子上獨有的ID号
基于ARM-contexA9-Linux驅動開發:如何擷取闆子上獨有的ID号

    從手冊上看到,大概的意思就是,如果要讀出cpu的id号,那麼就需要先把pro_id的實體位址映射為虛拟位址,然後再讀pro_id即可得到cpu的id号。

       接下來來看看驅動程式如何編寫:

2、編寫驅動程式

3、編寫測試程式

4、makefile(略)

5、編譯

基于ARM-contexA9-Linux驅動開發:如何擷取闆子上獨有的ID号

6、插入子產品,顯示子產品,檢視主裝置号,建立裝置節點(略)

7、運作結果:

基于ARM-contexA9-Linux驅動開發:如何擷取闆子上獨有的ID号

果然,讀出來的id号正是核心啟動時的id:cpu exynos4412 (id 0xe4412011) .

      驅動驗證成功!

基于ARM-contexA9-Linux驅動開發:如何擷取闆子上獨有的ID号

成功擷取闆子cpu_id号!

繼續閱讀