나는 Zynq PS 용 PWM 타이머 (triple timer counter) 드라이버를 insmod하려고한다. 메시지는 dmesg 로그이다 구조체 cpwm- 특정 필드> 칩은 초기화되지 않은 경우 리눅스 드라이버 insmod에서의 PWM
TTC: Inside probe function
pwm-cadence f8001000.timer: PWM 0 has clock source 0 at 108333336 Hz
pwm-cadence f8001000.timer: PWM 1 has clock source 0 at 108333336 Hz
pwm-cadence f8001000.timer: PWM 2 has clock source 0 at 108333336 Hz
pwm-cadence f8001000.timer: cannot add pwm chip (error -22)
는 EINVAL (오류 -22) 함수 발생 하는가? 본인은이 분야의 초보자입니다. 그래서 어떤 조언을 부탁드립니다.
static int cadence_pwm_probe(struct platform_device *pdev)
{
struct cadence_pwm_chip *cpwm;
struct resource *r_mem;
int ret;
struct device_node *node = pdev->dev.of_node;
const __be32 *value;
int rlen;
char propname[24];
int i;
struct cadence_pwm_pwm *pwm;
printk(KERN_DEBUG "TTC: Inside probe function\n");
cpwm = devm_kzalloc(&pdev->dev, sizeof(*cpwm), GFP_KERNEL);
if (!cpwm)
return -ENOMEM;
r_mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
cpwm->base = devm_ioremap_resource(&pdev->dev, r_mem);
if (IS_ERR(cpwm->base))
return PTR_ERR(cpwm->base);
for (i = 0; i < CPWM_NUM_PWM; i ++) {
pwm = cpwm->pwms + i;
snprintf(propname, sizeof(propname), "xlnx,ttc-clk%d-freq-hz", i);
value = of_get_property(node, propname, &rlen);
if (value)
pwm->clk_hz = be32_to_cpup(value);
else {
dev_err(&pdev->dev, "missing %s property1", propname);
return -ENODEV;
}
snprintf(propname, sizeof(propname), "xlnx,ttc-clk%d-clksrc", i);
value = of_get_property(node, propname, &rlen);
if (value)
pwm->source = be32_to_cpup(value);
else {
dev_err(&pdev->dev, "missing %s property2", propname);
return -ENODEV;
}
dev_info(&pdev->dev, "PWM %d has clock source %d at %d Hz", i, pwm->source, pwm->clk_hz);
}
cpwm->chip.dev = &pdev->dev;
cpwm->chip.ops = &cadence_pwm_ops;
cpwm->chip.npwm = CPWM_NUM_PWM;
cpwm->chip.base = -1;
ret = pwmchip_add(&cpwm->chip);
if (ret < 0) {
dev_err(&pdev->dev, "cannot add pwm chip (error %d)", ret);
return ret;
}
전체 드라이버 링크 : https : //github.com/XiphosSystemsCorp/cadence-ttc-pwm/blob/master/src/kernel/pwm-cadence.c – gPats
일반적으로 커널 명령 행에 * initcall_debug *가 추가됩니다. 자세한 내용을 보려면 – 0andriy