Android内核开发实践

安卓虚拟化进阶指南:Linux内核驱动定制与模拟器适配实战 本文详细介绍了安卓虚拟化环境中Linux内核驱动定制与模拟器适配的实战指南。涵盖内核版本匹配、驱动编译、Bazel构建系统使用及常见问题排查,重点解决vermagic不匹配等核心难题,帮助开发者实现自定义硬件支持和内核调试。 阅读详情
一、什么是 Android ?

Android作为Google公司推出的一款手机开发平台,其本身是基于linux内核的。Google提供的内核源代码中除了linux部分外,有很大一部分是与虚拟处理器Qemu和模拟硬件平台Goldfish相关的。所以如果想将Android移植到实际的硬件平台上需要将这部分代码剥离出来。

二、搭建开发环境

2.1在Vmware中的安装和设置Ubuntu Server 8.10

       本文选择在Win XP下的Vmware中安装Ubuntu Server 8.10作为编译开发服务器。

安装: 略。

设置:

1. 为网卡配置静态IP地址

       虚拟机和XP连接用的虚拟网卡设置IP,gateway和DNS都为192.168.0.1。

       在Vmware虚拟机中执行:

sudo vi /etc/network/interfaces 加入:

auto eth0

iface eth0 inet static

address 192.168.0.2

gateway 192.168.0.1

netmask 255.255.255.0

 

2. 配置DNS

sudo vi /etc/resolv.conf

nameserver 192.168.0.1

 

3. 安装开发工具

sudo apt-get install build-essential vim libncurses-dev lrzsz

 

4. 清理系统

sudo apt-get clean

 

2.2 建立Android内核开发环境

1、工作环境及所需软件包

1)系统环境:Ubuntu 8.10 server

2)交叉编译器:GNU Toolchain for ARM Processors

(http://www.codesourcery.com/gnu_toolchains/arm/download.html)

本文用:arm-2008q3-66-arm-none-eabi-i686-pc-linux-gnu.tar.bz2

3)Android内核源代码:linux-2.6.23-android-m5-rc14.tar.gz

(http://code.google.com/p/android/downloads/list)本文用:linux-2.6.25-android-1.0_r1.tar.gz

4)Android SDK

(http://code.google.com/android/download_list.html)

SDK中带有Android Emulator仿真器等工具,本文用:android-sdk-linux_x86-1.0_r2.zip

2、搭建交叉编译环境

       安装好系统后,把下载的Android kernel,交叉编译器和Android SDK都放在/home/xxx目录,xxx是安装系统时的普通用户的用户名。

1) 安装交叉编译器

$cd ~

$mkdir tools

$cp arm-2008q3-66-arm-none-eabi-i686-pc-linux-gnu.tar.bz2  tools

$cd tools

$tar jxvf arm-2008q3-66-arm-none-eabi-i686-pc-linux-gnu.tar.bz2

 

2) 解压Android SDK

$cp ~/android-sdk-linux_x86-1.0_r2.zip ~/tools

$cd ~/tools/

$unzip android-sdk-linux_x86-1.0_r2.zip

 

3) 解压缩内核源代码

       $mkdir sources

       $cp linux-2.6.25-android-1.0_r1.tar.gz sources

       $cd sources

       $tar zxvf linux-2.6.25-android-1.0_r1.tar.gz

       $mv kernel.git  linux-2.6.25-android-1.0_r1

 

 

三、编译和运行Android Kernel

1)  获取Android官方的默认内核配置文件.config

这个.config文件可以从SDK中得到。启动android模拟器,然后用adb从模拟器中提出内核配置文件:

$~/tools/android-sdk-linux_x86-1.0_r2/tools/emulator &

$adb pull /proc/config.gz  ~/

$mv ~/  ~/sources/linux-2.6.25-android-1.0_r1

$cd ~/sources/linux-2.6.25-android-1.0_r1

$ gunzip config.gz

$ mv config .config

 

2)编译

$~/mk-kernel.sh sources/linux-2.6.25-android-1.0_r1/

其中mk-kernel.sh脚本如下:

#!/bin/sh

#Simple script for Android Kernel compiling.

#By Neil Chiao, Mar.14,2009

export PATH=$PATH:/home/neil/tools/arm-2008q3/bin

export CROSS_COMPILE=arm-none-eabi-

cd $1||exit 1

make menuconfig

make

 

3)运行该镜像

$cd ~/tools/android-sdk-linux_x86-1.0_r2/tools/

$./emulator -kernel ~/sources/linux-2.6.25-android-1.0_r1/arch/arm/boot/zImage

 

 

