<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[maclinuxye的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/maclinuxye</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; maclinuxye]]></copyright><item><title><![CDATA[SPI通讯随记]]></title><link>https://blog.youkuaiyun.com/maclinuxye/article/details/76086396</link><guid>https://blog.youkuaiyun.com/maclinuxye/article/details/76086396</guid><author>maclinuxye</author><pubDate>Tue, 25 Jul 2017 17:04:08 +0800</pubDate><description><![CDATA[这里记录一些有关于SPI的知识点
详情移步：
https://nxp.maclinux.top/wordpress/?p=353]]></description><category></category></item><item><title><![CDATA[linux外网ip获取命令]]></title><link>https://blog.youkuaiyun.com/maclinuxye/article/details/67053812</link><guid>https://blog.youkuaiyun.com/maclinuxye/article/details/67053812</guid><author>maclinuxye</author><pubDate>Mon, 27 Mar 2017 22:39:40 +0800</pubDate><description><![CDATA[curl icanhazip.com]]></description><category></category></item><item><title><![CDATA[字符设备]]></title><link>https://blog.youkuaiyun.com/maclinuxye/article/details/56495790</link><guid>https://blog.youkuaiyun.com/maclinuxye/article/details/56495790</guid><author>maclinuxye</author><pubDate>Wed, 22 Feb 2017 20:11:23 +0800</pubDate><description><![CDATA[long xxx_ioctl(struct file *filp,unsigned int cmd,unsigned long arg)
{
...;
switch(cmd)
{
case XXX_CMD1:
...;
break;
case XXX_CMD2;
...;
break;
case XXX_CMD3;
...
break;
default:
/*不能支持]]></description><category></category></item><item><title><![CDATA[Linux驱动attribute]]></title><link>https://blog.youkuaiyun.com/maclinuxye/article/details/55805617</link><guid>https://blog.youkuaiyun.com/maclinuxye/article/details/55805617</guid><author>maclinuxye</author><pubDate>Sun, 19 Feb 2017 16:38:43 +0800</pubDate><description><![CDATA[device_driver 和 device分别表示驱动和设备，而这两者都必须依赖于一种总线，因此都包含
struct bus_type指针，总线，这杯和驱动都会被落实为sysfs中的一个目录，总线，设备和驱动中的
attribute则直接落实为sysfs中的1个文件，
attribute,bus_attribute,driver_attribute和device_attribute.
s]]></description><category></category></item><item><title><![CDATA[可变参数]]></title><link>https://blog.youkuaiyun.com/maclinuxye/article/details/55106390</link><guid>https://blog.youkuaiyun.com/maclinuxye/article/details/55106390</guid><author>maclinuxye</author><pubDate>Tue, 14 Feb 2017 21:09:38 +0800</pubDate><description><![CDATA[摘自网络的 C语言网络参数的用法
C语言中会遇到一些参数可变的函数，例如printf(),函数原型为
int printf(const char * format,...);
 函数编辑器。
 
  首先编写一个简单的可变参数的C函数
    该函数至少有一个整数参数，其后是占位符...,表示后面的参数不固定，例子中的输入参数必须是整型
用来打印所有的参数。
#include "s]]></description><category></category></item><item><title><![CDATA[设备，驱动，总线的结构]]></title><link>https://blog.youkuaiyun.com/maclinuxye/article/details/54986388</link><guid>https://blog.youkuaiyun.com/maclinuxye/article/details/54986388</guid><author>maclinuxye</author><pubDate>Sat, 11 Feb 2017 20:28:05 +0800</pubDate><description><![CDATA[struct bus_type{
const char 
*name;
const char 
*dev_name;
struct device 
*dev_root;
struct device_attribute *dev_attrs;
/*Use dev_groups instead*/
const struct attribute_group **bus_groups;]]></description><category></category></item><item><title><![CDATA[套接字]]></title><link>https://blog.youkuaiyun.com/maclinuxye/article/details/54984292</link><guid>https://blog.youkuaiyun.com/maclinuxye/article/details/54984292</guid><author>maclinuxye</author><pubDate>Sat, 11 Feb 2017 16:07:02 +0800</pubDate><description><![CDATA[Linux中设计强调的基本观点就是机制和策略分离。
机制是做某样事情的具体步骤，方法。而策略则是每个步骤所采取的不同方式。机制是相对固定的。
而每个步骤采用的策略是不固定的。机制是稳定的，而策略是灵活的。
设备的详细信息会通过netlink套接字发送出来：
netlink的使用范例
#include

