标签: embedded-linux

7
推荐指数
1
解决办法
4043
查看次数

无法在飞思卡尔i.MX28上启动基本的OpenEmbedded-Core

我一直在试图建立和启动OpenEmbedded的核心的评估套件飞思卡尔的ARM i.MX28,使用飞思卡尔ARM层OpenEmbedded的核心.不幸的是,我找不到基本的"入门"指南(尽管有一个Yocto入门指南).不幸的是,我无法"开始",成功启动到主板的调试串口上的基本命令提示符.

这就是我能够拼凑起来的东西,就我迄今为止所做的而言.

获取源

mkdir -p oe-core/freescale-arm
cd oe-core/freescale-arm
git clone git://git.openembedded.org/openembedded-core oe-core
git clone git://github.com/Freescale/meta-fsl-arm.git
cd oe-core
git clone git://git.openembedded.org/meta-openembedded
git clone git://git.openembedded.org/bitbake bitbake
Run Code Online (Sandbox Code Playgroud)

设置环境

. ./oe-init-build-env
Run Code Online (Sandbox Code Playgroud)

这使我们进入一个新的子目录build并设置某些环境变量.

编辑配置

编辑conf/bblayers.conflocal.conf文件:

conf/bblayers.conf应该添加meta-fls-armmeta-oe添加图层BBLAYERS.例如:

BBLAYERS ?= " \
  /home/craigm/oe-core/freescale-arm/oe-core/meta \
  /home/craigm/oe-core/freescale-arm/oe-core/meta-openembedded/meta-oe \
  ${TOPDIR}/../../meta-fsl-arm \
  "
Run Code Online (Sandbox Code Playgroud)

conf/local.conf,我设置:

BB_NUMBER_THREADS = "4"
PARALLEL_MAKE = "-j 4"
MACHINE = "imx28evk"
Run Code Online (Sandbox Code Playgroud)

建立 …

arm embedded-linux openembedded

7
推荐指数
1
解决办法
2254
查看次数

Linux上的I2C并发访问,互斥

我正在嵌入式Linux中编写一个多线程C程序,从用户空间访问许多I2C设备(从设备).此外,我从多个线程访问相同的I2C设备.我正在使用SMBUS函数(i2c_smbus_write_byte_data,i2c_smbus_read_byte_data,i2c_smbus_read_i2c_block_data,...).

是否有内置并发访问的保护或我是否需要自己添加互斥?

例如:我有一个读取功能,通过I2C读取一个传感器的数据.但是也可以从另一个线程调用相同的函数,从而导致可能的并发访问.我是否必须在该函数中使用某些静态互斥锁,或者它是否已经在I2C访问函数中?

linux concurrency mutex i2c embedded-linux

7
推荐指数
2
解决办法
4091
查看次数

在Linux下获取缓冲区的物理地址

我正在Xilinx的Microblaze上运行带有完整MMU的Linux内核3.3.我正在做的任务要求我知道以下内容:我需要创建一个文本文件(缓冲区)并找到该缓冲区的物理地址,我不希望内核将此文件写入不连续的内存区域.

我需要这个的原因是因为我有一个DMA引擎从预设的物理内存地址流式传输数据,所以我需要强制Linux在那个确切的内存位置创建缓冲区文件,以便当我将数据写入此文件时立即传输由DMA引擎到另一个硬件核心

更多细节:

我的系统有一个512 MB DDR3 RAM通过"Xilinx"多端口内存控制器(MPMC)连接到系统.该内存控制器的基地址为0x90000000,系统中的所有单元通过该控制器访问内存,包括MicroBlaze,DMA我所使用的单元使用称为本机个性化接口(NPI)的特殊接口,以非常低的级别与存储器通信,从而产生非常高的速度性能.

这个NPI DMA单元最初设计用于一个名为"xilkernel"的非常基本的嵌入式内核,它不支持虚拟内存,MMU也不是MicroBlaze的一部分,因此程序员可以看到操作系统代码所在的位置并选择物理内存地址如0x91800000作为DMA将从中流出的源地址,然后程序员可以将文件放在该确切的地址中并运行系统

当我们需要迁移项目以使用Linux而不是xilkernel时我们遇到了这个问题,我在外部存储设备上有文件,我可以从Linux访问作为块设备,我需要将每个文件移动到主内存(DDR3 RAM)并使DMA流成为文件.目前来自固定地址的DMA流,但如果需要,我可以使它成为通用的.

embedded mmap linux-kernel embedded-linux microblaze

7
推荐指数
2
解决办法
3266
查看次数

为什么i2cdetect总是在嵌入式Linux上的RTC上提供UU

