; // 0 代表 reset 設備id,id是自定義的,但是不能超過 reset 驅動中指定的設備個數 ......}; 驅動編寫" />

在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Linux內核reset驅動實例

麥辣雞腿堡 ? 來源:嵌入式Linux充電站 ? 作者:Vincent ? 2023-09-27 14:21 ? 次閱讀

reset驅動實例

類似于clock驅動,reset驅動也是編進內核的,在Linux啟動時,完成reset驅動的加載。

設備樹

reset:reset-controller{
 compatible = "xx,xx-reset";
 reg = < 0x0 0xc0000000 0x0 0x1000 >;
 #reset-cells = < 1 >;
};

上述是一個reset控制器的節點,0xc0000000是寄存器基址,0x1000是映射大小。#reset-cells代表引用該reset時需要的cells個數。

例如,#reset-cells = <1>; 則正確引用為:

mmc:mmc@0x12345678{
    ......
    resets = < &reset  0 >;//0代表reset設備id,id是自定義的,但是不能超過reset驅動中指定的設備個數
    ......
};

驅動編寫

reset驅動編寫的基本步驟:

1、實現struct reset_control_ops結構體中的.reset、.assert、.deassert、.status函數

2、分配struct reset_controller_dev結構體,填充opsowner、nr_resets等成員內容

3、調用reset_controller_register函數注冊reset設備

以下是從實際項目中分離出來的reset驅動代碼:

#include < linux/of.h >
#include < linux/module.h >
#include < linux/of_device.h >
#include < linux/reset-controller.h >
#include < linux/io.h >
#include < linux/delay.h >

// 自定義芯片廠的結構體,保存寄存器基址等信息
struct xx_reset{
 struct reset_controller_dev rcdev;
 void __iomem *base;
    //......
};


static int xx_reset(struct reset_controller_dev *rcdev, unsigned long id)
{
 //操作寄存器:先復位,延遲一會,然后解復位
 return 0;
}

static int xx_reset_assert(struct reset_controller_dev *rcdev, unsigned long id)
{
 //操作寄存器:復位
 return 0;
}

static int xx_reset_deassert(struct reset_controller_dev *rcdev, unsigned long id)
{
 //操作寄存器:解復位
 return  0;
}

static int xx_reset_status(struct reset_controller_dev *rcdev, unsigned long id)
{
 //操作寄存器:獲取復位狀態
 return 0; 
}

static struct reset_control_ops xx_reset_ops = {
 .rest = xx_rest,
 .assert = xx_reset_asser,
 .deassert = xx_reset_deassert,
 .status = xx_rest_status,
};

static int xx_reset_probe(struct platform_device *pdev)
{
 struct xx_reset *xx_reset;
 struct resource *res;
 
 xx_reset = devm_kzalloc(&pdev- >dev, sizeof(*xx_reset), GFP_KERNEL);
 if (!xx_reset)
  return -ENOMEM;

 platform_set_drvdata(pdev, xx_reset);

 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 xx_reset- >base = devm_ioremap_resource(&pdev- >dev, res);//映射寄存器基址
 if (IS_ERR(xx_reset- >base))
  return PTR_ERR(xx_reset- >base);

 xx_reset- >rcdev.ops = &xx_reset_ops;//reset_ops操作函數集合
 xx_reset- >rcdev.owner = THIS_MODULE;
 xx_reset- >rcdev.of_node = pdev- >dev.of_node;
 xx_reset- >rcdev.of_reset_n_cells = 1;  
 xx_reset- >rcdev.nr_resets = BITS_PER_LONG;//reset設備個數

 return reset_controller_register(&xx_reset- >rcdev);//注冊reset controller
 
}


static int xx_reset_remove(struct platform_device *pdev)
{
 struct xx_reste *xx_reset = platform_get_drvdata(pdev);
 
 reset_controller_unregister(&xx_reset- >rcdev);
 return 0;
}

static const struct of_device_id ak_reset_of_match[]={
 {.compatible = "xx,xx-reset"},
 {},
};

MODULE_DEVICE_TABLE(of, xx_reset_of_match);

static struct platform_driver xx_reset_driver = {
 .probe = xx_reset_probe,
 .remove = xx_reset_remove,
 .driver = {
  .name = "xx-reset",
  .of_match_table = ak_reset_of_match,
 },
};


module_platorm_driver(xx_reset_driver);

