uclinux-2008R1-RC8(bf561)到VDSP5的移植(22):spinlock_types.h

为了支持多核,在config.h中定义了一个宏:

#define CONFIG_SMP 1

定义宏之后,提示找不到asm/spinlock_types.h,这个文件用于定义两个结构体和两个宏,如下所示:

#ifndef __ASM_SPINLOCK_TYPES_H
#define __ASM_SPINLOCK_TYPES_H

#ifndef __LINUX_SPINLOCK_TYPES_H
# error "please don't include this file directly"
#endif

typedef struct {
     volatile unsigned int lock;
} raw_spinlock_t;

#define __RAW_SPIN_LOCK_UNLOCKED { 0 }

typedef struct {
     volatile unsigned int lock;
} raw_rwlock_t;

#define __RAW_RW_LOCK_UNLOCKED { 0 }

#endif

在这里,由于不知道__RAW_SPIN_LOCK_UNLOCKED和__RAW_RW_LOCK_UNLOCKED的确切意义,暂时先将它定义为0,还有,lock似乎应该定义为testset_t的类型,暂时先这样吧。

当然,由于uclinux不支持SMP,这个文件必须手工创建并放在include/asm目录下。

时间: 2025-01-27 07:03:51

uclinux-2008R1-RC8(bf561)到VDSP5的移植(22):spinlock_types.h的相关文章

uclinux-2008R1-RC8(bf561)到VDSP5的移植(62)

uclinux-2008R1-RC8(bf561)到VDSP5的移植(62):Failed to open '#include' file 'bf561.h' 在include/asm/mach/blackfin.h文件中,有这样的语句: #include "bf561.h" #include "mem_map.h" #include "defBF561.h" #include "anomaly.h" 当在asm文件中包含这个

uclinux-2008R1-RC8(bf561)到VDSP5的移植(58)

uclinux-2008R1-RC8(bf561)到VDSP5的移植(58): unable to open an initial console blog. 碰到一个郁闷的问题,提示" unable to open an initial console"后再没有下文了. 搜了下这个错误出现的位置,在init_post函数中: if (sys_open((const char __user *) "/dev/console", O_RDWR, 0) < 0)

uclinux-2008R1-RC8(bf561)到VDSP5的移植(57)

clinux-2008R1-RC8(bf561)到VDSP5的移植(57):_NSIG_WORDS_is_unsupported_size 在include/linux/signal.h中使用了一个函数_NSIG_WORDS_is_unsupported_size,其使用过程大致如下所示: static inline int sigisemptyset(sigset_t *set) { extern void _NSIG_WORDS_is_unsupported_size(void); swit

uclinux-2008R1-RC8(bf561)到VDSP5的移植(43)

uclinux-2008R1-RC8(bf561)到VDSP5的移植(43):__builtin_return_address的问题 __builtin_return_address (LEVEL):这是GCC的内建函数,用于返回当前函数或其调用者的返回地址,参数LEVEL 指定在栈上搜索框架的个数,0 表示当前函数的返回地址,1 表示当前函数的调用者的返回地址,依此类推.在VDSP中,通过FP的循环取值可以完成相似的功能(参见以前的文章<使用FP取得函数的调用堆栈>).查了下内核对此函数的使

uclinux-2008R1-RC8(bf561)到VDSP5的移植(24):CONFIG_NR_CPUS

uclinux内核将bf561的每一个核都视为一个独立的CPU,因此在config.h中补上定义: // 多核支持 #define CONFIG_SMP 1 #define CONFIG_NR_CPUS 2

uclinux-2008R1-RC8(bf561)到VDSP5的移植(10):编译器配置

由于vdsp5与gcc的差异,需要在config.h中进行适当的配置. 1 __KERNEL__ 对于uclinux的内核编译来讲,必须加上__KERNEL__的定义.在 uclinux的原始文件中是通过在makefile中控制编译器的选项来达到这一目的的.而我则在每个uclinux内核的c文件头加上了#include <config.h>,因此直接将这一定义放在了config.h中: #define __KERNEL__ 1 // 仅适用于内核配置 2 Gcc版本号 在uclinux的头文件

uclinux-2008R1-RC8(bf561)到VDSP5的移植(46):raw_rwlock_t

由于uclinux不支持smp,因此也没有raw_rwlock_t这样的定义,为此需要在include/asm/spinlock_types.h中添加此定义: typedef struct { volatile testset_t lock; } raw_rwlock_t; #define __RAW_RW_LOCK_UNLOCKED { 0 } 然后在include/asm/spinlock_types.h中添加相关的操作: static inline void __raw_read_lock

uclinux-2008R1-RC8(bf561)到VDSP5的移植(29):spinlock

spinlock是用于线程间同步的自旋锁,由于我们希望使用BF561的两个核,因此它就显得极为重要. 1 定义 在内核中声明一个spinlock可以使用DEFINE_SPINLOCK这个宏定义,它的定义在include/linux/spinlock_types.h中: #define DEFINE_SPINLOCK(x) spinlock_t x = __SPIN_LOCK_UNLOCKED(x) 其中spinlock_t是在include/linux/spinlock_types.h中定义的一

uclinux-2008R1-RC8(bf561)到VDSP5的移植(1):前言

1 目标 将uclinux-2008R1-RC8(bf561)移植到VDSP5上. 让uclinux支持双核. 2 原则 1.首先注释掉所有的声明和实现,但是保留#include和#define这样的语句. 2.逐步添加所需要的功能. 3.smp相关的部分参考linux-2.6.19的内核. 4.使用VDSP库.