/*

*By Neil Chiao (neilchiao at gmail.com)

*转载请注明出处:neilengineer.cublog.cn

*/

Android嵌入式开发 想要做Android嵌入式开发,你可以看看下面的内容 参考文档:http://blog.youkuaiyun.com/zkycdy/article/details/8296384 一:首先你必须了解ARM平台 Android 移植与驱动核心开发,当然也可以是X86和其他的平台,不过其他平台的Android智能终端开发并不是很多。         Android嵌入式智能操作系统是基于Linux内核和驱动 阅读详情

相关推荐

高通平台安卓音频驱动开发:从内核到框架的深度实践与优化

摘要:本文深入探讨高通骁龙平台下安卓音频子系统的开发与优化实践,涵盖硬件架构、驱动模型和调试方法。重点分析高通音频子系统核心组件(AFE、SLIMBus、Hexagon DSP)及其在ALSA框架下的实现,详细讲解音频路径配置与常见问题排查方法。文章提供从内核驱动到HAL层的完整技术解析,包括DTS配置、mixer_paths.xml定义等关键环节,并分享性能优化策略和典型案例分析。针对音频驱动工程师岗位,还整理了深度面试题库及答案指南,为相关技术人员提供全面的开发参考和问题解决思路。

郑伟强dev的专栏 130

[Android]从零开始的内核编译

本教程将基于小米 10S 的内核源码进行实例,其他型号的手机请自行寻找内核源码

东方怂天的博客 9755

深入 Android 驱动开发:内核、外设、系统调优与职业实践

本文摘要:聚焦Android驱动开发核心技术,系统解析Linux内核架构与Android特有驱动扩展,深入探讨常见外设驱动开发与调试方法。针对系统Bringup、稳定性优化等核心挑战提供解决方案,强调跨部门协作与技术支持的重要性。包含详实的面试题库及参考答案,涵盖基础理论、实战调试、系统协作等维度,为Android驱动工程师提供全面的技术精进指南和职业发展参考。关键词:Android驱动开发、Linux内核、外设驱动、系统稳定性、性能优化。

郑伟强dev的专栏 97

构建优雅的Android Kernel内核和AOSP平台代码阅读环境

以上就是笔者构建Android Kernel内核和AOSP平台代码阅读环境的过程,由于笔者水平有限仅给各位提供参考,希望能够抛砖引玉,也欢迎各位在评论区留言交流意见。作者:彭小铭链接:https://juejin.cn/post/7249987493939445818来源:稀土掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

chuyouyinghe的专栏 2926

资深安卓开发工程师:系统开发与优化实践

本文深入探讨资深安卓开发工程师的核心职责与实践,涵盖系统开发、性能优化、技术攻关等关键领域。在系统开发方面,详细解析了操作系统定制、内核修改及驱动开发,并提出调度算法优化方案。性能优化部分聚焦内存管理、CPU与电量优化,提供数学建模分析工具。技术难题攻克涉及硬件兼容性解决与新技术引入策略。文章还强调了项目协作与文档编写的重要性,并附有10个实用面试问题及参考答案,包括内核定制、内存泄漏排查等实际场景解决方案。全文为安卓系统开发提供全面技术指南与团队协作框架。

郑伟强dev的专栏 305

安卓开发工程师职位深度解析:基于浩通科技的招聘需求

浩通(上海)科技有限公司 安卓开发工程师职位信息岗位职责:1. 基于MCU平台的Android深度系统定制开发。2. 负责优化Android系统启动和Luncher定制。3. 负责编写和调试Android底层驱动。岗位要求:1. 大学本科以上,电子科学技术、通信、计算机等相关专业。2. 熟悉Android框架和核心服务,熟悉Android SDK,对Android Framework层相关服务有深刻理解。3. 有移动端车载地图导航开发经验者优先。

郑伟强dev的专栏 165

内核篇加载内核模块(Android10)

一、 开发前期准备 本文中使用的是linageOs源码中下载的oneplus3 安卓10内核源码进行研究测试。交叉编译链使用的是linageOs源码中的交叉编译链。 lineageOs源码中oneplus3内核源码位置路径: /home/qiang/lineageOs/kernel/oneplus/msm8996 lineageOs源码中交叉编译目录位置路径: /home/qiang/lineageOs/prebuilts/gcc/linux-x86 为了方便研究测试,不破坏lineag

哆啦安全 2390

4.图像sensor的特性和驱动解析