static void die(char *s)
{
write(2,s,st]]></description><category></category></item><item><title><![CDATA[devfs]]></title><link>https://blog.youkuaiyun.com/maclinuxye/article/details/54959960</link><guid>https://blog.youkuaiyun.com/maclinuxye/article/details/54959960</guid><author>maclinuxye</author><pubDate>Fri, 10 Feb 2017 00:09:24 +0800</pubDate><description><![CDATA[devfs出现使得设备驱动程序能够自主的管理设备。驱动程序应用下面的函数来进行设备文件的创建和撤销工作。/*创建设备目录*/devfs_handle_t devfs_mk_dir(devfs_handle_t dir,const char *name,void *info);/*创建设备文件*/dev_handle_t devfs_register(dev_handler_t dir,const]]></description><category></category></item><item><title><![CDATA[设备节点]]></title><link>https://blog.youkuaiyun.com/maclinuxye/article/details/54934009</link><guid>https://blog.youkuaiyun.com/maclinuxye/article/details/54934009</guid><author>maclinuxye</author><pubDate>Wed, 08 Feb 2017 22:36:03 +0800</pubDate><description><![CDATA[Linux文件系统与设备驱动
应用程序和VFS之间的接口是系统调用。而VFS与文件系统以及设备之间的接口是file_operation结构体
成员函数，这个结构体对文件进行打开，关闭，读写，控制的一系列成员函数。
字符设备的上层没有类似于磁盘的ext2文件系统，所以字符设备的file_oeration成员函数就直接由设备
驱动提供了。file_operation正是字符设备驱动的核心。
]]></description><category></category></item><item><title><![CDATA[目录结构]]></title><link>https://blog.youkuaiyun.com/maclinuxye/article/details/54913871</link><guid>https://blog.youkuaiyun.com/maclinuxye/article/details/54913871</guid><author>maclinuxye</author><pubDate>Tue, 07 Feb 2017 18:27:19 +0800</pubDate><description><![CDATA[Linux文件系统与文件设备
字符设备与块设备良好的"一切都是文件"的设计思想。掌握Linux文件系统，设备文件系统的知识。
首先，驱动最终通过与文件操作相关的系统调用或C库函数(本质也是基于系统调用)被访问。而设备驱动结构
最终也是为了迎合提供给应用程序员的API。
驱动不可避免地会与设备文件系统打交道。


Linux文件操作
文件操作系统调用
文件操作系统调用(Window]]></description><category></category></item><item><title><![CDATA[模块继续]]></title><link>https://blog.youkuaiyun.com/maclinuxye/article/details/54899195</link><guid>https://blog.youkuaiyun.com/maclinuxye/article/details/54899195</guid><author>maclinuxye</author><pubDate>Tue, 07 Feb 2017 00:36:38 +0800</pubDate><description><![CDATA[导出符号：
Linux的 /proc/kallsyms 文件对应着内核符号表。它记录了符号以及符号所在的内存地址。
模块可以使用下面的宏导出符号到内核列表当中：
EXPORT_SYMBOL(符号名);
EXPORT_SYMBOL_GPL(符号名);

导出整数加减运算函数符号的内核模块：
// 所谓的内核符号表就是在内核内部函数或变量中可供外部引用的函数。

#include ]]></description><category></category></item><item><title><![CDATA[模块继续]]></title><link>https://blog.youkuaiyun.com/maclinuxye/article/details/54895537</link><guid>https://blog.youkuaiyun.com/maclinuxye/article/details/54895537</guid><author>maclinuxye</author><pubDate>Mon, 06 Feb 2017 18:05:31 +0800</pubDate><description><![CDATA[模块的加载函数
加载函数一般以 __init标识声明.如下
static int __init initialization_function(void)
//注意__init标识
{
/*初始化代码*/
} 
module_init(initialization_function);
上面是模块的加载函数，他返回整形值，初始化成功，则返回0，在Linux里，初始化失败返回一个接近]]></description><category></category></item><item><title><![CDATA[模块的简单建立]]></title><link>https://blog.youkuaiyun.com/maclinuxye/article/details/54888182</link><guid>https://blog.youkuaiyun.com/maclinuxye/article/details/54888182</guid><author>maclinuxye</author><pubDate>Mon, 06 Feb 2017 02:28:16 +0800</pubDate><description><![CDATA[Linux内核模块
Linux设备驱动会以内核模块的形式出现。学会编写Linux内核模块编程是学习Linux设备驱动的先觉条件。


Linux内核模块的简介
Linux提供模块机制，具有如下的特点：
模块本身不能被编译进入内核映像，从而控制了内核的大小
模块一旦被加载，他就和内核中的其他部分一样。
以下是一个简单的程序

