<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[niotong2014的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/niotong2014</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; niotong2014]]></copyright><item><title><![CDATA[内核驱动按照文件路径读写文件]]></title><link>https://blog.youkuaiyun.com/niotong2014/article/details/106545607</link><guid>https://blog.youkuaiyun.com/niotong2014/article/details/106545607</guid><author>niotong2014</author><pubDate>Thu, 04 Jun 2020 14:14:17 +0800</pubDate><description><![CDATA[直接上代码，此段代码选取自realtek的wifi驱动中的一段代码
    fp = filp_open("/data/wifimac.txt", O_RDWR,  0644);
    if (IS_ERR(fp)) {
        pEEPROM-&gt;bloadmac_fail_flag = _TRUE;
        DBG_871X("Error, wifi mac address file doesn't exist.\n");
    } else {
        fs = get]]></description><category></category></item><item><title><![CDATA[[Android]如何在root目录下新建文件夹]]></title><link>https://blog.youkuaiyun.com/niotong2014/article/details/100693986</link><guid>https://blog.youkuaiyun.com/niotong2014/article/details/100693986</guid><author>niotong2014</author><pubDate>Tue, 10 Sep 2019 11:41:52 +0800</pubDate><description><![CDATA[烧录android的固件之后，在根目录下有/sbin /sys /system /dev/ proc /data /mnt /root等目录，想添加一个新的目录，那么得弄清楚这些目录都是怎样生成的，查看代码android/system/core/rootdir/Android.mk的124行左右，有如下图这样的

修改这里添加你想添加的目录，这样最终编译完之后out/target/product/...]]></description><category></category></item><item><title><![CDATA[如何解决制作的rootfs无法加载驱动]]></title><link>https://blog.youkuaiyun.com/niotong2014/article/details/100556491</link><guid>https://blog.youkuaiyun.com/niotong2014/article/details/100556491</guid><author>niotong2014</author><pubDate>Thu, 05 Sep 2019 14:05:58 +0800</pubDate><description><![CDATA[问题描述和分析解决
在制作ubuntu使用的文件系统的时候，开机之后发现自己制作的固件无法加载驱动，看串口打印的logcat，有


[FAILED] Failed to start Load Kernel Modules.
See ‘systemctl status systemd-modules-load.service’ for details.

这样的错误。执行“systemctl s...]]></description><category></category></item><item><title><![CDATA[Linux如何验证AP6212(AP6236)的bluetooth功能]]></title><link>https://blog.youkuaiyun.com/niotong2014/article/details/100554350</link><guid>https://blog.youkuaiyun.com/niotong2014/article/details/100554350</guid><author>niotong2014</author><pubDate>Thu, 05 Sep 2019 11:45:09 +0800</pubDate><description><![CDATA[开发环境
cpu:ARM芯片
系统：使用buildroot（版本为2016.11）编译出的linux系统（无界面）
BT模块：AP6212(该芯片有bt+wifi功能)


测试步骤
1.加载bcmdhd驱动
2.rfkill来控制bt的供电
3.执行brcm_patchram_plus程序控制ap6212的工作方式以及固件下载
以上三个命令我写入了脚本openbt.sh


#!/bin/s...]]></description><category></category></item><item><title><![CDATA[如何在64位安卓系统中使用32位SO库]]></title><link>https://blog.youkuaiyun.com/niotong2014/article/details/80461980</link><guid>https://blog.youkuaiyun.com/niotong2014/article/details/80461980</guid><author>niotong2014</author><pubDate>Sat, 26 May 2018 15:10:00 +0800</pubDate><description><![CDATA[原文链接

背景知识：

对于64位系统的编译规则，可参考：http://source.android.com/source/64-bit-builds.html



关键点：