我想用C代码而不是"hwclock"shell命令从RTC传递读取信息.

但是,当我使用时i2cdetect,它显示0x68(这是我的RTC从站地址)具有状态"UU",这意味着"跳过了探测,因为该地址当前正由驱动程序使用".在我尝试之后i2cget,它的givng"可能会将地址设置为0x68:设备或资源忙".

所以我在想我的Linux内核是否存在一些问题,它会一直强制从我的RTC读取,或者其他一些原因.

谢谢

linux i2c linux-device-driver embedded-linux

7
推荐指数
1
解决办法
2万
查看次数

如何在Linux内核中启动init进程?

我试图了解linux内核中的init进程,这是第一个进程,并使用INIT_TASK宏进行静态初始化.

    161 #define INIT_TASK(tsk)  \
    162 {                                                                       \
    163         .state          = 0,                                            \
    164         .stack          = &init_thread_info,                            \
    165         .usage          = ATOMIC_INIT(2),                               \
    166         .flags          = PF_KTHREAD,                                   \
    167         .prio           = MAX_PRIO-20,                                  \
    168         .static_prio    = MAX_PRIO-20,                                  \
    169         .normal_prio    = MAX_PRIO-20,                                  \
    170         .policy         = SCHED_NORMAL,                                 \
    171         .cpus_allowed   = CPU_MASK_ALL,                                 \
    172         .nr_cpus_allowed= NR_CPUS,                                      \
    173         .mm             = NULL,                                         \
    174         .active_mm      = &init_mm,                                     \
    175         .se             = {                                             \
    176                 .group_node     = LIST_HEAD_INIT(tsk.se.group_node),    \
    177         },                                                              \ …
Run Code Online (Sandbox Code Playgroud)

linux linux-device-driver linux-kernel embedded-linux

7
推荐指数
1
解决办法
1万
查看次数

什么是dbus守护进程以及为什么vlc需要它

我使用buildroot交叉编译VLC(版本2.1.2)媒体播放器用于扶手板.我已经使用串行电缆将电路板连接到我的linux PC.当我尝试在minicom中使用"vlc"命令运行播放器时,该命令位于我的根文件系统的/ usr/bin中.我收到以下错误:

禁止接口错误:无法连接到D-Bus会话守护程序:/ usr/bin/dbus-launch异常终止,出现以下错误:自动启动错误:X11初始化失败.

任何人都可以澄清这个错误的含义,也可以告诉我什么是dbus以及为什么我的VLC播放器需要它.

谢谢你的帮助.

linux x11 dbus embedded-linux buildroot

7
推荐指数
1
解决办法
1万
查看次数

arecord创建的多个文件

我使用buildroot进行自定义分发,使用ARMv7处理器的硬流程.一切正常,除了....

# arecord -D hw:0,0 -fdat -d 5 test.wav
Run Code Online (Sandbox Code Playgroud)

这会产生多个文件.成千上万的人.

-rw-r--r--    1 root     root        958508 Jan  1 00:19 test-01.wav
-rw-r--r--    1 root     root            44 Jan  1 00:19 test-02.wav
-rw-r--r--    1 root     root            44 Jan  1 00:19 test-03.wav
-rw-r--r--    1 root     root            44 Jan  1 00:19 test-04.wav
-rw-r--r--    1 root     root            44 Jan  1 00:19 test-05.wav
-rw-r--r--    1 root     root            44 Jan  1 00:19 test-06.wav
-rw-r--r--    1 root     root            44 Jan  1 00:19 test-07.wav
-rw-r--r--    1 root     root            44 Jan  1 …
Run Code Online (Sandbox Code Playgroud)

audio alsa embedded-linux buildroot

7
推荐指数
2
解决办法
2288
查看次数

copy_to_user()和copy_from_user()用于基本数据类型

我正在编写一个Linux内核驱动程序,对于每个将数据发送到用户空间或从用户空间读取数据的函数,我使用的是copy_to_user()和copy_from_user().我的问题是:如果我只是复制一个基本数据类型,如u32或int,我是否需要使用这些调用?

c linux linux-device-driver linux-kernel embedded-linux

7
推荐指数
1
解决办法
2769
查看次数

什么是linux中的链接irq,何时需要使用?

什么是链式IRQ?做什么chained_irq_enterchained_irq_exit做什么,因为在中断发生后IRQ线被禁用,但是chained_irq_enter调用与屏蔽中断有关的功能.如果该行已被禁用,为什么要屏蔽中断?

linux irq linux-kernel interrupt-handling embedded-linux

7
推荐指数
2
解决办法
3301
查看次数