打印

[32位单片机及处理器] AT91SAM LINUX4.19内核设备树驱动开发及指令集问题

[复制链接]
137|7
跳转到指定楼层
楼主
 楼主 | 2019-10-30 11:25 | 只看该作者 |退出气泡模式 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 engcrazy 于 2019-10-30 11:28 编辑

在9g25(arm926ej-s核心,armv5tej架构指令集)平台上移植linux4.19内核,引入了设备树,各个自带的外设均通过dts配置获得/dev/xxx,取消了arrch目录下的mach-at91相关驱动代码。新版本内核要求编译器的版本不低于6.0,否则无法编译通过,at91官网上推荐使用linaro gcc 7.4版本的编译器,现阶段在使用linux4sam6.1开发包和buildroot-at91开发系统上遇到以下几个问题,希望官方能够解答一下,不胜感激:

问题1:
在老版本内核linux2.6版本上,内核中包括有at91相关的一些驱动文件,如gpio_set_value、at91_sys_write(设置外设时钟的接口)等相关可以直接调用的接口,新linux4.19内核取消了相关接口。
请问现阶段像GPIO和外设时钟的操作是哪些接口?因外部驱动需要调用这样的一些接口去简单的设计用户驱动。

问题2:
1、在使用linaro gcc 7.4.1编译内核的过程中,生成的镜像文件vmliux通过readelf vmlinux -A查看是armv5te的,且能够正常在9g25上跑起来。
2、buildroot在使用外部编译器linaro gcc 7.4.1编译busybox-1.30.1,生成的镜像文件busybox通过readels busybox -A查看是armv7的,内核引导文件系统出现kernel panic 错误码有00000004 、00000009 、0000000B,通过多次搜索资料各种方法均不能解决,最后看到一篇帖子介绍说是指令集不支持的原因,
    于是在编译busybox的时候修改busybox的makefilewe文件,加入了相关选项-mcpu=arm926ej-s -mtue=arm926ej-s -macrh=armv5tej,但是编译出来的busybox镜像文件还是v7格式,也就是该选项并未生效;
    于是改用buildroot自己制作的交叉编译器编译的busybox,其格式为v5te,符合预期。且文件系统能够正常挂载启动成功。

请问内核在使用外部编译器编译的镜像文件为armv5te,而编译busybox如何才能生成v5te格式的文件?经过多次试验均失败。

问题3:
能否提供新版内核各外设驱动设计的例程、各外设驱动设计应用开发例程,就如同Linux小课堂介绍的How_to_use_MCHP_Linux_on_UART等全面的一些总结文档和设计例程,同时,关于用户自定义驱动程序如何在dts中加入和driver文件的模板设计。跟上设备树驱动的潮流。

在此静候ATMEL官方的支持与解答,不胜感激!
沙发
| 2019-10-30 22:18 | 只看该作者
去PIC官网打探一下,看看有没有提供相关的资料
板凳
| 2019-10-31 00:34 | 只看该作者
不会真的连IO都没法操作了吧
地板
 楼主 | 2019-10-31 09:00 | 只看该作者
zhuomuniao110 发表于 2019-10-30 22:18
去PIC官网打探一下,看看有没有提供相关的资料

打探过了,目前据说正在整理这方面的资料。
5
 楼主 | 2019-10-31 09:01 | 只看该作者
engcrazy 发表于 2019-10-31 09:00
打探过了,目前据说正在整理这方面的资料。

新内核跟2.6内核差别不是一般大。驱动接口大部分不适用了
6
 楼主 | 2019-10-31 10:55 | 只看该作者
捉虫天师 发表于 2019-10-31 00:34
不会真的连IO都没法操作了吧

可以,就是ATMEL原来的mach-at91代码都去掉了,改成linux标准接口了,可以自己再去定义的
7
| 2019-11-11 09:03 | 只看该作者
问题1:
在老版本内核linux2.6版本上,内核中包括有at91相关的一些驱动文件,如gpio_set_value、at91_sys_write(设置外设时钟的接口)等相关可以直接调用的接口,新linux4.19内核取消了相关接口。

你去Microchip官网搜索《How to use MCHP Linux on GPIO》,有专门的帮助文档。

问题2:
1、在使用linaro gcc 7.4.1编译内核的过程中,生成的镜像文件vmliux通过readelf vmlinux -A查看是armv5te的,且能够正常在9g25上跑起来。
2、buildroot在使用外部编译器linaro gcc 7.4.1编译busybox-1.30.1,生成的镜像文件busybox通过readels busybox -A查看是armv7的,内核引导文件系统出现kernel panic 错误码有00000004 、00000009 、0000000B,通过多次搜索资料各种方法均不能解决,最后看到一篇帖子介绍说是指令集不支持的原因,
    于是在编译busybox的时候修改busybox的makefilewe文件,加入了相关选项-mcpu=arm926ej-s -mtue=arm926ej-s -macrh=armv5tej,但是编译出来的busybox镜像文件还是v7格式,也就是该选项并未生效;
    于是改用buildroot自己制作的交叉编译器编译的busybox,其格式为v5te,符合预期。且文件系统能够正常挂载启动成功。

请问内核在使用外部编译器编译的镜像文件为armv5te,而编译busybox如何才能生成v5te格式的文件?经过多次试验均失败。
去这个地方下载开发SDK, ftp://www.at91.com/pub/demo/yocto-sdk/
你用Linaro编译出错,应该是配置的问题。
问题3:
能否提供新版内核各外设驱动设计的例程、各外设驱动设计应用开发例程,就如同Linux小课堂介绍的How_to_use_MCHP_Linux_on_UART等全面的一些总结文档和设计例程,同时,关于用户自定义驱动程序如何在dts中加入和driver文件的模板设计。跟上设备树驱动的潮流。
官网Linux开发总入口 LINUX4SAM有很多资料,我不清楚的地方也是直接去上面英文搜索,可以找到需要的资料。
8
 楼主 | 2019-11-11 16:21 | 只看该作者
yjmeishao 发表于 2019-11-11 09:03
问题1:
在老版本内核linux2.6版本上,内核中包括有at91相关的一些驱动文件,如gpio_set_value、at91_sys_w ...

感谢您的回复:
由于我使用的是原来2.6上设计的驱动,想简单修改一下匹配到4.19内核上去,所以有一些ATMEL
提供的接口去除后有点问题,gpio的操作已经解决。

问题2.
关于linaro gcc 7.4.1编译hello.c之后使用readelf hello -A查看依然是V7格式。而编译出的内核是v5TE,这个就不是配置问题了。


问题3.dts相关开发目前正在学习,不过还是想先把老驱动做起来用着再研究,研发搞这个你是知道的,周期很重要。谢谢你的回复。
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表
欢乐赛车 山东群英会规则 北京两步彩 80彩票 鼎鼎彩票 916彩票 网易彩票 瑞祥彩票 五福彩票 112彩票