【发布时间】:2019-07-11 14:55:26
【问题描述】:
我正在尝试为 DMA Linux 编写驱动程序, 我的驱动程序一直未能执行 dma_coherent_alloc, 我已经增加了 CMA 内存,以及 coherent_pool ...
我错过了什么?
dmesg
在物理 CPU 0x0 上启动 Linux
Linux 版本 4.14.0-xilinx-v2018.2 (oe-user@oe-host) (gcc 版本 7.2.0 (GCC)) #5 SMP PREEMPT Sun Feb 17 23:20:49 PST 2019
CPU:ARMv7 处理器 [413fc090] 修订版 0 (ARMv7),cr=18c5387d
CPU:PIPT/VIPT非别名数据缓存、VIPT别名指令缓存
OF: fdt: 机器型号: xlnx,zynq-7000
启动控制台 [earlycon0] 已启用
内存策略:数据缓存 writealloc
OF:fdt:保留内存:不支持的节点格式,忽略
cma: dma_contiguous_reserve(限制 ffffffff)
cma:dma_contiguous_reserve:为全局区域保留 60 MiB
cma:cma_declare_contiguous(大小0x03c00000,基数0x00000000,限制0xffffffff对齐0x00000000)
cma:在 0x3c400000 处保留 60 MiB
在节点 0 上,总页数:262144
free_area_init_node:节点 0,pgdat c183af40,node_mem_map ef7f7000
正常区域:1536 页用于 memmap
正常区域:保留 0 页
正常区域:196608 页,LIFO 批次:31
HighMem 区域:65536 页,LIFO 批次:15
percpu:嵌入式 16 页/cpu @ef7ce000 s34764 r8192 d22580 u65536
pcpu-alloc: s34764 r8192 d22580 u65536 alloc=16*4096
pcpu-alloc: [0] 0 [0] 1
建立 1 个区域列表,移动分组。总页数:260608
内核命令行:console=ttyPS0,115200 earlyprintk coherent_pool=32MiB
PID 哈希表条目:4096(顺序:2,16384 字节)
Dentry 缓存哈希表条目:131072(顺序:7,524288 字节)
Inode-cache 哈希表条目:65536(顺序:6,262144 字节)
内存:953428K/1048576K 可用(6144K 内核代码,238K rwdata,1568K rodata,15360K init,218K bss,33708K 保留,61440K cma-reserved,200704K highmem)
虚拟内核内存布局:
矢量:0xffff0000 - 0xffff1000 (4 kB)
修复图:0xffc00000 - 0xfff00000 (3072 kB)
vmalloc:0xf0800000 - 0xff800000(240 MB)
低内存:0xc0000000 - 0xf0000000(768 MB)
pkmap:0xbfe00000 - 0xc0000000 (2 MB)
模块:0xbf000000 - 0xbfe00000 (14 MB)
.text : 0xc0008000 - 0xc0700000 (7136 kB)
.init : 0xc0900000 - 0xc1800000 (15360 kB)
.data : 0xc1800000 - 0xc183bb40 ( 239 kB)
.bss : 0xc183bb40 - 0xc1872344 ( 219 kB)
抢占式分层 RCU 实现。
RCU 将 CPU 从 NR_CPUS=4 限制为 nr_cpu_ids=2。
任务 RCU 已启用。
RCU:为 rcu_fanout_leaf=16、nr_cpu_ids=2 调整几何结构
NR_IRQS: 16, nr_irqs: 16, 预分配 irqs: 16
efuse 映射到 f0802000
slcr 映射到 f0804000
L2C:平台修改辅助控制寄存器:0x72360000 -> 0x72760000
L2C:DT/平台修改辅助控制寄存器:0x72360000 -> 0x72760000
L2C-310 勘误表 769419 已启用
L2C-310 为 Cortex-A9 启用早期 BRESP
为 Cortex-A9 启用 L2C-310 全行零
L2C-310 ID 预取已启用,偏移 1 行
L2C-310 启用动态时钟门控,启用待机模式
启用 L2C-310 缓存控制器,8 路,512 kB
L2C-310:CACHE_ID 0x410000c8,AUX_CTRL 0x76760001
zynq_clock_init:clkc 从 f0804100 开始
Zynq 时钟初始化
sched_clock:64 位,249MHz,分辨率 4ns,每 4398046511102ns 换行
时钟源:arm_global_timer:掩码:0xffffffffffffffff max_cycles:0x7350b89c29,max_idle_ns:881590431910 ns
切换到基于定时器的延迟循环,分辨率 4ns
时钟源:ttc_clocksource:掩码:0xffff max_cycles:0xffff,max_idle_ns:716713566 ns
定时器 #0 在 f080c000,irq=17
控制台:彩色虚拟设备 80x30
校准延迟循环(已跳过),使用定时器频率计算的值.. 499.99 BogoMIPS (lpj=2499999)
pid_max:默认值:32768 最小值:301
挂载缓存哈希表条目:2048(顺序:1,8192 字节)
Mountpoint-cache 哈希表条目:2048(顺序:1,8192 字节)
CPU:测试写入缓冲区的一致性:好的
CPU0:线程-1,cpu 0,socket 0,mpidr 80000000
为 0x100000 - 0x100060 设置静态身份映射
分层 SRCU 实施。
smp:启动辅助 CPU ...
CPU1:线程-1,cpu 1,socket 0,mpidr 80000001
smp: 提出 1 个节点,2 个 CPU
SMP:总共激活了 2 个处理器 (999.99 BogoMIPS)。
CPU:所有 CPU 均以 SVC 模式启动。
devtmpfs:已初始化
随机:从 bucket_table_alloc+0x1c4/0x204 调用 get_random_u32,crng_init=0
VFP 支持 v0.3:实施者 41 架构 3 第 30 部分变体 9 修订版 4
DMA-API:预分配 4096 个调试条目
DMA-API:内核配置启用调试
时钟源:jiffies:掩码:0xffffffff max_cycles:0xffffffff,max_idle_ns:19112604462750000 ns
futex 哈希表条目:512(顺序:3,32768 字节)
pinctrl 核心:初始化 pinctrl 子系统
随机:快速初始化完成
NET:已注册协议族 16
cma: cma_alloc(cma c184d3e0, count 8192, align 8)
cma: cma_alloc(): 返回 eff7f000
DMA:为原子连贯分配预分配 32768 KiB 池
cpuidle:使用调速器菜单
硬件断点:找到 5 个(+1 保留)断点和 1 个观察点寄存器。
硬件断点:最大观察点大小为 4 个字节。
zynq-ocm f800c000.ocmc:ZYNQ OCM 池:256 KiB @ 0xf2840000
zynq-pinctrl 700.pinctrl: zynq pinctrl 已初始化
e0001000.serial: ttyPS0 at MMIO 0xe0001000 (irq = 28, base_baud = 6249999) 是 xuartps
控制台 [ttyPS0] 已启用
引导控制台 [earlycon0] 已禁用
vgaarb:已加载
SCSI 子系统已初始化
usbcore:注册了新的接口驱动usbfs
usbcore:注册新接口驱动集线器
usbcore:注册了新的设备驱动usb
媒体:Linux 媒体界面:v0.10
Linux视频采集接口:v2.00
pps_core:LinuxPPS API 版本。 1 个已注册
pps_core:软件版本。 5.3.6 - 版权所有 2005-2007 Rodolfo Giometti
已注册 PTP 时钟支持
EDAC MC:版本:3.0.0
FPGA 管理器框架
fpga-region fpga-full:探测的 FPGA 区域
高级 Linux 声音架构驱动程序已初始化。
时钟源:切换到时钟源 arm_global_timer
NET:注册协议族 2
TCP建立的哈希表条目:8192(顺序:3,32768字节)
TCP 绑定哈希表条目:8192(顺序:4,65536 字节)
TCP:已配置哈希表(已建立 8192 绑定 8192)
UDP 哈希表条目:512(顺序:2,16384 字节)
UDP-Lite 哈希表条目:512(顺序:2,16384 字节)
NET:注册协议族 1
RPC:已注册命名的 UNIX 套接字传输模块。
RPC:已注册的 udp 传输模块。
RPC:已注册的 tcp 传输模块。
RPC:已注册 tcp NFSv4.1 反向通道传输模块。
PCI:CLS 0 字节,默认 64
硬件性能事件:/pmu@f8891000 没有中断关联属性,猜测。
hw perfevents:使用 armv7_cortex_a9 PMU 驱动程序启用,7 个计数器可用
工作集:timestamp_bits=30 max_order=18 bucket_order=0
jffs2:2.2 版。 (NAND) (摘要) © 2001-2006 Red Hat, Inc.
反弹:池大小:64 页
io 调度程序 noop 已注册
已注册 io 调度程序截止日期
io scheduler cfq 已注册(默认)
io 调度程序 mq-deadline 已注册
io 调度程序 kyber 已注册
cma: cma_alloc(cma c184d3e0, count 1, align 0)
cma: cma_alloc(): 返回 effbf000
dma-pl330 f8003000.dmac:为 PL330 DMAC-241330 加载驱动程序
dma-pl330 f8003000.dmac: DBUFF-128x8bytes Num_Chans-8 Num_Peri-4 Num_Events-16
brd:已加载模块
循环:模块已加载
m25p80 spi0.0:找到 s25fl128s,预期为 n25q512a
m25p80 spi0.0: s25fl128s (16384 KB)
在 MTD 设备 spi0.0 上找到 4 个 ofpart 分区
在“spi0.0”上创建 4 个 MTD 分区:
0x000000000000-0x000000500000:“启动”
0x000000500000-0x000000520000:“bootenv”
0x000000520000-0x000000fa0000:“内核”
0x000000fa0000-0x000001000000:“备用”
libphy:固定 MDIO 总线:已探测
CAN设备驱动接口
libphy:MACB_mii_bus:探测
cma: cma_alloc(cma c184d3e0, count 1, align 0)
cma: cma_alloc(): 返回 effbf020
mmc0:e0100000.sdhci [e0100000.sdhci] 上的 SDHCI 控制器使用 ADMA
ledtrig-cpu:注册以指示 CPU 上的活动
usbcore:注册了新的接口驱动usbhid
usbhid:USB HID 核心驱动程序
fpga_manager fpga0:Xilinx Zynq FPGA 管理器已注册
NET:注册协议族 10
释放未使用的内核内存:15360K
udevd[758]:开始版本 3.2.2
udevd[759]:启动 eudev-3.2.2
cma: cma_alloc(cma c184d3e0, count 1, align 0)
cma: cma_alloc(): 返回 effbf040
cma: cma_alloc(cma c184d3e0, count 1, align 0)
cma: cma_alloc(): 返回 effbf060
IPv6:ADDRCONF(NETDEV_UP):eth0:链接未准备好
macb e000b000.ethernet eth0:链接(1000/完整)
IPv6:ADDRCONF(NETDEV_CHANGE):eth0:链接准备就绪
luscher2:不同意符号模块布局的版本
随机:crng 初始化完成
luscher2:不同意符号模块布局的版本
luscher2:不同意符号模块布局的版本
luscher3:加载树外模块会污染内核。
luscher 40400000.dma:设备树探测
luscher 40400000.dma:0x40400000 处的 luscher 映射到 0xf2990000,irq=49
buff大小0x00000000
buff编号0x00000000
cma: cma_alloc(cma c184d3e0, count 0, align 8)
luscher 40400000.dma:缓冲区内存分配失败
缓冲区内存分配失败
luscher:40400000.dma 的探测失败,错误 -12
【问题讨论】:
-
这是一个很好的问题,但完全不可读。请重新格式化。
-
@MaikonAdams:要格式化日志,无需手动在其中插入空格。只需选择日志,然后按编辑工具栏中的
Ctrl+K或{}按钮。之后,日志将被格式化为代码,并保留每个换行符。
标签: linux linux-kernel