例子:sensor驱动自己提供操作曝光时间的函数和获取曝光时间的函数,然后将这个函数注册到ISP库和3A算法库,3A算法库根据外部光照强度计算出一个Sensor曝光时间的设置值,ISP库得到这个设置值,然后通过Sensor之前注册的回调函数,把这个值设置到Sensor的硬件寄存器中去,实现整个过程。是为 ISP 配置正确的输入时序。(1)修改驱动源码(sambashar\Hi3518E_SDK_V1.0.3.0\package\mpp\component\isp\sensor\ar0130)

weixin_53762042的博客 3566

Android内核开发 学习笔记

Android内核开发:序Android内核开发:开发板选购Android内核开发:理解和掌握repo工具下载manifest仓库 repo init -u https://android.googlesource.com/platform/manifest 如果要选择特定版本的Android源码,或者在已下载的源码基础上切换到其他版本,则可以使用-b选项: repo init -u

张小强的专栏 3915

大漠多线程增强版:解决窗口消失、坐标错乱与识别卡死

多线程环境下窗口自动化面临的核心挑战,本质是GDI资源非线程安全、HWND生命周期失控及图像引擎状态污染三大底层问题。Windows GUI编程中,跨线程共享hDC、缓存失效的窗口句柄、OpenCV静态Mat等设计缺陷,导致FindPic失败、GetCursorPos异常、坐标跳变等典型故障。本方案通过线程局部存储(TLS)重构资源生命周期、WinEventHook+心跳探测构建实时窗口状态链、ABI对齐的多语言内存契约,实现稳定低延迟的并发UI识别与控制。适用于游戏多开监控、电商RPA、后台UI状态采集等

weixin_30561177的博客 477

从零开始搭建属于自己的语音识别API服务器(ASRT开源项目)

材料准备 云服务器 (本人使用的的是阿里云服务器 Ubuntu(Linux操作系统)) 环境搭建 1. Python 3.7 话不多说直接上代码 sudo su yum -y install git yum -y install gcc yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-deve

zhi_qian的博客 5648

零基础玩转Android安全系列文章

Android安全系列基础文章 Android安全基础 Android逆向分析常用方法 IDA静态动态逆向分析基础 IDA动态调试逆向分析Android so Frida Hook的使用方法 Objection动态分析App Radare2逆向分析dex/so/二进制等文件的使用方法 AppMon动态安全分析App Adhrit+radare2一键静态安全分析App Andrax搭建Android手机的渗透测试平台 Android安全测试工具大全 C#开源项目-二进制文件的反编译器

哆啦安全 1104

一致性总线CMN600AE-ARM系列

主要介绍一致性总线CMN600AE,根据arm官网的spec来概述其模块。提示:以下是本篇文章正文内容,下面案例可供参考CMN600ae是基于Mesh拓扑结构,对外支持AMBA CHI/ACE-LITE等接口,内部改用路由结构转发数据,并提供硬件一致性和系统缓存,还支持多芯片互联。CMN600在T16FFC上可以做到2Ghz,另外AE版本增加了车轨芯片的安全功能,总线内部采用EDC检查,接口采用的奇校验。

tujiuguo3994的博客 6297

FW:Android内核开发实践

Android内核开发实践 http://www.yuanma.org/data/2009/0407/article_3604.htm [内容摘要]     Android作为Google公司推出的一款手机开发平台,其本身是基于linux内核的。Google提供     的内核源代码中除了linux部分外,有很大一部分是与虚拟处理器Qemu和模拟硬件平台     Goldfish相关的。

zxg519的专栏 701

单细胞测序流程(十)KEGG通路富集分析与可视化圈图实战解析

本文详细解析了单细胞测序数据分析中KEGG通路富集分析与可视化圈图的完整实战流程。从差异表达基因列表出发,通过R语言进行KEGG富集分析,并利用Perl脚本进行基因ID转换,最终使用GOplot包绘制高级可视化圈图,帮助研究者将基因列表转化为有意义的生物学故事。

i7j8k9l的博客 406

必看!wechat-article-exporter:轻松批量下载公众号文章

微信搜索“”关注公众号。在信息爆炸的时代,我们每天都会接触到大量优秀的微信公众号文章。有时候,我们想要将这些精彩的内容保存下来,以便日后回顾或者分享给更多的人。然而,微信公众号并没有提供直接的批量下载功能,这给我们带来了不少困扰。今天,我要给大家分享一款非常实用的软件——wechat-article-exporter,它能够帮助我们轻松地批量下载微信公众号文章,让你不再为文章的保存而烦恼。

王乐平 技术博客 4356

