<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[faye_li的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/faye_li</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; faye_li]]></copyright><item><title><![CDATA[android底层开发学习笔记十（Android系统定制）]]></title><link>https://blog.youkuaiyun.com/faye_li/article/details/147596847</link><guid>https://blog.youkuaiyun.com/faye_li/article/details/147596847</guid><author>faye_li</author><pubDate>Mon, 28 Apr 2025 22:23:58 +0800</pubDate><description><![CDATA[在Android目录（fspad-733-6.0/androidM）中执行pack命令，生成boot-resource.fex文件（./tools/pack/out/boot-resource.fex）存放路径：fspad-733-6.0/androidM/out/target/product/astar-fspad_733/system/media。1、添加目录：~ /fspad-733-6.0/androidM/device/farsight/farsight-733。]]></description><category></category></item><item><title><![CDATA[android底层开发学习笔记九（hal层架构-2）]]></title><link>https://blog.youkuaiyun.com/faye_li/article/details/147568417</link><guid>https://blog.youkuaiyun.com/faye_li/article/details/147568417</guid><author>faye_li</author><pubDate>Sun, 27 Apr 2025 20:51:25 +0800</pubDate><description><![CDATA[2、点击app，可以看到c_open,c_ioctl,c_close和hal_open,hal_ioctl,hal_close的日志都打印了，说明c库层能通过stub调用hal层代码。2、定义结构体struct led_device_t，封装hal_open，hal_ioctl, hal_close等函数，并且集成 struct hw_device_t；2、修改c_open,c_ioctl,c_cloae代码，通过代理人调用hal层接口。二、编译hal层库代码：编写Android.mk。]]></description><category></category></item><item><title><![CDATA[android底层开发学习笔记八（hal层架构-1）]]></title><link>https://blog.youkuaiyun.com/faye_li/article/details/147540622</link><guid>https://blog.youkuaiyun.com/faye_li/article/details/147540622</guid><author>faye_li</author><pubDate>Sat, 26 Apr 2025 18:37:06 +0800</pubDate><description><![CDATA[封装这些函数，同时第一个成员包含struct hw_device_t （继承struct hw_device_t ），这样可以通过返回给上层c库的struct hw_device_t 地址访问自定义的结构体led_device_t（struct hw_device_t 指针强转成led_device_t指针，结构体第一个变量的地址就是结构体的地址），进而调用led_device_t中的ioctl, read, wirte函数。1）. 并不是所有的硬件设备都有标准的Linux Kernel的接口;]]></description><category></category></item><item><title><![CDATA[android底层开发学习笔记七（JNI机制下-2）]]></title><link>https://blog.youkuaiyun.com/faye_li/article/details/147376833</link><guid>https://blog.youkuaiyun.com/faye_li/article/details/147376833</guid><author>faye_li</author><pubDate>Sun, 20 Apr 2025 22:30:20 +0800</pubDate><description><![CDATA[上一篇在x86架构的虚拟机上实现了一个java程序，调用底层驱动，接下来要实现一个java应用，可以调用底层驱动，在arm设备上运行。6）将libnative.so放到平板的/vendor/lib或/system/lib目录中。2）声明本地实现的方法：java_open, jaca_ioctl, java_close。5、修改c代码库对led设备文件进行操作，并重新编译，放到设备的/system/lib目录中。1、创建一个LedService类，实现控制Led灯的方法，以便LED-APP调用。]]></description><category></category></item><item><title><![CDATA[android底层开发学习笔记六（JNI机制下-1）]]></title><link>https://blog.youkuaiyun.com/faye_li/article/details/147355947</link><guid>https://blog.youkuaiyun.com/faye_li/article/details/147355947</guid><author>faye_li</author><pubDate>Sat, 19 Apr 2025 21:18:22 +0800</pubDate><description><![CDATA[文件系统中可以看到/dev/myled0 已经生成，在c实现的代码中通过这设备文件控制驱动。b、字符设备注册：初始化注册字符设备，并绑定字符设备的操作方法fops。一、目标：实现三层调用--java调用上层c代码，上层c代码调用底层驱动。1、目标：java代码调用驱动的open, ioctl,close函数。以上实现了java对c代码的调用，和c代码对驱动的调用。二、三个层次：Java代码，c代码，底层driver代码。4、修改c代码，c中对以上设备节点进行操作。a、实现c代码对应的函数。]]></description><category></category></item><item><title><![CDATA[android底层开发学习笔记五（JNI机制上）]]></title><link>https://blog.youkuaiyun.com/faye_li/article/details/147305519</link><guid>https://blog.youkuaiyun.com/faye_li/article/details/147305519</guid><author>faye_li</author><pubDate>Thu, 17 Apr 2025 14:26:04 +0800</pubDate><description><![CDATA[JNI 是 Java 语言的一个重要特性，它使得 Java 程序能够调用和被 C/C++ 程序调用，从而充分利用 Java 的跨平台特性和 C/C++ 的高性能特性。3）java如何调用c库中的Jni_onload函数，或者c库中的Jni_onload函数怎么知道是哪个类调用了Jni_onload函数。通过javah，利用.class文件生成JNI的.h文件（生成后的JNI头文件包含了java函数在JNI层的声明）1）实现原理：直接告诉native函数其在JNI中对应函数的指针（Jni_onload）;]]></description><category></category></item><item><title><![CDATA[android底层开发学习笔记四（Android启动流程）]]></title><link>https://blog.youkuaiyun.com/faye_li/article/details/147033070</link><guid>https://blog.youkuaiyun.com/faye_li/article/details/147033070</guid><author>faye_li</author><pubDate>Mon, 07 Apr 2025 00:42:50 +0800</pubDate><description><![CDATA[rcS中调用mount -s 挂载内存文件系统（fstab中所有设备），内存文件系统有/dev或者/proc，它们是能显示内存信息的文件，这些文件在fstab中记录。init进程的路径：linux@ubuntu:~/fspad-733-6.0/androidM/system/core/init$ vi init.cpp。~/fspad-733/androidM/system/core/rootdir/init.zygote32.rc，用于启动zygote服务。]]></description><category></category></item><item><title><![CDATA[android底层开发学习笔记三（Android系统代码下载、编译和烧写）]]></title><link>https://blog.youkuaiyun.com/faye_li/article/details/147018456</link><guid>https://blog.youkuaiyun.com/faye_li/article/details/147018456</guid><author>faye_li</author><pubDate>Sun, 06 Apr 2025 01:29:07 +0800</pubDate><description><![CDATA[工具链：linux@ubuntu:~/fspad-733-6.0/lichee/out/sun8iw5p1/android/common/buildroot/external-toolchain。sudo vi /etc/environment，将:/home/linux/external-toolchain/bin添加到path变量。将external-toolchain复制到家目录中：/home/linux/external-toolchain/bin。2、设备进入到fastboot模式，有两个方法。]]></description><category></category></item><item><title><![CDATA[android底层开发学习笔记二（Android模块的编译）]]></title><link>https://blog.youkuaiyun.com/faye_li/article/details/147012878</link><guid>https://blog.youkuaiyun.com/faye_li/article/details/147012878</guid><author>faye_li</author><pubDate>Sat, 05 Apr 2025 16:39:25 +0800</pubDate><description><![CDATA[LOCAL_MODULE_PATH:=$(LOCAL_PATH)/lib（编译静态库的路径不能指定，只能存放在默认编译输出的路径中）#LOCAL_LDFLAGS:=-L $(LOCAL_PATH)/lib -ladd(-l+add库名)LOCAL_MODULE_PATH:= $(LOCAL_PATH)  指定编译生成文件存放的路径。LOCAL_LDFLAGS:=$(LOCAL_PATH)/lib/libadd.so (写全路径)LOCAL_SRC_FILES := hello-jni.c  指定源文件。]]></description><category></category></item><item><title><![CDATA[android底层开发学习笔记一（Android系统软件架构）]]></title><link>https://blog.youkuaiyun.com/faye_li/article/details/147002131</link><guid>https://blog.youkuaiyun.com/faye_li/article/details/147002131</guid><author>faye_li</author><pubDate>Fri, 04 Apr 2025 20:14:28 +0800</pubDate><description><![CDATA[]]></description><category></category></item></channel></rss>