JAVA编译不分32bit和64bit（APK，JAR）可执行文件，默认编译64位动态库和静态库，默认同时编译32bit和64bit版本通过LOCAL_MULTILIB可以指定特定模块编译32bit或64bit或都编译...]]></description><category></category></item><item><title><![CDATA[Android的权限说明（apk的运行权限和sepolicy）]]></title><link>https://blog.youkuaiyun.com/niotong2014/article/details/80351159</link><guid>https://blog.youkuaiyun.com/niotong2014/article/details/80351159</guid><author>niotong2014</author><pubDate>Thu, 17 May 2018 19:55:13 +0800</pubDate><description><![CDATA[参考链接地址

Android sepolicy知识链接

APK如何获取System权限 
Android 7.0 SEAndroid app权限配置 
1.首先了解一个基础知识ps -Z 和ls -Z,这两个命令分别查看进程和文件的sepolicy属性 
下面是apk拥有system权限

u:r:system_app:s0              system    30098 1653 ...]]></description><category></category></item><item><title><![CDATA[STM32时钟说明]]></title><link>https://blog.youkuaiyun.com/niotong2014/article/details/79861545</link><guid>https://blog.youkuaiyun.com/niotong2014/article/details/79861545</guid><author>niotong2014</author><pubDate>Mon, 09 Apr 2018 09:45:04 +0800</pubDate><description><![CDATA[用时钟源来产生时钟！ 
在STM32中，有五个时钟源，为HSI、HSE、LSI、LSE、PLL。 
①、HSI是高速内部时钟，RC振荡器，频率为8MHz。 
②、HSE是高速外部时钟，可接石英/陶瓷谐振器，或者接 
外部时钟源，频率范围为4MHz~16MHz。 
③、LSI是低速内部时钟，RC振荡器，频率为40kHz。 
④、LSE是低速外部时钟，接频率为32.768kHz的石英晶体。 
⑤、PL...]]></description><category></category></item><item><title><![CDATA[Android4.4开机向导]]></title><link>https://blog.youkuaiyun.com/niotong2014/article/details/78424030</link><guid>https://blog.youkuaiyun.com/niotong2014/article/details/78424030</guid><author>niotong2014</author><pubDate>Thu, 02 Nov 2017 13:40:05 +0800</pubDate><description><![CDATA[1.前言 
首次刷机之后，第一次启动系统会运行一个开机向导，该向导会设置系统语言  ，wifi,日期和时间等，由于现在需要去掉该向导，所得找到是那个apk干的这件事。 
2.搜索apk 
请先阅读此文章 
我发现Provision.apk并没有编译，所以从启动向导来分析，该apk应该是在priv-app中，所以我从priv-app中找，在该文件夹中找到SetupWizard.apk，从apk的名字大]]></description><category></category></item><item><title><![CDATA[dd fdisk mount相关命令的总结]]></title><link>https://blog.youkuaiyun.com/niotong2014/article/details/78391215</link><guid>https://blog.youkuaiyun.com/niotong2014/article/details/78391215</guid><author>niotong2014</author><pubDate>Mon, 30 Oct 2017 11:14:51 +0800</pubDate><description><![CDATA[概论 
工作中经常会碰到dd fdisk mount这些命令，比如这段时间玩banana-pi,在生成镜像和制作启动卡，会经常用到dd fdisk mount这些命令。常用参数 
if=文件名：输入文件名，缺省为标准输入。即指定源文件。< if=input file >  
of=文件名：输出文件名，缺省为标准输出。即指定目的文件。< of=output file >  
ibs=bytes：一次读]]></description><category></category></item><item><title><![CDATA[banana-pi M3的linux的编译和体验]]></title><link>https://blog.youkuaiyun.com/niotong2014/article/details/78357476</link><guid>https://blog.youkuaiyun.com/niotong2014/article/details/78357476</guid><author>niotong2014</author><pubDate>Thu, 26 Oct 2017 19:00:54 +0800</pubDate><description><![CDATA[1.体验Linux 
手头上刚刚好有一块banana-pi，所以想试试Linux，首先在官网下载了个ArchLinux镜像和制作SD卡工具的下载路径，先使用SD Formatter这个工具格式化SD卡，然后用Win32DiskImager来制作启动卡，接着将SD卡插入M3，连上HDMI，启动就可以看到系统启动，当然，你也可以将XXXX.img放入U盘（如果你启动卡有足够的空间也可以放入到启动卡），m]]></description><category></category></item><item><title><![CDATA[ssh免密登录和ssh配置]]></title><link>https://blog.youkuaiyun.com/niotong2014/article/details/71512745</link><guid>https://blog.youkuaiyun.com/niotong2014/article/details/71512745</guid><author>niotong2014</author><pubDate>Tue, 09 May 2017 22:49:22 +0800</pubDate><description><![CDATA[生成本地机器上生成公钥和私钥
将公钥通过scp命令发送到远程服务器
scp .ssh/regan.pub regan@192.168.1.181:/home/regan/regan.pub
将regan.pub添加到.ssh/authorized_keys文件里
cat regan.pub >> .ssh/authorized_keys
chmod 600 .ssh/authorized_keys]]></description><category></category></item><item><title><![CDATA[android的智能指针]]></title><link>https://blog.youkuaiyun.com/niotong2014/article/details/70170943</link><guid>https://blog.youkuaiyun.com/niotong2014/article/details/70170943</guid><author>niotong2014</author><pubDate>Fri, 14 Apr 2017 12:12:25 +0800</pubDate><description><![CDATA[android引入只能指针是为了解决c++指针使用不当造成的内存泄漏问题。 
  智能指针可以理解为两个对象A和B，当A引用B的时候，B也引用A，当需要释放对象A所占用的内存的时候，由于B还在引用着A，所以不能释放对象A。同理想释放B的时候，A还引用着B，所以B也不能释放，这就是一个问题。基于这个引入了强指针和弱指针，假设AB是父子关系，A引用B就是强引用，B引用A是弱引用。对象A的生命周期不受对象]]></description><category></category></item><item><title><![CDATA[codec音频编解码器驱动分析]]></title><link>https://blog.youkuaiyun.com/niotong2014/article/details/70146100</link><guid>https://blog.youkuaiyun.com/niotong2014/article/details/70146100</guid><author>niotong2014</author><pubDate>Wed, 12 Apr 2017 19:24:19 +0800</pubDate><description><![CDATA[之前在公司做过cs42l52编解码器的驱动，不过现在已然已经忘记了。目前手中有友善之臂的一款三星4412的开发板，那么就分析这款产品的音频编解码器吧。
 
