在这里记录自己的嵌入式学习方向和成果,只做大方向的规划,目前学习规划如下:
√ linux基础学习
√ arm裸机开发(使用正点原子IMX6ULL的板子)
√ linux的系统移植
√ Linux核心驱动开发
√ qt
√ linuxc应用编程
【doing】linux内核源码分析(主要通过以下两本书并结合linux源码进行学习):
- linux内核设计与实现(在看)
- 深入理解linux内核
pbuf 结构体:
1 | struct pbuf { |
armv8中,执行发生在4个异常级别之一,在aarch64中,异常级别决定了特权级别,类似于armv7中定义的特权级别,异常级别决定特权级别,因此在Eln执行对于特权Pln。类似地,具有比另一个更大的n值的异常级别处于更高的异常级别,一个数字比另一个小的异常级别被描述为处于较低的异常级别。
Linux驱动开发和裸机开发的区别**
Uboot是一个裸机程序,比较复杂,就是一个bootloader。作用就是用于启动Linux或其他系统,Uboot最主要的工作就是初始化DDR(Linux的运行是运行在DDR里面的),一般linux镜像zimage(uimage)+设备树(.dtb)存放在SD,EMMC,NAND,SPI FLASH等等外置存储区域。
I.MAX6ULL IO初始化流程
ARMv8(aarch64)页表建立过程详细分析_aarch64 页表-CSDN博客
【原创】(一)ARMv8 MMU及Linux页表映射 - LoyenWang - 博客园
ARMv8架构可以支持48位虚拟地址,并配置成4级页表(4K页),或者3级页表(64K页)。而本Linux系统只使用39位虚拟地址(512G内核,512G用户),配置成3级页表(4K页)或者2级页表(64K页)
用户空间的地址63:39位都置零,内核空间地址63:39都置一,虚拟地址的第63位可以用来选择TTBRx
AArch64Linux内存布局:
地址范围开始 | 地址范围结束 | 大小 | 用途 |
---|---|---|---|
0000000000000000 | 0000007fffffffff | 512GB | 用户空间 |
ffffff8000000000 | ffffffbbfffcffff | ~240GB | vmalloc区域 |
ffffffbbfffd0000 | ffffffbcfffdffff | 64KB | 守护页 |
ffffffbbfffe0000 | ffffffbcfffeffff | 64KB | PCI I/O空间 |
ffffffbbffff0000 | ffffffbcffffffff | 64KB | 守护页 |
ffffffbc00000000 | ffffffbdffffffff | 8GB | vmemmap区域 |
ffffffbe00000000 | ffffffbffbffffff | ~8GB | 守护页和未来vmemmap区域 |
ffffffbffc000000 | ffffffbfffffffff | 64MB | 模块区域 |
ffffffc000000000 | ffffffffffffffff | 256GB | 内存(保留或未分配) |
网络的数据传输时靠MII,常用的MII mode如下:
MII接口:
表中信号方向针对PHY芯片来说,I表示输入,O表示输出:
信号 | 方向 | 位宽 | 含义 |
---|---|---|---|
RX_CLK | O | 1 | 发送时钟,PHY芯片产生,100Mbps时为25MHz,10Mbps时为 2.5MHz。 |
RX_DV | O | 1 | 高电平表示发送的数据有效。 |
RX_ER | O | 1 | 高电平表示发送数据的错误,接收端不接受该数据。 |
RX_D | O | 4 | 发送数据总线。 |
TX_CLK | O | 1 | 接收时钟,PHY芯片产生,频率与RX_CLK一致。 |
TX_EN | I | 1 | 高电平表示接收的数据有效。 |
TX_ER | I | 1 | 高电平表示接收的数据包有误,丢弃该数据包。 |
TX_D | I | 4 | 接收数据总线。 |
CRS | O | 1 | 载波侦测信号,不需要同步于参考时钟,有数据传输,CRS就有效,仅PHY在半双工模式下有效。 |
COL | O | 1 | 冲突检测信号,不需要同步于参考时钟,仅PHY在半双工模式下有效。 |
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true