FW:Android内核开发实践_拔剑-浆糊的传说_新浪博客

Android内核开发实践 http://www.yuanma.org/data/2009/0407/article_3604.htm [内容摘要] Android作为Google公司推出的一款手机开发平台,其本身是基于linux内核的。Google提供 的内核源代码中除了linux部分外,有很大一部分是与虚拟处理器Qemu和模拟硬件平台 Gol...

拔剑—浆糊的传说 148

基于业务目标的Agent自动化评测体系设计:超越准确率的有效性衡量

我们还是以电商全链路服务Agent我们还是以电商全链路服务Agent。

AI架构全栈开发实战笔记 318

Android内核定制与刷机包开发:AnyKernel3工具深度实践指南

Android内核定制过程中,开发者常面临设备兼容性差、root权限丢失和分区管理复杂等问题。AnyKernel3工具通过动态适配机制和模块化设计,为Android内核定制与刷机包开发提供了灵活解决方案。本文将从技术原理与实操细节出发,全面解析如何利用AnyKernel3实现跨设备内核移植、动态分区适配和ramdisk安全修改,帮助进阶开发者掌握高效刷机包开发技术。 ## 解构动态分区适配方案

gitblog_01008的博客 460

Labview界面多按钮控件的一种处理方法

当界面中存在多个按钮控件时候,此时如果逐个为每个控件添加事件条件则会显得较为麻烦,此处提供了一种对多控件进行批量处理的方法

miracleis的博客 2704

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

rom-course实战入门:从环境搭建到第一次编译安卓ROM

安卓系统定制是一项充满挑战但极具乐趣的技术,通过rom-course项目,即使是新手也能快速掌握从环境搭建到成功编译安卓ROM的全过程。本教程将带你一步步完成安卓系统定制的入门实践,让你轻松迈出ROM开发的第一步。 ## 准备工作:搭建编译环境 ### Windows系统环境配置 Windows用户可以通过WSL2或虚拟机来搭建Linux编译环境。WSL2因其轻量高效成为推荐选择,实测编译耗

gitblog_00611的博客 334

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Android内核开发:序

转眼间我的《Android开发实践》系列文章已经写了三十多篇了,很多文章写得还是蛮用心的,所以很感谢51CTO的编辑们经常加精和推荐。我发现通过写作的确可以逼着自己去深入了解一些平时开发中并不会去挖掘的细节,这对自己帮助挺大的,后面遇到好的主题我还会继续写下去。以前写的《Android开发实践》这个系列主要偏向Android应用层的开发,从一开始学习Android就计划好了要往底层深入,如今正好在...

weixin_33728708的博客 159

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Binder Android IPC Linux内核驱动资源下载:助力Android开发者深入理解IPC机制

Binder Android IPC Linux内核驱动资源下载:助力Android开发者深入理解IPC机制 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 Binder Android IPC Linux内核驱动资源下载,这是一套专为Android开发者和研究人员打造的资源库。它不仅包含了关于Binder进程间通信(IPC)机制的深入文档,还提供了相关的源代码和示例,...

gitblog_06788的博客 692

【亲测免费】 探索Android内核奥秘:《Android系统源代码情景分析 第3版》资源推荐

探索Android内核奥秘:《Android系统源代码情景分析 第3版》资源推荐 【下载地址】Android系统源代码情景分析第3版资源下载 Android系统源代码情景分析 第3版 资源下载本仓库提供《Android系统源代码情景分析 第3版》的资源文件下载 ...

gitblog_09771的博客 372

保姆级教程:在安卓内核中注册和使用vendor hook的完整流程

本文提供了一份详细的安卓内核vendor hook注册与使用教程。通过非侵入式方法,开发者可在关键内核路径注入自定义逻辑,实现系统深度定制与性能优化。教程涵盖从理解钩子机制、定义函数原型、修改内核源码到编写独立模块的完整流程,并分享了编译部署与调试避坑的实用经验。

agile9scrum的博客 979

RK356X安卓11开发板SELINUX关闭全攻略:从调试到生产环境适配

本文详细介绍了RK356X安卓11开发板SELINUX的关闭与调优方法,从调试到生产环境的全链路实践。内容涵盖SELINUX机制解析、开发阶段快速调试方案、生产环境策略定制以及编译系统深度适配指南,帮助开发者高效解决RK356X平台上的SELINUX相关问题。

sand8的博客 181
上一篇: 首届 ANA(Android Network Awards)提名公布
下一篇: Activity之间传递类对象
sukyle
博客等级 码龄18年 41粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值