想问一下linux底层的问题,不同的板卡是怎样和linux联系起来的?

别宥然后知 2019-05-19 12:39:50
BSP是可以扩展的吗?linux驱动编程是编写BSP吗? 假如已有一块电路板A和另一块新电路板B。B比A多了8个IO。那怎么才能让多出的这8个IO提现到linux中? 还有比如同样的物理上的IO,一个情形是用作普通IO,另一个情形是复用了串口。linux里怎么提现区别? Linux新人,表示把驱动编程、和系统编程都看了一部分。但是没get到我疑惑的点。一头雾水。 有没有大神能给指导一下,比如一块从来没有的线路板以及芯片,假如能移植linux。假如有一个PORT1,从linux做应用让它闪烁。如何自底向上一步步完成。能都给个大致的结构框架的说明?谢谢
...全文
404 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
john_liqinghan 2019-06-14
  • 打赏
  • 举报
回复
引用 9 楼 Ahefs 的回复:
[quote=引用 6 楼 john_liqinghan的回复:]MMU是个神奇的东西,楼主可以看一下,我们在linux上看到的内存都是虚拟内存,不是实际的物理地址。IO_ADDRESS等一些都需要移植的。但是X86是一样的。arm每个厂家都不一样。
是他直接管理的虚地址和实际物理地址吗? 改它就能直接改变输出到外围的信号吗?[/quote] IO_ADDRESS可以直接控制CPU的外设地址。IO属于CPU外设,可以设置的。
melo_fang 2019-06-13
  • 打赏
  • 举报
回复
引用 9 楼 Ahefs 的回复:
[quote=引用 6 楼 john_liqinghan的回复:]MMU是个神奇的东西,楼主可以看一下,我们在linux上看到的内存都是虚拟内存,不是实际的物理地址。IO_ADDRESS等一些都需要移植的。但是X86是一样的。arm每个厂家都不一样。

是他直接管理的虚地址和实际物理地址吗?
改它就能直接改变输出到外围的信号吗?[/quote]
理论上通过ioremap,是可以直接通过对CPU寄存器的读写来改变外围引脚的状态的,但是这样做危险性太大了。你既然在看的话,这部分应该是PINCTRL子系统的范畴,通过PINCTRL子系统来控制cpu的外围引脚,是驱动中的常见做法。再次就是GPIO子系统,直接通过GPIO核心来控制某个对应的GPIO引脚,这个也很常见。IOREMAP转出地址,直接读写,也就是真的遇到BUG了验证的时候回用一下
别宥然后知 2019-06-12
  • 打赏
  • 举报
回复
引用 7 楼 猪头三小队长的回复:
以PCIe设备为例,设备信息中都已经包含了本设备需要请求的地址空间大小,资源类型等信息。BIOS在初始化阶段会把所有PCIe设备信息汇总并分配底层资源,Linux内核起来之后读取BIOS中的配置并给设备分配Linux内核可识别的地址空间。至于设备的具体功能如何实现,那就是设备驱动要做的事了,Linux内核实现框架级的构造,细节需要设备商在遵循框架的基础上自己做。
我就是想了解一下细节这方面
别宥然后知 2019-06-12
  • 打赏
  • 举报
回复
引用 6 楼 john_liqinghan的回复:
MMU是个神奇的东西,楼主可以看一下,我们在linux上看到的内存都是虚拟内存,不是实际的物理地址。IO_ADDRESS等一些都需要移植的。但是X86是一样的。arm每个厂家都不一样。
是他直接管理的虚地址和实际物理地址吗? 改它就能直接改变输出到外围的信号吗?
猪头三小队长 2019-06-09
  • 打赏
  • 举报
回复
以PCIe设备为例,设备信息中都已经包含了本设备需要请求的地址空间大小,资源类型等信息。BIOS在初始化阶段会把所有PCIe设备信息汇总并分配底层资源,Linux内核起来之后读取BIOS中的配置并给设备分配Linux内核可识别的地址空间。至于设备的具体功能如何实现,那就是设备驱动要做的事了,Linux内核实现框架级的构造,细节需要设备商在遵循框架的基础上自己做。
john_liqinghan 2019-06-09
  • 打赏
  • 举报
回复
MMU是个神奇的东西,楼主可以看一下,我们在linux上看到的内存都是虚拟内存,不是实际的物理地址。IO_ADDRESS等一些都需要移植的。但是X86是一样的。arm每个厂家都不一样。
别宥然后知 2019-06-06
  • 打赏
  • 举报
回复
引用 1 楼 wq3028的回复:
linux 内核3.X版本之前是不同的硬件厂商有不通的代码去引导系统启动,bootloader种有配置信息,kernel起来之后会接管bootloader,这一切对应用层来说都是隐藏的,3.x之后引入了设备树,通过设备树文件来适配 其实也不用太疑惑,外设来讲硬件啊什么IO口串口什么总线对于开发人员来说就是一堆寄存器,就好像单片机一样,直接对这些寄存器进行读写就是操作外设总线,所谓的适配代码,其实也是适配这些寄存器,而要做的就是配置代码的起始地址,从nand flash起来还是emmc还是nor flash引导,这个和cpu系统配置(可能就是跳线帽,和单片机一样) 至于你说的一块新的板卡或者芯片,移植linux,其实原则来讲大厂都会在linux代码种添加自己芯片的底层适配代码,如果你想从零开始,那就把当作一个单片机来用吧,对某个寄存器配置,uboot也是如此,可以看下韦东山的那本书,有讲一些这个
那内核里是代码,是虚拟的。那怎么和外设的实际物理地址对应?我通过改地址映射的方式调整输出的引脚是可行的吗?
别宥然后知 2019-06-06
  • 打赏
  • 举报
回复
能都给说一下地址映射的东西。
JT同学 2019-06-04
  • 打赏
  • 举报
回复
1、多了8个IO,如果不使用的话不用管,如果要用做按键,led等,就需要编写驱动程序 2、从底向上实现led,需要做 uboot移植,内核移植,挂载根文件系统,编写led驱动程序,编写led应用程序
wq3028 2019-05-22
  • 打赏
  • 举报
回复
linux 内核3.X版本之前是不同的硬件厂商有不通的代码去引导系统启动,bootloader种有配置信息,kernel起来之后会接管bootloader,这一切对应用层来说都是隐藏的,3.x之后引入了设备树,通过设备树文件来适配 其实也不用太疑惑,外设来讲硬件啊什么IO口串口什么总线对于开发人员来说就是一堆寄存器,就好像单片机一样,直接对这些寄存器进行读写就是操作外设总线,所谓的适配代码,其实也是适配这些寄存器,而要做的就是配置代码的起始地址,从nand flash起来还是emmc还是nor flash引导,这个和cpu系统配置(可能就是跳线帽,和单片机一样) 至于你说的一块新的板卡或者芯片,移植linux,其实原则来讲大厂都会在linux代码种添加自己芯片的底层适配代码,如果你想从零开始,那就把当作一个单片机来用吧,对某个寄存器配置,uboot也是如此,可以看下韦东山的那本书,有讲一些这个
诺水城子 2019-05-22
  • 打赏
  • 举报
回复
板级配置文件中配置板子的IO资源

1,318

社区成员

发帖
与我相关
我的任务
社区描述
主要是开发驱动技术
社区管理员
  • 驱动程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