标签: embedded-linux

图像vs zImage vs uImage

他们之间有什么区别?

我知道u-boot需要uImage格式的内核.

我使用的系统首先从第1阶段加载器启动,然后调用u-boot.我想丢弃u-boot并直接从第1阶段加载器启动.我必须使用哪种类型的内核映像?

linux-kernel embedded-linux u-boot

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

错误:无法为使用 PEP 517 且无法直接安装的 scipy 构建轮子

我正在尝试通过 pip 在我的 64 位 ARMV8 板上安装 scipy。我已经安装了 scipy 所需的 openblas。所以,没有问题。当我给时pip3 install scipy --trusted-host pypi.org --trusted-host files.pythonhosted.org,我收到错误Failed building wheel for scipy。我有 pip3 和 pip3.5,/usr/bin其余的 pip 都在/usr/lib64/python3.5/site-packages。所以基本上,我也有 pip。

我还尝试使用--no-binary选项安装 scipy ,这是网络上的答案之一。但是,它给了我同样的错误。下面是我得到的错误。

错误:

Collecting scipy
  Downloading scipy-1.4.1.tar.gz (24.6 MB)
     |################################| 24.6 MB 6.6 MB/s 
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
    Preparing wheel metadata ... done
Building wheels for collected packages: scipy
  Building wheel for scipy (PEP …
Run Code Online (Sandbox Code Playgroud)

python pip scipy embedded-linux python-wheel

64
推荐指数
8
解决办法
13万
查看次数

为嵌入式Linux设备实现更新/升级系统

我有一个在嵌入式Linux设备上运行的应用程序,并且偶尔会对软件进行更改,有时也会对根文件系统甚至已安装的内核进行更改.

在当前的更新系统中,只删除旧应用程序目录的内容,并在其上复制新文件.当对根文件系统进行更改时,新文件将作为更新的一部分传递,并简单地复制到旧文件上.

现在,目前的方法存在一些问题,我正在寻找改善这种情况的方法:

  • 用于创建文件系统映像的目标的根文件系统未进行版本控制(我认为我们甚至没有原始rootfs).
  • 手动选择进入更新的rootfs文件(而不是diff)
  • 更新不断增长,成为一个皮塔饼.现在,更新/升级之间存在拆分,其中升级包含更大的rootfs更改.
  • 我的印象是,如果完全实现,更新中的一致性检查相当脆弱.

要求是:

  • 应用程序更新包不应太大,并且必须能够在已进行修改的情况下更改根文件系统.
  • 升级可以更大,只包含进入根文件系统的内容(如新库,内核等).更新可能需要安装升级.
    升级是否可以包含整个根文件系统,只需dd在目标的闪存驱动器上执行操作?
  • 创建更新/升级包应尽可能自动化.

我绝对需要一些方法来对根文件系统进行版本控制.这必须以某种方式完成,我可以从中计算某种diff可用于更新目标设备的rootfs的方法.

我已经查看了Subversion,因为我们将它用于源代码,但这对Linux根文件系统(文件权限,特殊文件等)不合适.

我现在已经创建了一些shell脚本,可以给我类似的东西,svn diff但我真的想知道是否已经存在一个可行的,经过测试的解决方案.

使用这样diff的我认为升级将简单地成为包含基于已知根文件系统状态的增量更新的包.

你对此有何看法和想法?你会如何实现这样的系统?我更喜欢一个简单的解决方案,可以在不太长的时间内实现.

linux software-update embedded-linux

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

如何编写简单的Linux设备驱动程序?

我需要从头开始为omap4编写SPI Linux字符设备驱动程序.我知道编写设备驱动程序的一些基础知识.但是,我不知道如何从头开始编写平台特定的设备驱动程序.

我写了一些基本的char驱动程序,我认为编写SPI设备驱动程序与它类似.Char驱动程序具有file_operations包含驱动程序中实现的功能的结构.

struct file_operations Fops = {
    .read = device_read,
    .write = device_write,
    .ioctl = device_ioctl,
    .open = device_open,
    .release = device_release,  /* a.k.a. close */
};
Run Code Online (Sandbox Code Playgroud)

现在,我将通过spi-omap2-mcspi.c代码作为参考,以便从头开始开始开发SPI驱动程序.

但是,我没有看到打开,读取,写入等功能.不知道程序从哪里开始.

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

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

linux内核如何管理不到1GB的物理内存?

我正在学习linux内核的内部结构,在阅读"理解Linux内核"时,有很多与内存相关的问题让我感到震惊.其中之一是,如果我的系统上安装了仅512 MB的物理内存,Linux内核如何处理内存映射.

正如我所读到的,内核将0(或16)MB-896MB物理RAM 映射到0xC0000000线性地址并可直接对其进行寻址.所以,在上面描述的情况下,我只有512 MB:

  • 内核如何从512 MB映射896 MB?在所描述的方案中,内核进行设置,以便每个进程的页表将虚拟地址从0xC0000000映射到0xFFFFFFFF(1GB),直接映射到0x00000000到0x3FFFFFFF(1GB)的物理地址.但是当我只有512 MB物理RAM时,如何将虚拟地址从0xC0000000-0xFFFFFFFF映射到物理0x00000000-0x3FFFFFFF?点是我的物理范围只有0x00000000-0x20000000.

  • 在这种情况下用户模式进程怎么样?

  • 每篇文章都只解释了这种情况,当你安装了4 GB内存并且内核将1 GB映射到内核空间时,用户进程使用剩余的RAM量.

我很感激任何帮助,以提高我的理解.

谢谢..!

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

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

学习内核编程

我想学习lLinux内核编程.

那个起点是什么?什么可能是一些更简单的问题?

linux kernel linux-device-driver embedded-linux

47
推荐指数
5
解决办法
2万
查看次数

工作__asm__ __volatile ___("":::"记忆")

ARM架构基本上__asm__ __volatile__ ()做了什么,有什么意义"memory"

c gcc arm volatile embedded-linux

43
推荐指数
3
解决办法
3万
查看次数

RTOS和嵌入式Linux有什么区别?

RTOS和嵌入式Linux用于嵌入式系统编程.嵌入式Linux本身是RTOS吗?有人可以列出比较或差异吗?

embedded rtos embedded-linux

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

如何知道linux调度程序的时间片?

我正在寻找Linux内核的时间片(或量子)的值.

有没有/proc公开此类信息的文件?

(或)它在我的发行版的Linux头文件中是否定义良好?

(或者)是否有Linux API(可能是sysinfo)的C函数公开此值?

提前致谢.

c linux linux-kernel embedded-linux procfs

39
推荐指数
5
解决办法
5万
查看次数

测量TLB对Cortex-A9的影响

在阅读了以下论文后,https://people.freebsd.org/~lstewart/articles/cpumemory.pdf("每个程序员应该了解内存的内容")我想尝试一下作者的测试,即测量效果TLB的最终执行时间.

我正在研究嵌入Cortex-A9的三星Galaxy S3.

根据文件:

我写了一个小程序,用N个条目分配一个结构数组.每个条目的大小为== 32个字节,因此它适合缓存行.我执行几次读取访问,并测量执行时间.

typedef struct {
     int elmt; // sizeof(int) == 4 bytes
     char padding[28]; // 4 + 28 = 32B == cache line size
}entry;


volatile entry ** entries = NULL;

//Allocate memory and init to 0
entries = calloc(NB_ENTRIES, sizeof(entry *));
if(entries == NULL) perror("calloc failed"); exit(1);

for(i = 0; i < NB_ENTRIES; i++)
{
      entries[i] = mmap(NULL, …
Run Code Online (Sandbox Code Playgroud)

c benchmarking arm embedded-linux cortex-a

39
推荐指数
1
解决办法
1448
查看次数