如图所示，可以看出该开发板使用的是WM8960的音频编解码器，查找源码android-5.0.2/linux-3.0.86/sound/soc/codecs/wm8960.c存在，查看mach-tiny4412.c可以看到如下图 
 
很显然可以]]></description><category></category></item><item><title><![CDATA[LCD驱动分析]]></title><link>https://blog.youkuaiyun.com/niotong2014/article/details/70144710</link><guid>https://blog.youkuaiyun.com/niotong2014/article/details/70144710</guid><author>niotong2014</author><pubDate>Wed, 12 Apr 2017 17:25:29 +0800</pubDate><description><![CDATA[由于最近面试需要，特此整理一下LCD驱动的调试，因为之前在公司调试的RK平台下的LCD已经忘记了，所以以我手中现有的友善之臂tiny4412为例。先了解下LCD有关的知识吧。
LCD基础知识连接LCD常用接口TTL（RGB）、LVDS、EDP、MIPI，我个人理解就是从ARM中出来的是RGB接口的，本来这个可以直接用于显示到LCD屏，但由于抗干扰等等因素所以需要先将RGB数据通过芯片（转换芯片）转换]]></description><category></category></item><item><title><![CDATA[分析改变Brightness的流程]]></title><link>https://blog.youkuaiyun.com/niotong2014/article/details/69664778</link><guid>https://blog.youkuaiyun.com/niotong2014/article/details/69664778</guid><author>niotong2014</author><pubDate>Sat, 08 Apr 2017 11:07:25 +0800</pubDate><description><![CDATA[系统修改屏幕亮度只用修改SetttingProvider中的Settings.System.SCREEN_BRIGHTNESS这个值就可以了，那么系统在这个背后都做了些什么呢？通过搜索Settings.System.SCREEN_BRIGHTNESS这个关键字，可以在PowerManagerService.java这个文件中找到，分析代码，截取片段如下//这个是SettingProvider的监听器]]></description><category></category></item><item><title><![CDATA[分析WifiStateMachine如何启动wifi驱动]]></title><link>https://blog.youkuaiyun.com/niotong2014/article/details/69663860</link><guid>https://blog.youkuaiyun.com/niotong2014/article/details/69663860</guid><author>niotong2014</author><pubDate>Sat, 08 Apr 2017 00:53:48 +0800</pubDate><description><![CDATA[WifiStateMachine中通过mWifiNative.loadDriver()来加载驱动，loadDriver对应jni的一个native方法，grep搜索下结果如下
  ./opt/net/wifi/service/jni/com_android_server_wifi_WifiNative.cpp:1062:    { “loadDriver”, “()Z”,  (void *)andr]]></description><category></category></item><item><title><![CDATA[由WifiStateMachine来理解StateMachine]]></title><link>https://blog.youkuaiyun.com/niotong2014/article/details/69663546</link><guid>https://blog.youkuaiyun.com/niotong2014/article/details/69663546</guid><author>niotong2014</author><pubDate>Fri, 07 Apr 2017 23:49:27 +0800</pubDate><description><![CDATA[前言：前一段时间在公司分析一个由于突然关掉路由器，导致设备wifi崩溃的问题。通过一段时间的摸索和学习，了解到wifi状态机的工作原理。
