linux内核编程笔记【原创】
2016-03-15 14:12
561 查看
DEFINE_MUTEX(buzzer_mutex);
mutex_lock(&buzzer_mutex);
mutex_unlock(&buzzer_mutex);
static void WriteNumber(const char *fileName, int number)
{
FILE *fp;
fp = fopen(fileName, "w");
if (fp == NULL) {
LCD_DEBUG("open %s error, errno %d\n", fileName, errno);
return;
}
fprintf(fp, "%d", number);
fclose(fp);
}
service aa /usr/bin/aa
class core
user root
group root
critical
onrestart restart aa
onrestart restart tt
#service bbd /usr/bin/bb
service bb /usr/bin/app_bbl_read
user root
group root
oneshot
出处:http://www.cnblogs.com/gnuhpc/
在此说一下我常用的两个结构:
1.
for i in $(seq 1 100); do
echo $i
done
2.
for (( i = 1 ; $i <= 100; i++ )) ;do
echo $i;
done
作者:gnuhpc
出处:http://www.cnblogs.com/gnuhpc/
对于关闭抢占的内核接口
看内核接口是同步还是异步,比方说msleep就是异步接口,会休眠让出cpu
mdelay是忙等待,不会让出cpu
如果是同步接口的话,对于单核cpu,就不会出现多进程同时调用同一个接口出错的情况
如果是异步接口的话,就得具体问题具体分析,如果是仅仅避免多个进程调度同一个接口的情况的话,加信号量或者普通的锁就可以,不一定要加互斥锁,
如果是又有中间层调度接口,又有用户态上层调度接口,那么就另当别论了
spin_lock这种锁是用来多核cpu共同调用同个接口的问题,
mutex_lock这种是会休眠,同个cpu的互斥锁,如果是进程上下文就可以用,如果是中断上下文就不能用这种锁,因为这种锁会休眠,中断中是不允许休眠的
local_irq_save(flags);
local_irq_restore(flags);
spin_lock_irqsave(&iproc_bbl->lock, flags);
spin_unlock_irqrestore(&iproc_bbl->lock, flags);
网上大家经常碰到的不能连接问题:
请在运行-cmd输入netstat -n 查看5222端口是否在建立状态 ESTABLISHED,这个方法来源自网络,部落没有遇到过.另外,还有一个,就是清空本地本地DNS缓存,具体步骤如下:
在windows下运行运行菜单,开始->运行,输入"CMD"进行命令行窗口,然后输入 ipconfig/flushdns 按回车键
休眠唤醒调试
kernel/power/main.c中可以通过打印链表的信息,在休眠唤醒的时候将每个唤醒的源消耗的时间打印出来
dpm_run_callback() ----》drivers/base/power
中断中不可以加入打印
中断处理函数应该避免调用不可重入函数, 因为新的中断可能发生并打断正在执行任务中,如果当前任务调用了一些不可重入的函数,将会产生错误。
一些常用库函数如printf,malloc,free等都是不可重入函数,因为在函数中引用了全局变量, 这个道理因该很容易明白了吧?
例如, printf会引用全局变量stdout,malloc,free会引用全局的内存分配表。
arch/arm/kernel/debug.S:157: Error: too many positional arguments
mutex_lock(&buzzer_mutex);
mutex_unlock(&buzzer_mutex);
static void WriteNumber(const char *fileName, int number)
{
FILE *fp;
fp = fopen(fileName, "w");
if (fp == NULL) {
LCD_DEBUG("open %s error, errno %d\n", fileName, errno);
return;
}
fprintf(fp, "%d", number);
fclose(fp);
}
service aa /usr/bin/aa
class core
user root
group root
critical
onrestart restart aa
onrestart restart tt
#service bbd /usr/bin/bb
service bb /usr/bin/app_bbl_read
user root
group root
oneshot
【Shell脚本】怎样表示一个for循环
作者:gnuhpc出处:http://www.cnblogs.com/gnuhpc/
在此说一下我常用的两个结构:
1.
for i in $(seq 1 100); do
echo $i
done
2.
for (( i = 1 ; $i <= 100; i++ )) ;do
echo $i;
done
作者:gnuhpc
出处:http://www.cnblogs.com/gnuhpc/
对于关闭抢占的内核接口
看内核接口是同步还是异步,比方说msleep就是异步接口,会休眠让出cpu
mdelay是忙等待,不会让出cpu
如果是同步接口的话,对于单核cpu,就不会出现多进程同时调用同一个接口出错的情况
如果是异步接口的话,就得具体问题具体分析,如果是仅仅避免多个进程调度同一个接口的情况的话,加信号量或者普通的锁就可以,不一定要加互斥锁,
如果是又有中间层调度接口,又有用户态上层调度接口,那么就另当别论了
spin_lock这种锁是用来多核cpu共同调用同个接口的问题,
mutex_lock这种是会休眠,同个cpu的互斥锁,如果是进程上下文就可以用,如果是中断上下文就不能用这种锁,因为这种锁会休眠,中断中是不允许休眠的
local_irq_save(flags);
local_irq_restore(flags);
spin_lock_irqsave(&iproc_bbl->lock, flags);
spin_unlock_irqrestore(&iproc_bbl->lock, flags);
网上大家经常碰到的不能连接问题:
请在运行-cmd输入netstat -n 查看5222端口是否在建立状态 ESTABLISHED,这个方法来源自网络,部落没有遇到过.另外,还有一个,就是清空本地本地DNS缓存,具体步骤如下:
在windows下运行运行菜单,开始->运行,输入"CMD"进行命令行窗口,然后输入 ipconfig/flushdns 按回车键
休眠唤醒调试
kernel/power/main.c中可以通过打印链表的信息,在休眠唤醒的时候将每个唤醒的源消耗的时间打印出来
dpm_run_callback() ----》drivers/base/power
中断中不可以加入打印
中断处理函数应该避免调用不可重入函数, 因为新的中断可能发生并打断正在执行任务中,如果当前任务调用了一些不可重入的函数,将会产生错误。
一些常用库函数如printf,malloc,free等都是不可重入函数,因为在函数中引用了全局变量, 这个道理因该很容易明白了吧?
例如, printf会引用全局变量stdout,malloc,free会引用全局的内存分配表。
arch/arm/kernel/debug.S:157: Error: too many positional arguments
相关文章推荐
- Linux查看平均负载[cat /proc/loadavg]
- Xargs用法详解 (Linux 命令使用)
- 汇总Linux命令 --查看环境变量,查看已安装包信息
- linux route命令的使用详解
- Linux ipcs 命令详解
- linux RTC 驱动模型分析【转】
- linux 实时时钟(RTC)驱动【转】
- Linux开机启动十步骤
- Linux hrtimer分析(2)
- Linux 常用命令备忘
- 如何利用多核CPU来加速你的Linux命令 — awk, sed, bzip2, grep, wc等(转)
- Linux hrtimer分析(一)
- 汇总Linux命令 --查看语言,安装包
- CentOS 安装nexus并设置为系统服务
- 10 examples of Linux ss command to monitor network connections
- Linux系统修正MySQL中文乱码问题
- Linux查看CPU信息[cat /proc/cpuinfo]
- linux sudo使用和sudoers配置详解
- Linux下的/etc/profile文件 和 /etc/profile.d/文件夹
- centos7 kickstart 使用小结