嵌入式
记得最初的梦想
一个单纯的程序员
展开
-
Linux常用命令
Linux 常用命令原创 2022-02-28 10:05:29 · 354 阅读 · 0 评论 -
设备驱动(十八)
在平台代码中添加device定义设备结构体struct i2c_board_info{}使用i2c_register_board_info注册添加驱动定义id_table数组struct i2c_device_id e2prom_ids={ {"24c02", 0}};驱动struct i2c_driver 24c02_deiver=原创 2014-03-06 18:03:56 · 834 阅读 · 0 评论 -
Android系统烧写
fastboot烧写uboot内实现了fastboot协议,目标板进入uboot,进入fastboot模式,主机使用fastboot将指定的镜像烧到指定的分区recovery烧写按组合按键进入recovery模式,通过SD卡中的update.zip包进行烧写该方式进入linux内核,启动recovery镜像,通过界面选择烧写的软件包update.ziplivesuit烧写原创 2014-03-12 17:44:48 · 2821 阅读 · 0 评论 -
设备驱动(十三)
自动创建设备节点2.6内核支持devfs、udev两种方式创建设备节点2.6内核以后只支持udev在应用层自动创建设备节点udev有一个后台守护进程udev(嵌入式中有mdev,根文件系统中已经有mdev),会一直扫描/sys/class目录,自动创建和删除设备节点udev自动创建节点方式:1、创建设备分类struct class *myclass;myclas原创 2014-03-06 17:54:46 · 707 阅读 · 0 评论 -
设备驱动(十四)
GPIO控制LED一、原理图、芯片手册 GPC0_3/4 GPC0CON GPC0DAT二、驱动模块许可加载函数构建设备号申请设备号注册字符设备映射寄存器初始化设备卸载函数逆向卸载file_operations键盘驱动编写:一、原理图gph0 0~5gph2 6~7二、驱动原创 2014-03-06 17:55:30 · 867 阅读 · 0 评论 -
设备驱动(十九)
块设备以固定大小为单位访问支持随机访问,带缓冲块设备层次结构块设备子系统功能缓冲区管理优化,合并优化IO请求块设备驱动设备结构体 gendisk加载函数卸载函数 字符设备块设备操作集合file_operationsblock_device_operations.open对应o原创 2014-03-06 18:10:18 · 789 阅读 · 0 评论 -
Android Linux Kernel 移植流程
Android Kernel移植流程参考文档Documentation/android.txt修改kernel configAndroid DriverAndroid Binder:基于openBinder框架的驱动,进程间通信底层主要驱动,没有可它,android无法工作Android Logger:是一个轻量级的日志系统,在内核里是misc(杂项)设备驱动,原创 2014-03-12 17:30:28 · 3722 阅读 · 0 评论 -
Android HAL硬件抽象层
硬件抽象层硬件设备驱动包括对硬件操作进行封装的库以及协议等, 如显卡的2d库, 3d加速库, wifi协议等底层的基本的操作旧的硬件抽象层架构新的硬件抽象层架构旧的硬件抽象层架构Android App通过访问对应设备的服务访问设备,Service位于Application F原创 2014-03-14 16:51:25 · 1830 阅读 · 0 评论 -
设备驱动(十七)
基于I2C子系统i2c-core:纽带;提供了一组通用的和硬件无关的接口函数I2C adapter driver :驱动总线产生时序i2c device driver:调用i2c-core中的函数完成i2c device driver的注册、注销和i2cmsg的封装i2c-dev在子系统中实现的通用i2c设备驱动,可用来访问任意i2c设备,为快速测试硬件I2C用户模式驱原创 2014-03-06 17:59:21 · 925 阅读 · 0 评论 -
设备驱动(二十)
网络设备无设备节点基本功能:数据发送/接收关注点.probe申请资源,注册网络设备.open初始化硬件(参考芯片手册)发送队列(通知网络子系统可以发送数据包).stop关闭发送队列,复位硬件.hard_start_xinit数据发送函数(参考芯片手册).interrupt数据接收的中断处理网卡工作模原创 2014-03-06 18:12:08 · 914 阅读 · 0 评论 -
设备驱动(十)
获取时间1、jiffiesjiffies:从系统启动到当前,时钟中断产生的次数marco HZ 每秒产生的时钟中断次数,范围100~10002、使用do_gettimeofday函数延时1、长延迟以jiffy为单位的延迟叫长延迟(占用CPU)time_before(jiffies, new_jiffies)time_after(new_jiffi原创 2014-03-06 17:49:21 · 858 阅读 · 0 评论 -
设备驱动(九)
中断处理分为上下半部上半部:完成紧急的,不耗时的操作(ISR)下半部:不紧急,耗时的操作,一般使用内核延时机制执行下半部内核延时机制内核延时机制:内核在某个时间点调用执行指定的函数内核延时机制实现方式:tasklet/work queue/软中断(软中断不推荐)内核调度优先级内优先级中断 > tasklet > work queuetasklet原创 2014-03-06 17:48:50 · 790 阅读 · 0 评论 -
Google Android软件架构
Application Framework 应用程序框架层通过提供开放的开发平台,Android使开发者能够编制极其丰富和新颖的应用程序。开发者可以自由地利用设备硬件优势、访问位置信息、运行后台服务、设置闹钟、向状态栏添加通知等等,很多很多。开发者可以完全使用核心应用程序所使用的框架APIs。应用程序的体系结构旨在简化组件的重用,任何应用程序都能发布他的功能且任何其他应用程序可以使用这些功能(需要服从框架执行的安全限制)。这一机制允许用户替换组件。原创 2014-03-12 10:21:00 · 1963 阅读 · 0 评论 -
Android编译环境搭建
Android编译环境搭建A Linux or Mac system. The Android build is routinely tested in house on recent versions of Ubuntu LTS (10.04), but most distributions should have the required build tools avai原创 2014-03-12 10:22:46 · 1216 阅读 · 0 评论 -
设备驱动(十五)
开启设备的时钟struct clk *my_clk; //定义时钟结构体my_clk = clk_get(NULL, "watchdog"); //获取设备的时钟信息clk_enable(my_clk); //打开时钟clk_disable(my_clk); //关闭时钟所有有关时钟的设备,只有打开时钟后设置设备的寄存器才有效。看门狗驱动原理图原创 2014-03-06 17:55:59 · 1090 阅读 · 0 评论 -
设备驱动(十二)
设备模型内核对设备进行分类,以层次结构组织管理成为设备结构/sys/devices 下显示了所有的设备/sys/bus 按照总线分类显示了所有设备 /sys/class 按照功能类型分类显示了所有设备驱动和设备都会在总线上注册/sys/bus不需要总线的设备将会注册到flatform总线上为了达到驱动与平台的无关性使用设备原创 2014-03-06 17:53:59 · 788 阅读 · 0 评论 -
设备驱动(十六)
ADCInput 0~3.3TSADCCON0[16] 转换精度[15] 结束标记位[14] 是否预分频[13,6] 分频值0xff[2] 0x0正常工作[1] 读操作时开始[0] 0x1开始转换TXDATX0 转换后的数字结果 [0, 11]CLRINTADC0模块许可加载函数注册字符设备注册中断 arch/arm/mach原创 2014-03-06 17:56:26 · 687 阅读 · 0 评论 -
Android 底层学习札记
Android 底层学习札记(一) Google Android软件架构(二) Android编译环境搭建(三) Android Linux Kernel 移植流程(四) Android启动流程(五) Android系统烧写(六) Android HAL硬件抽象层(七) Android LED HVL Stub 实现(八) Android Sensor Demo原创 2014-03-15 11:30:03 · 1026 阅读 · 0 评论 -
Android LED HVL Stub 实现
Vendor Hal Stub管理Hal Stub目前没有严格的标准 Interface(公布的方法)由各厂商决定 实现细节自己决定以products tree方式进行维护 易于管理 便于以后升级API & HAL stub开发流程开发LedService API设计Led Stub与LedService整合编写Led设备驱动开发设计测试原创 2014-03-15 10:56:47 · 1514 阅读 · 0 评论 -
条件变量signal与unlock的顺序
编写同步队列时,有用到条件变量,对操作队列的线程进行同步。当队列为空时,允许get线程挂起,直到add线程向队列添加元素并通过唤醒条件变量,get线程继续向下运行。条件变量在多线程程序中用来实现“等待->唤醒”逻辑常用的方法。条件变量要和互斥量相联结,以避免出现条件竞争:一个线程预备等待一个条件变量,当它在真正进入等待之前,另一个线程恰好触发了该条件。使用条件变量进行同步时,通常以如下...转载 2018-03-28 11:31:16 · 1902 阅读 · 2 评论 -
Makefile 常用命令
Makefile多文件编译CC = aarch64-linux-gnu-c++CFLAGS = #-O2DBUG = -gINCLUDE = -I../out/include/ -I../out/include/alize-core/include/ -I../dao/ -I../LIBS = -lpthread -lsqlite3LD_FLAG = -L../out/libS...原创 2018-02-05 13:47:43 · 1722 阅读 · 0 评论 -
Alsa + dmix + microphone [SOLVED]
I can play many sound at the same time but I can't record any sound using arecord: parpin@localhost parpin $ arecord -f cd -d 3 -t wav -N test.wav ALSA lib pcm_dmix.c:759:(snd_pcm_dmix_open) The dm转载 2015-05-26 12:11:03 · 2876 阅读 · 0 评论 -
嵌入式alsa+libmad实现mp3播放
/* * libmad - MPEG audio decoder library * Copyright (C) 2000-2004 Underbit Technologies, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the原创 2015-05-07 16:02:27 · 3079 阅读 · 0 评论 -
基于ALSA lib录音接口
基于Alsa lib录音接口原创 2015-05-28 14:19:48 · 2241 阅读 · 0 评论 -
基于Alsa lib进行音量调节以及静音操作
#include #include #include #include #include #include #include #include #include #include #include #include "volume_interface.h"#define DEBUG(x,y...) //{printf("[ %s : %s : %d] ",__FILE_原创 2015-05-27 11:57:08 · 7242 阅读 · 2 评论 -
交叉编译GDB
交叉编译GDB GDB是一款强大的调试工具,不多介绍了下载GDB源码,点击下载解压文件tar xf gdb-7.9.tar.gz配置编译 编写编译脚本#!/bin/bash./configure --prefix=/disk1/home/xllv/workspace/gdb/gdb-7.9/output/mips \ --target=mipsel-linux \ -原创 2015-05-13 10:30:23 · 5278 阅读 · 0 评论 -
互斥量、条件变量与pthread_cond_wait()函数的使用,详解(一)
1. 首先pthread_cond_wait 的定义是这样的The pthread_cond_wait() and pthread_cond_timedwait() functions are used to block on a condition variable. They are called with mutex locked by the calling thread or u转载 2015-03-24 11:24:48 · 1658 阅读 · 1 评论 -
互斥量、条件变量与pthread_cond_wait()函数的使用,详解(二)
1.Linux“线程” 进程与线程之间是有区别的,不过Linux内核只提供了轻量进程的支持,未实现线程模型。Linux是一种“多进程单线程”的操作系统。Linux本身只有进程的概念,而其所谓的“线程”本质上在内核里仍然是进程。 大家知道,进程是资源分配的单位,同一进程中的多个线程共享该进程的资源(如作为共享内存的全局变量)。Linux中所谓的“线程”只是在被创建时c转载 2015-03-24 11:30:20 · 7773 阅读 · 0 评论 -
ssh登录原理以及ssh免密码登陆
1.生成密匙对,我用的是rsa的密钥。使用命令 "ssh-keygen -t rsa"#ssh-keygen -t rsa//一路回车在当前用户的根目录下的.ssh目录生成id_rsa.pub公钥2.将公钥放到服务器上(注意存放目录位置)#scp ~/.ssh/id_rsa.pub 用户名@你的服务器的ip:~/.ssh/authorized_keys/转载 2014-07-09 09:12:03 · 3898 阅读 · 0 评论 -
Linux获取进程列表
实现思路是:遍历/proc目录下的所有进程描述文件夹,从而获取进程列表。代码如下:转载 2014-08-14 11:23:29 · 2795 阅读 · 1 评论 -
添加Android新平台
原创 2014-03-15 11:19:07 · 975 阅读 · 0 评论 -
Android Sensor Demo Framework实例
HAL 开发方式HAL Toolkit由用户开发Service服务及Service Runtime服务应用层, 用户需要开发应用程序以及对应的Service和Service Runtime。HAL层, 用户需要开发HAL模块, 设备代理对象HAL Framework使用Google提供的Framework Service提供的服务框架应用层, 用户只需要开发应用程序原创 2014-03-15 11:14:15 · 2053 阅读 · 0 评论 -
Android启动流程
Android启动流程硬件启动,加载Linux内核,挂载root文件系统init进程启动及Native服务启动System Server(蓝牙、GPS)及Android服务启动Home桌面启动init解释执行init.rc、init.xxx.rc[init.hardware.rc]Android启动过程分析init进程启动过程find ./syste原创 2014-03-12 17:36:41 · 1210 阅读 · 0 评论 -
设备驱动(十一)
应用层申请内存malloc, calloc, realloc, free内核中申请内存申请/释放/映射按页分配(每页4K)unsigned long __get_free_pages(int gfp_mask, unsigned long order)得到的内存物理地址连续gfp_mask GFP_ATOMIC 不能分配也会返回GFP_KE原创 2014-03-06 17:50:06 · 741 阅读 · 0 评论 -
设备驱动(六)
设备的并发访问互斥访问方式屏蔽中断原子操作自旋锁(关抢占, 自旋时处于运行状态, 忙等待)信号量 semaphore互斥添加位置 在具体的file_operations中添加互斥操作,例如在read, write中添加互斥操作自旋锁使用条件持有自旋锁的时间尽可能短持有锁时间严禁睡眠自旋锁使用方式spinlock_t l原创 2014-02-18 09:41:37 · 751 阅读 · 0 评论 -
设备驱动(五)
开发板与发行版编码规范MakefileDEBUG = n //开发板测试版标识ifeq ($(DEBUG),y) EXTRA_CFLAGS += -DHELLO_DEBUG //根据DEBUG,动态配置编译参数,在命令行添加宏endifobj-m += hello.oall: make -C /原创 2014-02-18 09:33:03 · 656 阅读 · 0 评论 -
void *类型的变量
可以将任意类型的指针赋值给void *类型的变量。C语言中NULL 就是(void *)0;#include #include int main(int arg0,char *args[]){ void * p; int arr[2][3]={{0}}; int a[10]; int b =1; char c = 'a'; p = arr; p = a; p = &b原创 2013-12-04 21:02:13 · 2687 阅读 · 0 评论 -
shell script
#!/bin/bash #Program:# an example for function#History# 2013/12/12 LXL FirstreleasePATH=/bin/:/sbin/:/usr/bin/:/usr/sbin/:/usr/local/bin/:/usr/local/sbin/:~/binexport PATH#function fun1()fun1(原创 2013-12-12 22:23:55 · 951 阅读 · 0 评论 -
shell script
#!/bin/bash #Program:# This program shwos shell args#History# 2013/12/12 LXL FirstreleasePATH=/bin/:/sbin/:/usr/bin/:/usr/sbin/:/usr/local/bin/:/usr/local/sbin:~/binexport PATHecho "\$0 is $0"原创 2013-12-12 10:10:20 · 890 阅读 · 0 评论 -
设置VMWARE通过桥接方式使用主机无线网卡上网
环境:WIN7旗舰版,台式机,U盘无线上网卡。虚拟软件:VMware9.0,虚拟系统:CentOS6.4需要实现虚拟机以独立机形式工作和上网。先介绍一下VMware网络设置的三种方式1 Host-only连接方式 让虚机具有与宿主机不同的各自独立IP地址,但与宿主机位于不同网段,同时为宿主主机新增一个IP地址,且保证该IP地址与各虚机IP地址位于同一网段。最终转载 2013-12-11 21:48:54 · 1988 阅读 · 0 评论