所谓状态机我的理解是，表示一个物体它现在所处的状态，以及所处状态对于不同指令的处理。以下是我本人所持有的开发板所带的android5.0的wifi状态机的所有状态
 
    从图片中的代码可以看出这差不多是个树形结构（由于图片上传大小的限制，我自己画图没办法上传]]></description><category></category></item><item><title><![CDATA[ubuntu系统启动项的修改]]></title><link>https://blog.youkuaiyun.com/niotong2014/article/details/61191363</link><guid>https://blog.youkuaiyun.com/niotong2014/article/details/61191363</guid><author>niotong2014</author><pubDate>Fri, 10 Mar 2017 09:16:38 +0800</pubDate><description><![CDATA[1.原理 
    启动ubuntu后,你发现的启动画面是由/boot/grub/grub.cfg这个文件决定的,你能从这个文件中找到启动画面的一些启动项.而/boot/grub/grub.cfg这个文件本质上是由update-grub这个命令然后结合/etc/grub.d/这个文件夹下的00_header  05_debian_theme  10_linux  20_linux_xen  20_m]]></description><category></category></item><item><title><![CDATA[RandomAccessFile读写分区设备节点]]></title><link>https://blog.youkuaiyun.com/niotong2014/article/details/53925508</link><guid>https://blog.youkuaiyun.com/niotong2014/article/details/53925508</guid><author>niotong2014</author><pubDate>Thu, 29 Dec 2016 11:24:43 +0800</pubDate><description><![CDATA[最近遇到一个apk读写分区的问题,代码如下RandomAccessFile file = new RandomAccessFile("/dev/block/platform/by-name/logo", "rw");这个方法会抛出FileNotFoundException这个异常.然后我就纳闷了首先想到的是AndroidManifest.xml的权限问题,但是尝试半天之后依旧是这个异常,通过adb]]></description><category></category></item><item><title><![CDATA[init.rc在boot中执行shell脚本,无法创建目录]]></title><link>https://blog.youkuaiyun.com/niotong2014/article/details/53925357</link><guid>https://blog.youkuaiyun.com/niotong2014/article/details/53925357</guid><author>niotong2014</author><pubDate>Thu, 29 Dec 2016 11:12:32 +0800</pubDate><description><![CDATA[我试了下在init.rc中boot段执行shell脚本,最终脚本可以运行却无法创建目录.目前原因尚不清楚,所以建议创建目录的相关东西尽量参考init.rc来做.]]></description><category></category></item></channel></rss>