/*
*a simple kernel module]]></description><category></category></item><item><title><![CDATA[编译工具]]></title><link>https://blog.youkuaiyun.com/maclinuxye/article/details/54882226</link><guid>https://blog.youkuaiyun.com/maclinuxye/article/details/54882226</guid><author>maclinuxye</author><pubDate>Sun, 05 Feb 2017 17:32:58 +0800</pubDate><description><![CDATA[一个典型的ARM Linux工具链包含
arm-linux-gnueabihf-gcc
strip //可以删除可执行文件当中的符号表和调试信息来实现缩减程序体积的目的
objdump 
//是反汇编工具
ld
gprof //gprof在编译过程中在函数入口插入计数器以收集每个函数的被调用情况和被调用次数
nm //用于显示关于对象文件、可执行文件以及对象文件库里的符号信息。
r]]></description><category></category></item><item><title><![CDATA[GNU C的区别]]></title><link>https://blog.youkuaiyun.com/maclinuxye/article/details/54869464</link><guid>https://blog.youkuaiyun.com/maclinuxye/article/details/54869464</guid><author>maclinuxye</author><pubDate>Sun, 05 Feb 2017 00:56:20 +0800</pubDate><description><![CDATA[Linux 内核的引导
引导包括很多阶段。一般的SoC嵌入了bootrom，上电时bootrom运行。bootrom会去引导bootloader。
CPU0会发中断唤醒CPU1.之后CPU0和cpu1共同承担这些负载。进行负载均衡。
嵌入式Linux领域最著名的bootloader是U-Boot,关于内核启动，与驱动关系比较大的部分是每个平台的
是设备回掉函数和设备属性信息，他们通常包装在]]></description><category></category></item><item><title><![CDATA[编译目录]]></title><link>https://blog.youkuaiyun.com/maclinuxye/article/details/54862632</link><guid>https://blog.youkuaiyun.com/maclinuxye/article/details/54862632</guid><author>maclinuxye</author><pubDate>Sat, 04 Feb 2017 13:48:35 +0800</pubDate><description><![CDATA[应用实例：在内核中新增驱动驱动代码目录和子目录。


在drivers目录下为ARM体系结构新增用于 test driver 的属性目录

|--test
|-- cpu
| -- cpu.c
|-- test.c
|-- test_client.c
|-- test_ioctl.c
|-- test_proc.c
|-- test_queue.c
收线为新增的目录创建M]]></description><category></category></item><item><title><![CDATA[编译目录]]></title><link>https://blog.youkuaiyun.com/maclinuxye/article/details/54862630</link><guid>https://blog.youkuaiyun.com/maclinuxye/article/details/54862630</guid><author>maclinuxye</author><pubDate>Sat, 04 Feb 2017 13:48:28 +0800</pubDate><description><![CDATA[应用实例：在内核中新增驱动驱动代码目录和子目录。


在drivers目录下为ARM体系结构新增用于 test driver 的属性目录

|--test
|-- cpu
| -- cpu.c
|-- test.c
|-- test_client.c
|-- test_ioctl.c
|-- test_proc.c
|-- test_queue.c
收线为新增的目录创建M]]></description><category></category></item><item><title><![CDATA[编译与配置]]></title><link>https://blog.youkuaiyun.com/maclinuxye/article/details/54847766</link><guid>https://blog.youkuaiyun.com/maclinuxye/article/details/54847766</guid><author>maclinuxye</author><pubDate>Fri, 03 Feb 2017 16:20:47 +0800</pubDate><description><![CDATA[Linux内核的编译以及加载
运行make menuconfig等时，配置工具首先分析体系结构对应/arch/xxx/Kconfig 文件(xxx即为传入的arch参数)
文件中除了包含一些与体系结构相关的配置项和配置菜单以外，还通过source语句引入了一系列的Kconfig文件，而这
些Kconfig又有可能通过source引入下一层的Kconfig，配置工具更具Kconfig包含的菜单]]></description><category></category></item><item><title><![CDATA[内核的结构]]></title><link>https://blog.youkuaiyun.com/maclinuxye/article/details/54837003</link><guid>https://blog.youkuaiyun.com/maclinuxye/article/details/54837003</guid><author>maclinuxye</author><pubDate>Thu, 02 Feb 2017 18:13:09 +0800</pubDate><description><![CDATA[Linux内核的主要部分
Linux内核主要由进程调度（SCHED）、内存管理（MM）、虚拟文件系统（VFS），网络接口（NET）和
进程间通信（IPC） 5个子系统
进程调度
进程调度控制系统中的多个进程对CPU的访问，使得多个进程鞥够在CPU中“围观串行，宏观并行”。进
程调度处于系统的中心位置，内核中的其他系统都依赖于它，因为每个系统都需要挂起或恢复进程。
睡眠分为可中断睡眠和不]]></description><category></category></item><item><title><![CDATA[目录的层级结构]]></title><link>https://blog.youkuaiyun.com/maclinuxye/article/details/54828964</link><guid>https://blog.youkuaiyun.com/maclinuxye/article/details/54828964</guid><author>maclinuxye</author><pubDate>Thu, 02 Feb 2017 01:37:29 +0800</pubDate><description><![CDATA[在Linux2.6以后的内核版本当中，一个内核任务可以被抢占，从而提高系统的实时性。可以极大地增强
系统的用户交互性。就如用户觉得鼠标单击的时候得到了更快速的相应。但是2.6以后的内核还是存在一些
不可抢占的区间，例如中断上下文，软中断上下文和自旋锁锁住的区间。如果给Linux打上RT-Preempt补丁，
则软中断和中断都被线程化了，自旋锁也被互斥体替换，Linux内核变得能支持硬实时，L]]></description><category></category></item></channel></rss>