MODULE_LICENSE("GPL");
MODULE_DESCPRIPTION("xx reset controller driver");
MODULE_AUTHOR("xx Microelectronic");
MODULE_VERSION("v1.0.00");
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 內核
    +關注

    關注

    3

    文章

    1412

    瀏覽量

    41187
  • 驅動
    +關注

    關注

    12

    文章

    1908

    瀏覽量

    86644
  • Linux
    +關注

    關注

    87

    文章

    11479

    瀏覽量

    213065
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    Linux clock子系統及驅動實例

    Linux驅動中,操作時鐘只需要簡單調用內核提供的通用接口即可,clock驅動通常是由芯片廠商開發的,在Linux啟動時clock
    發表于 05-31 16:10 ?1135次閱讀
    <b class='flag-5'>Linux</b> clock子系統及<b class='flag-5'>驅動</b><b class='flag-5'>實例</b>

    Linux reset子系統及驅動實例

    上篇講了Linux clock驅動,今天說說Linuxreset驅動。
    發表于 05-31 16:16 ?1478次閱讀
    <b class='flag-5'>Linux</b> <b class='flag-5'>reset</b>子系統及<b class='flag-5'>驅動</b><b class='flag-5'>實例</b>

    Linux內核空間設備驅動程序的開發

    本文詳細介紹了Linux平臺下內核空間設備驅動程序的開發。在比較proc和dev兩種文件系統的基礎上,分別以PCI設備和USB設備的驅動程序開發為
    發表于 08-19 08:44 ?18次下載

    LINUX內核驅動第三版(中文)

    LINUX內核驅動第三版(中文)
    發表于 03-11 09:18 ?0次下載

    Android的Linux內核驅動程序開發教程

    Android內核是基于Linux 2.6內核的,它是一個增強內核版本,除了修改部分Bug外,它提供了用于支持Android平臺的設備驅動,
    發表于 09-05 14:24 ?335次下載
    Android的<b class='flag-5'>Linux</b><b class='flag-5'>內核</b>與<b class='flag-5'>驅動</b>程序開發教程

    基于Linux內核輸入子系統的驅動研究

    Linux因其完全開放的特性和穩定優良的性能深受歡迎,當推出了內核輸入子系統后,更方便了嵌入式領域的驅動開放。介紹了Linux的設備驅動基礎
    發表于 09-12 16:38 ?23次下載

    linux內核驅動第三版

    電子發燒友網站提供《linux內核驅動第三版.txt》資料免費下載
    發表于 04-04 23:40 ?0次下載

    linux2.6內核設備驅動模型精華

    linux 內核驅動部分詳解
    發表于 04-27 10:43 ?20次下載

    Linux設備驅動開發詳解》第4章、Linux內核模塊

    Linux設備驅動開發詳解》第4章、Linux內核模塊
    發表于 10-27 14:15 ?0次下載
    《<b class='flag-5'>Linux</b>設備<b class='flag-5'>驅動</b>開發詳解》第4章、<b class='flag-5'>Linux</b><b class='flag-5'>內核</b>模塊

    Linux內核輸入子系統的驅動研究

    Linux內核輸入子系統的驅動研究
    發表于 10-31 14:41 ?14次下載
    <b class='flag-5'>Linux</b><b class='flag-5'>內核</b>輸入子系統的<b class='flag-5'>驅動</b>研究

    基于Linux與Busybox的Reboot命令流程分析

    busybox是如何運行這個命令,同時又是如何調用到Linux內核中的mach_reset中的arch_reset,當針對不同的ARM芯片時,作為L
    發表于 05-05 14:31 ?2680次閱讀
    基于<b class='flag-5'>Linux</b>與Busybox的Reboot命令流程分析

    如何使用Linux內核實現USB驅動程序框架

    Linux內核提供了完整的USB驅動程序框架。USB總線采用樹形結構,在一條總線上只能有唯一的主機設備。 Linux內核從主機和設備兩個角度
    發表于 11-06 17:59 ?20次下載
    如何使用<b class='flag-5'>Linux</b><b class='flag-5'>內核</b>實現USB<b class='flag-5'>驅動</b>程序框架

    Linux內核代碼60%都是驅動

    為什么Linux內核代碼60%都是驅動? 如果每支持新的設備就加入驅動內核會不會變得越來越臃腫?
    的頭像 發表于 07-11 11:48 ?1320次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內核</b>代碼60%都是<b class='flag-5'>驅動</b>?

    Linux reset子系統有什么功能

    Linux reset子系統 reset子系統非常簡單,與clock子系統非常類似,但在驅動實現上,reset
    的頭像 發表于 09-27 14:06 ?1017次閱讀
    <b class='flag-5'>Linux</b> <b class='flag-5'>reset</b>子系統有什么功能

    linux驅動程序如何加載進內核

    Linux系統中,驅動程序是內核與硬件設備之間的橋梁。它們允許內核與硬件設備進行通信,從而實現對硬件設備的控制和管理。 驅動程序的編寫
    的頭像 發表于 08-30 15:02 ?1030次閱讀
    主站蜘蛛池模板: 日本三黄色大 | 天天操天天操 | 天天天天干 | 女人18毛片水多 | 日本污视频在线观看 | 国产欧美日韩视频免费61794 | 日日夜夜天天干 | 欧美在线视频免费 | 免费在线h视频 | 美女天天操| 亚洲乱亚洲乱妇41p国产成人 | 亚洲视频一区二区三区 | 国产va精品免费观看 | 欧美成人26uuu欧美毛片 | 免费四虎永久在线精品 | 福利视频午夜 | 婷婷四房播客五月天 | 欧美视频精品一区二区三区 | 正在播放国产女免费 | 亚洲乱亚洲乱妇41p 亚洲乱亚洲乱妇41p国产成人 | 日本三级成人中文字幕乱码 | 奇米影视7777 | 永久免费看黄 | 欧美亚洲综合一区 | 视频在线观看高清免费大全 | 我把美女日出白浆 | 国产资源在线免费观看 | 国产精欧美一区二区三区 | 激情综合丁香 | 日本久操视频 | 五月亭亭免费高清在线 | 啪啪调教所29下拉式免费阅读 | 亚洲 另类色区 欧美日韩 | 成年人午夜影院 | 曰本又色又爽又黄三级视频 | 午夜看片在线 | 美女视频黄a视频免费全过程 | 激情五月宗合网 | 亚洲产国偷v产偷v自拍色戒 | 色多多www网站 | 日日操日日爽 |