首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux内核无法看到我的at91sam9g20板上的所有组件

Linux内核无法看到我的at91sam9g20板上的所有组件
EN

Stack Overflow用户
提问于 2019-05-15 22:58:18
回答 1查看 169关注 0票数 0

我使用的是Stamp9g20嵌入式芯片。它基于爱特梅尔公司的at91sam9g20平台。对于客户端,我需要将内核升级到较新的版本。经过一些研究,我进入了Linux4SAM页面和他们的附加yocto层,完成了一个4.14内核!

但是,当我编译内核时,我看不到所有设备,例如,我可以写入NAND内存并挂载USB设备,但我看不到或挂载任何mmc/mci设备。我试过检查Stamp9g20和AT91SAM9G20EK到底有什么不同,但我找不到一个明确的答案。

Linux4SAM代码库支持略有不同的AT91SAM9系列版本,但我将其用于4.14内核,使用at91sam9g20ek.dts作为主板的输入。我必须将我的机器添加到兼容的机器列表中,所以它也可以编译为9g20版本。

COMPATIBLE_MACHINE += 'at91sam9g20ek'

我的machine.conf看起来像这样:

代码语言:javascript
复制
#@Name: ATMEL AT91SAM9G20EK 
#@DESCRIPTION: Machine configuration for Atmel's evaluation board
#

# define SOC_FAMILY (we are the family of ...)

SOC_FAMILY = "atsam9"

# Add arm926ejs to the DEFAULTTUNE, so it will be selected in our environment
DEFAULTTUNE = "arm926ejs"

# http://lists.openembedded.org/pipermail/openembedded-core/2019-January/277527.html
#TUNE_CCARGS .= "${@bb.utils.contains('TUNE_FEATURES', 'armv5', ' -march=armv5t${ARMPKGSFX_DSP}', '', d)}"
TUNE_CCARGS = "${@bb.utils.contains('TUNE_FEATURES', 'armv5', ' -march=armv5t${ARMPKGSFX_DSP}', '', d)}"

# We rely on the generic meta-atmel layer
require conf/machine/include/at91sam9.inc

MACHINE_FEATURES = "apm ext2 ext3 ext4 usbhost usbgadget vfat jffs2"

# This device tree is available in the kernel
KERNEL_DEVICETREE = " \
                        at91sam9g20ek.dtb \
                     "
# Create filesystems tar.gz and jffs2
IMAGE_FSTYPES += " tar.gz jffs2 tar"

# UNTESTED IMAGES (both bootstrap and uboot)
UBOOT_MACHINE ?= "at91sam9g20ek_nandflash_defconfig"
UBOOT_ENTRYPOINT = "0x20008000"
UBOOT_LOADADDRESS = "0x20008000"

AT91BOOTSTRAP_MACHINE ?= "at91sam9g20ek"

当内核启动时,它显示它在地址0xffff8000上注册了一个设备驱动程序,但它看不到块设备。

代码语言:javascript
复制
bus: 'mmc': add driver mmcblk       
bus: 'sdio': add driver sdio_uart
bus: 'platform': add driver atmel_mci
bus: 'platform': driver_probe_device: matched device fffa8000.mmc with driver atmel_mci
bus: 'platform': really_probe: probing driver atmel_mci with device fffa8000.mmc
atmel_mci fffa8000.mmc: no init pinctrl state
atmel_mci fffa8000.mmc: version: 0x210
atmel_mci fffa8000.mmc: using PDC              
device: 'mmc0': device_add                     
atmel_mci fffa8000.mmc: Atmel MCI controller at 0xfffa8000 irq 30, 1 slots
driver: 'atmel_mci': driver_bound: bound to device 'fffa8000.mmc'
bus: 'platform': really_probe: bound device fffa8000.mmc to driver atmel_mci

我已经在2.6.x版本中尝试过这个主板,它可以正常工作。

如何使数据块设备mmcblk在系统中可用?我是否需要更改.dts (目前我使用at91sam9g20ek.dts作为模板,但对NAND内存进行了较小的更改)。或者,我可以做些什么来获得更多关于为什么内核不能与mmc设备交互的信息?

此外,如果我比较dts结构之前的源代码,我看不到代码的mcc部分有什么显著的区别:https://elixir.bootlin.com/linux/v3.6.9/source/arch/arm/mach-at91/board-sam9g20ek.c https://elixir.bootlin.com/linux/v3.6.9/source/arch/arm/mach-at91/board-stamp9g20.c

我发现的唯一不同之处是,at91sam9g20ek板:

代码语言:javascript
复制
    .slot_b     = 1,    /* Only one slot so use slot B */

stamp9g20板:

代码语言:javascript
复制
    .slot_b     = 0,

因此,我尝试将dts中的reg<>属性更改为1,但无济于事...

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-06 19:55:21

找到了!我所要做的就是将dts中的mmc插槽(为1)更改为插槽0:

代码语言:javascript
复制
--- a/arch/arm/boot/dts/at91sam9g20ek_common.dtsi
+++ b/arch/arm/boot/dts/at91sam9g20ek_common.dtsi
@@ -39,8 +39,8 @@

                                };

-                               mmc0_slot1 {
-                                       pinctrl_board_mmc0_slot1: mmc0_slot1-board {
+                               mmc0_slot0 {
+                                       pinctrl_board_mmc0_slot0: mmc0_slot0-board {
                                                atmel,pins =
                                                        <AT91_PIOC 9 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP_DEGLITCH>;   /* PC9 gpio CD pin pull up and deglitch */
                                        };
@@ -90,15 +90,14 @@

                        mmc0: mmc@fffa8000 {
                                pinctrl-0 = <
-                                       &pinctrl_board_mmc0_slot1
+                                       &pinctrl_board_mmc0_slot0
                                        &pinctrl_mmc0_clk
-                                       &pinctrl_mmc0_slot1_cmd_dat0
-                                       &pinctrl_mmc0_slot1_dat1_3>;
+                                       &pinctrl_mmc0_slot0_cmd_dat0
+                                       &pinctrl_mmc0_slot0_dat1_3>;
                                status = "okay";
-                               slot@1 {
-                                       reg = <1>;
+                               slot@0 {
+                                       reg = <0>;
                                        bus-width = <4>;
-                                       cd-gpios = <&pioC 9 GPIO_ACTIVE_HIGH>;
                                };
                        };
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56152337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档