精华内容
下载资源
问答
  • 玩转Android10源码开发定制(11)内核篇之安卓内核模块开发编译
    展开全文
  • 配置交叉编译环境见《Android内核开发 Goldfish Linux Kernel编译及安卓虚拟机测试》 Makefile文件 注意Linux kernel源码目录需要提前编译,否则内核模块会编译出错。

    本文出处: http://blog.csdn.net/leytton/article/details/52736829


    1、配置交叉编译环境

    见《Android内核开发 Goldfish Linux Kernel编译及安卓虚拟机测试


    2、word_count.c文件

    #include<linux/module.h>
    #include<linux/init.h>
    #include<linux/kernel.h>
    #include<linux/fs.h>
    #include<linux/miscdevice.h>
    #include<asm/uaccess.h>
    
    //设备文件名
    #define DEVICE_NAME "word_count"
    
    //保存读写字符串
    static unsigned char mem[1000];
    
    //读写字符串中字符数量,ssize_t有符号int,size_t无符号int
    static ssize_t char_count=0;
    
    //  从设备文件读取数据时调用该函数  
    //  file:指向设备文件、buf:保存可读取的数据   count:可读取的字节数  ppos:读取数据的偏移量
    static ssize_t word_count_read(struct file *file,char __user *buf,size_t read_count,loff_t *ppos)
    {
    read_count = char_count;
    //printk("read:debug:%d\n",(int)char_count);
    //  将内核空间的数据复制到用户空间,buf中的数据就是从设备文件中读出的数据
    if(copy_to_user(buf, (void*)mem,read_count)){
    return -EINVAL;
    
    }
    printk("read:read_count:%d\n",(int)read_count);
    char_count=0;
    return read_count;
    }
    
    //  向设备文件写入数据时调用该函数  
    //  file:指向设备文件、buf:保存写入的数据   count:写入数据的字节数  ppos:写入数据的偏移量  
    static ssize_t word_count_write(struct file *file,const char __user *buf,size_t write_count,loff_t *ppos)
    {
    char_count=write_count;
      //  将用户空间的数据复制到内核空间,mem中的数据就是向设备文件写入的数据 
    if(copy_from_user((void*)mem,buf,write_count)){
    return -EINVAL;
    }
    mem[write_count]='\0';
    printk("count_write:write_count:%d\n",(int)char_count);
    return char_count;
    }
    
    static struct file_operations dev_fops=
    {.owner=THIS_MODULE, .read=word_count_read, .write=word_count_write};
    static struct miscdevice misc=
    {.minor=MISC_DYNAMIC_MINOR, .name=DEVICE_NAME, .fops=&dev_fops};
    
    //Linux驱动装载函数
    static int __init word_count_init(void)
    {
    int ret;
    //注册设备文件
    ret=misc_register(&misc);
    printk("word_count init success!");
    return ret;
    }
    
    //Linux驱动卸载函数
    static void __exit word_count_exit(void)
    {
    // 注销(移除)设备文件  
    misc_deregister(&misc);  
    printk("word_count exit success!");
    }
    
    //注册装载函数
    module_init(word_count_init);
    //注册卸载函数
    module_exit(word_count_exit);
    
    MODULE_AUTHOR("Leytton");   
    MODULE_DESCRIPTION("A simple Word Count Driver");  
    MODULE_ALIAS("a simplest module"); 
    MODULE_LICENSE("MIT");

    3、Makefile文件

    注意Linux kernel源码目录需要提前编译,否则内核模块会编译出错。见《Android内核开发 Goldfish Linux Kernel编译及安卓虚拟机测试

    TARGET=word_count
    KDIR=/mnt/workbench/android-goldfish-3.4 #Linux kernel源码目录
    PWD=$(shell pwd)
    ARCH=arm
    CROSS_COMPILE=arm-linux-androideabi-
    CC=$(CROSS_COMPILE)gcc
    LD=$(CROSS_COMPILE)ld
    obj-m:=$(TARGET).o
    default:
    make EXTRA_CFLAGS="-D_CONFIG_ARM_ -fno-pic" -C $(KDIR) M=$(PWD) modules
    clean:
    rm -f *.o *.mod.o *.mod.c *.symvers *.order

    make编译

    make clean清除编译过程中生成的垃圾文件

    【注意 测试时不加EXTRA_CFLAGS="-D_CONFIG_ARM_ -fno-pic" 加载内核模块时会出现错误 insmod: init_module 'word_count.ko' failed (Exec format error)】



    4、adb连接Android虚拟机加载内核模块

    adt-bundle-linux-x86_64-20140702/sdk/platform-tools目录下
    [hadoop@localhost platform-tools]$ ./adb push word_count.ko /llqqww/
    130 KB/s (5968 bytes in 0.044s)
    [hadoop@localhost platform-tools]$ ./adb shell
    root@generic:/ # dmesg -c
    255|root@generic:/ #insmod /llqqww/word_count.ko                               
    root@generic:/ # echo hello > /dev/word_count
    root@generic:/ # cat /dev/word_count
    hello
    root@generic:/ # 
    root@generic:/ # rmmod word_count.ko
    root@generic:/ # dmesg
    word_count init success!
    count_write:write_count:6
    <4>read:read_count:6
    <4>read:read_count:0
    <4>word_count exit success!
    root@generic:/ #



    展开全文
  • Linux有两种内核形式,一种是安卓系统用的宏内核,另一个就是华为的鸿蒙系统使用的是微内核,微内核的设计理念是尽可能的简化,在微内核操作系统中,内核是指精心设计的、能实现现代OS最基本的核心功能的部分。...

    Linux有两种内核形式,一种是安卓系统用的宏内核,另一个就是华为的鸿蒙系统使用的是微内核,微内核的设计理念是尽可能的简化,在微内核操作系统中,内核是指精心设计的、能实现现代OS最基本的核心功能的部分。微内核并非是一个完整的OS,而只是操作系统中最基本的部分,它通常用于:

    1、 实现与硬件紧密相关的处理;

    2 、实现一些较基本的功能;

    3、负责客户和服务器之间的通信;

    4、它们只是为构建通用OS提供一个重要基础,这样就可以确保把操作系统内核做得很小。

    173051197_1_20191012081649707

    所以简单地说,微内核就是把核心功能拆解得尽可能小,根据不同设备的需求自由组合,跟搭积木似的,同时还可以增强系统的安全性、可移植性、也能使分布式结构更加合理的运作,植入更多的插件程序,这是华为号称能跨不同平台部署的关键所在。

    而安卓系统用的宏内核就比较庞大而复杂了,仅仅是代码就有几千万行,但是这种内核方式可以将手机系统所用到的所有驱动软件、底层代码、各种管理以及网络协议等都直接保存在了内核当中,运行效率非常高,响应速度也非常快,这是相比微内核的优势所在。

    173051197_2_2019101208165051

    但是安卓的宏内核缺点也很明显,那就是安卓手机卡死、卡顿的情况,因为用这种内核方式保存的进程或者相关的内存数据只要有其中一个发生崩溃,那么面临着的就是整个系统的崩溃,所以稳定性方面,是“宏内核”的弱势。但是随着谷歌这几年的不断优化,还有手机硬件的爆发式提升,现在的安卓设备死机崩溃的现象已经少多了。

    不管是微内核还是宏内核,两者都有自己的优点和缺点,但是微内核更加适合华为的战略设计思路,未来是物联网,万物互联的时代,华为想在手机、电脑、电视和其它消费设备领域全面开花,这样高效灵活的微内核自然是首选方案,加上华为自己的“方舟编译器”,可以极大程度的提高系统的响应速度和运算效率,这样一来也就能快速减少与安卓系统的差距。

    展开全文
  • 安卓4.2内核刷机包

    2014-01-05 22:02:41
    安卓4.2内核刷机包,喜欢纯净官方内核的大大们有喜了。第三方rom有的内核是经过改动的,需要换的可以刷这个。能解决一些问题。
  • android 内核剖析 完整版

    千次下载 热门讨论 2013-06-18 13:36:55
    android 内核剖析 柯元旦
  • android内核剖析

    2018-04-18 23:29:49
    本书讲述了AMS,WMS等关于安卓内核的知识,适合于有一定安卓知识的人
  • Android ROM 内核解包工具, 修改Adroid rom 的好帮手
  • Android4.0内核源代码

    热门讨论 2011-12-27 15:21:58
    Android4.0内核源代码,自己用Get获取的Android4.0内核源代码,需要的朋友自己拿去研究。
  • 编译Android内核

    千次阅读 2015-08-20 14:10:11
    首先需要知道自己android内核的版本,我们android系统是android 4.0.1,内核版本为2.6.29.由于我们在下载android源代码的时候默认是不带内核源码的,因为他内置了一个编译好的zImage内核镜像,所以,如果要编译内核...

    首先需要知道自己android内核的版本,我们android系统是android 4.0.1,内核版本为2.6.29.

    这里写图片描述

    由于我们在下载android源代码的时候默认是不带内核源码的,因为他内置了一个编译好的zImage内核镜像,所以,如果要编译内核源码的时候,我们需要下载我们当前版本的内核源码.注意,这里的内核源码并不是Linux官网的内核源码,而是谷歌定制的内核.

    我们首先需要在android源代码根目录下新建一个kernel目录.

    mkdir kernel
    cd kernel
    git clone http://android.googlesource.com/kernel/goldfish.git

    这个需要等待一段时间,下载完成之后,我们使用如下命令.

    git branch -a
    //找到自己需要的内核源码版本
    git checkout remotes/origin/android-goldfish-2.6.29

    好了,完成之后,我们就可以编译我们的内核源代码了.在编译之前,我们需要修改一个内核源码的根目录下的Makefile文件,也就是老罗提到的修改两个部分:

    ARCH            ?= arm
    CROSS_COMPILE   ?=  arm-eabi-   

    在make之前,我们需要将Android提供的交叉编译链添加到我们的环境变量中,android提供的交叉编译链在目录
    /prebuilt/linux-x86/toolchain 中.

    这里写图片描述

    下面我们使用下面的命令进行编译:

    export PATH=$PATH:~/android/prebuild/linux-x86/toolchain/arm-eabi-4.4.3/bin
    
    //android2.3以下使用这个
    make goldfish_defconfig
    //android2.3以上使用这个
    make goldfish_armv7_defconfig
    
    //多线程编译
    make -j4 

    等出现zImage生成成功,表示编译完成.

    这里写图片描述

    最后,指定内核运行我们的虚拟机.

    emulator -kernel ./kernel/goldfish-android/arch/arm/boot/zImage 

    如果想要在后台运行这个虚拟机来启动adb的话,则需要在命令后面添加”&”.

    emulator -kernel ./kernel/goldfish-android/arch/arm/boot/zImage &
    展开全文
  • Android内核和驱动篇-Android内核介绍.txt
  • Android内核 与 linux 内核对比

    千次阅读 2017-03-08 11:47:16
    Android内核版本 默认情况下,Android使用以下Linux内核版本。有一系列Linux内核版本,可以运行每个Android版本。通常使用具有略微不同的Linux版本的BSP(板支持包)。 请参阅驱动程序集成#分支以使用正确的...
  • Android系统移植工作的目的是为了在特定的硬件上运行Android系统,由于Android系统用的是linux内核,因此内核移植和嵌入式linux移植差异不大,过程如本文。
  • 华为P30安卓内核编译android kernel build

    千次阅读 2019-05-19 12:37:45
    本文章将介绍如何编译华为P30安卓内核。 先绝条件 ubuntu18.04 ,编译主机; Toolchain ,交叉编译器 传送门,提取码f565; kernel source ,内核源码 华为内核下载页面; 编译 编译内核 $ export PATH=$PATH:/...
  • 已经有一些的文章介绍Android内核了,本系列篇将从Linux内核的角度来分析Android的内核,希望给初学者提够有用的信息。本章将简单的介绍Android内核的全貌,起到一个抛砖引玉的作用。从下一篇开始将详细介绍每一个...
  • android内核编译

    千次阅读 2014-12-23 13:49:13
    android内核编译
  • Android Linux 内核介绍

    千次阅读 2010-11-10 14:39:00
    已经有一些的文章介绍Android内核了,本系列篇将从Linux内核的角度来分析Android的内核,希望给初学者提够有用的信息。本章将简单的介绍 Android内核的全貌,起到一个抛砖引玉的作用。从下一篇开始将详细介绍每一个...
  • Android内核和驱动篇-Android内核介绍

    千次阅读 2011-01-08 01:00:00
    已经有一些的文章介绍Android内核了,本系列篇将从Linux内核的角度来分析Android的内核,希望给初学者提够有用的信息。本章将简单的介绍Android内核的全貌,起到一个抛砖引玉的作用。从下一篇开始将详细介绍每...
  • Android内核简介

    千次阅读 2011-09-08 14:25:50
    Android操作系统是基于Linux开发的手机端操作系统,底层的linux内核只提供基本功能。Android内核相当于Linux内核的衍生品,Google在上面加入了自己的一些东西。 大家拿出自己的手机,打开设置>>关于手机>>内核...
  • 2018.11.15 Android设备都基于linux内核,但是这些设备从一开始并没有跑主线内核,因为添加了很多不在主线上的代码,这些主线外...Android内核从主线LTS内核而来,添加了Android指定代码来得到Android Common K...
  • Android 浏览器内核浅谈

    千次阅读 2017-08-19 16:47:34
    目前,移动设备浏览器上常用的内核有Webkit,Blink,Trident,Gecko等,其中iPhone和iPad等苹果iOS平台主要是WebKit,Android 4.4之前的android系统浏览器内核是WebKit,Android4.4系统浏览器切换到了Chromium(内核...
  • android 内核

    2017-08-22 08:39:24
    今天,简单讲讲android内核态的知识。 一。内核态(Kernel Mode)与用户态(User Mode)  内核态: CPU可以访问内存所有数据, 包括外围设备, 例如硬盘, 网卡. CPU也可以将自己从一个程序切换到另一个程序 用户...
  • Android 内核剖析

    2013-07-24 19:12:03
    Android操作系统是基于Linux实现的,然而Android的核心价值却不是Linux,所以说,Android的内核不是指Linux,本书不是一本介绍Linux的书。这就好比苹果的操作系统iOS... 大家听过和Android内核最多的词语应该是“Andr
  • Android安卓智能手机门户织梦内核整站源码,内付安装说明,安装简单
  • Android内核介绍

    2010-12-02 11:22:00
    Android内核介绍
  • Android添加内核系统调用

    千次阅读 2019-04-30 11:06:39
    Author:Gary Date:2019-4-30 ...内核版本:Linux 3.10.40 手机:Nexus 6 参考资料: http://android.blogs.rice.edu/2013/09/25/adding-system-call-in-android-bionic-library/ http://www.it1352.com/...
  • 使用腾讯X5内核Webview有很多坑,记录一下。经常onViewInitFinished回调是false 1.初始化腾讯内核在你加载webview之后了。 2.AndroidManifest配置权限少了。 3.缺少os文件 以上这问题可以看看这篇文章: 链接: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 120,790
精华内容 48,316
关键字:

安卓11内核