当前位置: 首页 > news >正文

树莓派基于Linux内核驱动开发详解

一、驱动认知

首先理解Linux内核框图
文件系统认知,Linux内核框图

1、什么是驱动

  1. linux内核驱动。软件层面上的驱动 广义上是指:这一段代码操作了硬件去动,所以这一段代码就叫硬件的驱动程序。
  2. 狭义上驱动程序就是专指操作系统中用来操控硬件的逻辑方法的部分代码。而我们这里讲的驱动就指的是这个狭义上的驱动。

2、Linux驱动的体系架构

  1. 分离、分层思想
  2. 驱动的上面是系统调用API
  3. 驱动的下面是硬件
  4. 驱动本身的实现也是基于分离、分层的思想(比如分成不同类型的驱动)

3、Linux驱动的分类

  1. 分3类:字符设备驱动、块设备驱动、网络设备驱动
  2. 分类原则:设备本身读写操作的特征差异
  3. 时刻要注意一点,我们的驱动本质上是不分类的,因为我们的硬件是不同的,有不同的读写特性,所以的硬件是分类的,所以我们的驱动也就要跟着分类了

字符设备:准确的说应该叫“字节设备”,软件操作设备时是以字节为单位进行的。典型的如LCD、串口、GPIO、蜂鸣器、触摸屏······
块设备:块设备是相对于字符设备定义的,块设备被软件操作时是以块(多个字节构成的一个单位)为单位的。设备的块大小是设备本身设计时定义好的,软件是不能去更改的,不同设备的块大小可以不一样。常见的块设备都是存储类设备,如:硬盘、NandFlash、iNand、SD····操作块设备时,我们必须以块单位进行操作,将一块的数据读取到内存中去,然后在内存中找到相应的那个字节数据修改之后再以一块的数据写入到我们的块设备中去
网络设备:网络设备是专为网卡设计的驱动模型,linux中网络设备驱动主要目的是为了支持API中socket相关的那些函数工作

4.为什么要学习写驱动

  1. 树莓派开发简单是因为有厂家提供的wiringPi库,实现超声波,实现继电器操作,做灯的点亮…都非常简单
  2. 但未来做开发时,不一定都是用树莓派,则可能没有wiringPi库可以用。但只要能运行Linux系统,linux的标准C库一定有
  3. 所以我们可以基于C库、Linux内核和拿到芯片手册,电路图…就能做开发,写一套属于自己的驱动库

二、开始树莓派Linux内核驱动开发

  1. 设备驱动文件路径:/home/pi/lessonPI/linux-rpi-4.14.y/drivers,在Linux环境编写
  2. 设备文件(文件显示黄色)路径:根目录下的dev文件/dev,在树莓派环境使用
  3. 在Linux环境通过写好设备驱动文件然后进行内核编译生成驱动模块xxx.ko,接着把驱动模块发送给树莓派,树莓派把驱动模块加载到设备文件。从而用户可以通过/dev目录下的这些设备文件访问外部硬件设备,比如通过open(/dev/mouse,O_RDONLY)来访问鼠标的输入 从而可以进行各种骚操作
  4. 内核底层其实是用链表去管理这些驱动,学过FreeRTOS系统源码的可以从FreeRTOS源码的底层链表去理解
  5. 设备驱动文件需要有设备号、主设备号、次设备号、设备文件名。这些可以理解为驱动任务节点所需要的内容,可以从FreeRTOS源码的任务节点去结合这个理解
  6. 整个过程大致:C库open——>sys_call——>sys_open(属于VFS层虚拟文件系统)——>根据open里的那个设备文件里的设备名去内核找到驱动链表——>接着根据其主设备号与次设备号找到相关驱动函数,所以我们只需要让内核执行我们自己写的设备名(即执行我们最后得到的设备文件),就可以执行我们写的驱动函数了
  1. 拷贝设备驱动文件代码
    gpio属于字符设备,所以把该设备驱动文件拷贝到/home/pi/lessonPI/linux-rpi-4.14.y/drivers/char
#include <linux/fs.h> //file_operations声明
#include <linux/module.h> //module_init  module_exit声明
#include <linux/init.h> //__init  __exit 宏定义声明
#include <linux/device.h> //class  devise声明
#include <linux/types.h> //设备号  dev_t 类型声明
#include <asm/io.h>  //ioremap iounmap的头文件static struct class *pin4_class;
static struct device *pin4_dev;static dev_t devno;          //设备号
static int major = 232;      //主设备号
static int minor = 0;        //次设备号
static char *module_name = "pin4"; //设备文件名//.open = pin4_open,所以执行open(fd,O_RDWR)时会进入此函数
static int pin4_open(struct inode *inode, struct file *file)
{printk("pin4_open\n"); //内核的打印函数和printf类似return 0;
}//.write= pin4_write,所以执行write(fd,'1',1)时会进入此函数
static int pin4_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos)
{printk("pin4_write\n"); //内核的打印函数和printf类似return 0;
}//内核链表里的结构体相关配置
static struct file_operations pin4_fops =
{.owner = THIS_MODULE,.open = pin4_open,.write = pin4_write,
};//入口函数
int __init pin4_drv_init(void)
{int ret;devno = MKDEV(major,minor); //创建设备号//注册驱动  告诉内核,把这个驱动加入到内核驱动的链表中ret = register_chrdev(major, module_name, &pin4_fops);pin4_class = class_create(THIS_MODULE, "myfirstdemo");pin4_dev = device_create(pin4_class, NULL, devno, NULL, module_name); //创建设备文件return 0;
}void __init pin4_drv_exit(void)
{device_destroy(pin4_class, devno);class_destroy(pin4_class);unregister_chrdev(major, module_name); //卸载驱动
}module_init(pin4_drv_init); //入口
module_exit(pin4_drv_exit);
MODULE_LICENSE("GPL v2");
  1. 拷贝用户层应用代码
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>int main()
{int fd;//调用C库open,执行我们做好的设备文件pin4,因为我们把.open=pin4_open,所以会运行pin4_open函数fd = open("/dev/pin4",O_RDWR);if(fd < 0){printf("open failed\n");perror("reson");}else{printf("open success\n");}//调用C库wirte,因为我们把.wrute=pin4_write,所以会运行pin4_write函数fd = write(fd,'1',1);return 0;
}
  1. 在/drivers/char目录下修改Makefile配置文件,打开后加入obj-m += pin4driver.o,为了进行内核编译时能把设备驱动文件生成为驱动模块xxx.ko
    在这里插入图片描述
  2. 在Linux里回到树莓派内核源码根目录linux-rpi-4.14.y,执行指令进行编译内核:ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make modules
    补充:modules:我们只需生成驱动模块,所以只需modules参数即可
    在这里插入图片描述
    编译成功,生成pin4driver.ko驱动模块
    编译完成后执行指令发送给树莓派scp drivers/char/pin4driver.ko pi@192.168.1.1:/home/pi
  3. 执行指令编译应用代码:arm-linux-gnueabihf-gcc pin4text.c -o pin4text
    编译完成后执行指令发送给树莓派scp pin4text pi@192.168.1.1:/home/pi
  4. Linux操作完了,接下来到树莓派操作了。
    执行指令加载到设备文件(即把pin4driver.ko驱动模块加载到/dev设备文件里)sudo insmod pin4driver.ko
  5. 查看加入后的设备号是否和代码写的一样ls pin4 -l,可见主设备号和次设备号和代码里的一样
    在这里插入图片描述
    执行lsmod查看是否有pin4driver驱动模块
    在这里插入图片描述
    若一样和有说明以上操作成功了
  6. 还需要给pin4这个设备文件一个权限,执行指令:sudo chmod 666 /dev/pin4
    补充:666代表所有人都可以读写pin4
  7. 运行用户代码./pin4text,运行完成后输入指令查看运行完./pin4text后内核打印了什么dmesg | grep pin4
    在这里插入图片描述
    可见,确实是按照我们写好的设备驱动文件打印。
    到此,你已经实现了调用自己的设备文件了,然后就可以进行各种骚操作啦

回顾:第二大点灰色款里的第3小点,用户可以通过/dev目录下的这些设备文件访问外部硬件设备,所以我们需要学会这套技能

转载请标明出处,谢谢
作者:星辰~念

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-35291.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

VG验证码识别框架2.2 免费识别验证码

该验证码服务端&#xff0c;可以免费识别常见数字、英文混合验证码&#xff1b; 功能亮点&#xff1a;通过http请求调用dll,可以识别验证码、自定义功能、可玩性极等&#xff1b; 压缩包里面有自定义功能插件案例&#xff0c;可以定制化自己需要的功能&#xff0c;需要有易语…...

Redis对象类型编码(补充内存篇)

欢迎大家观看之前的Redis系列文章 Redis安装和配置&#xff08;Windows和Linux&#xff09;Redis原来不止五种类型啊&#xff08;含常用命令&#xff09; Redis内存模型原来是这样的啊&#xff01; Redis对象类型编码&#xff08;补充内存篇&#xff09; 深入学习Redis持久化&a…...

vue如何实现数据双向绑定,我的阿里手淘面试经历分享,看这篇文章准没错!

前言 全网唯一一份&#xff0c;对标阿里P7年薪60w的Android高级工程师学习进阶路线&#xff08;图未完全展开&#xff0c;怕大家看不清楚&#xff09;&#xff1a; 本篇文章都会围绕这份脑图来写&#xff0c;详细的介绍你处于哪个阶段该如何进阶&#xff0c;以及年薪层次高低对…...

LeetCode练习——其他(有效的括号)

给定一个只包括 ‘(’&#xff0c;’)’&#xff0c;’{’&#xff0c;’}’&#xff0c;’[’&#xff0c;’]’ 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 解法一&#…...

Apollo学习笔记8-imu-lidarApollo3.0手动标定

imu-lidarApollo3.0手动标定参考文档参考文档 1:https://github.com/ApolloAuto/apollo/blob/r3.0.0/docs/specs/apollo_lidar_imu_calibration_guide.md. 2:https://github.com/ApolloAuto/apollo/blob/r3.0.0/docs/specs/D-kit/Auto_Driving–Sensor_calibration_cn.md. 3:h…...

什么是服务网格(Service Mesh)

本文来说下什么是服务网格 文章目录概述概述...

《零基础安装 Oracle 数据库》RAC集群系列 ❸ 简单两步快速安装 Oracle 18C RAC 数据库

前言 很多朋友吐槽我的脚本不会用&#xff0c;看不懂&#xff0c;哎&#xff0c;一言难尽&#xff01;于是&#xff0c;我将 [vagrant virtualbox shell脚本] 组合起来&#xff0c;实现了零基础也可安装 Oracle 数据库的方式&#xff0c;我称之为 新手纯享版本&#xff0c;真…...

01_map容器_构造和赋值

map容器 自身按照key值默认排序 map中所有元素都是成对出现&#xff0c;插入数据时候要使用对组 接口&#xff1a; 判断是否为空——empty() 返回元素个数——size() 交换两个集合容器——swap() 插入——insert() (位置迭代器) 记住一种就可以了 //第一种 m.insert(…...

Hadoop Yarn

The fundamental idea of YARN is to split up the functionalities of resource management and job scheduling/monitoring into separate daemons. The idea is to have a global ResourceManager (RM) and per-application ApplicationMaster (AM). An application is eit...

redis加锁、解锁

在Java中&#xff0c;关于锁我想大家都很熟悉。在并发编程中&#xff0c;我们通过锁&#xff0c;来避免由于竞争而造成的数据不一致问题。通常&#xff0c;我们以synchronized 、Lock来使用它。 但是Java中的锁&#xff0c;只能保证在同一个JVM进程内中执行。如果在分布式集群…...

atcoder arc 122 a~b题Many Formulae、Insurance

A题链接 题目大意&#xff1a;不能存在两个及两个以上的减号&#xff0c;所有满足条件的式子之和。 题目思路&#xff1a;当时考试想到一半&#xff0c;就感觉编码能力不太会&#xff0c;然后就没做&#xff0c; 首先我们定义dp[N][2]&#xff0c;这种选或不选的问题&#xff0…...

04_set容器_查找和统计

#include<iostream> #include<string> #include<set> using namespace std;//查找 void test01() {set<int>s1;s1.insert(10);s1.insert(30);s1.insert(20);s1.insert(40);set<int>:: iterator pos s1.find(30);if (pos ! s1.end()){cout <&…...

【pandas】根据其他表格列数据更新相应的列字段,apply()操作实例

今天在学习中&#xff0c;遇到一个小问题&#xff0c;需要把主表中的出行网格id&#xff0c;和终点网格id替换成对应的枢纽地点&#xff0c;从表中有每个枢纽对应的id&#xff08;一个枢纽对应多个网格id&#xff09; 1.原始数据如下图 上面是枢纽id,下方是出行信息 2.将数…...

数据库课程设计 大学生综合管理系统

问题描述&#xff1a; 设计并开发一套完整的在校大学生学习的综合管理系统&#xff0c;其中可包括以下几个模块&#xff1a; &#xff08;一&#xff09;选课管理&#xff1a;该系统包括教师、学生、系、课程和教室等信息&#xff0c;基本情况如下&#xff1a; 教师有工作证号…...

第十二周.直播.DGL-KG, LifeSci讲解

文章目录知识图谱背景DGL-KELifeSci双线性系列RESCAL摘要2. Modelling and Notation模型DistMult摘要模型ConvE为什么是2D不是1D卷积模型本文内容整理自深度之眼《GNN核心能力培养计划》公式输入请参考&#xff1a; 在线Latex公式DGL有三个比较知名的开源库&#xff0c;DGL-KG,…...

No qualifying bean of type ‘com.kkb.dao.*Mapper‘ available

没有查找到 *mapper对象程序报错没有查找到 mapper对象 可能造成的原因&#xff1a;缺少相应的注解 在SpringBoot的启动类中缺少 MapperScan SpringBootApplication MapperScan("com.yhp.dao") public class Application {public static void main(String[] args) …...

WPF 简单使用keybd_event模拟触发键盘

主要是添加Win32函数 其次是定义键盘按下&#xff0c;抬起的两个固定值。 [DllImport("User32.dll")]public static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);/// <summary>/// 按下/// </summary>const int KEY…...

java程序员日常工作内容,Java面试题及解析

目录 Kafka的基本介绍Kafka的设计原理分析Kafka数据传输的事务特点Kafka消息存储格式副本&#xff08;replication&#xff09;策略Kafka消息分组&#xff0c;消息消费原理Kafak顺序写入与数据读取消费者&#xff08;读取数据&#xff09; Kafka的基本介绍 Kafka是最初由Lin…...

常用网络数据包丢失的分析与处理

网络管理维护过程中&#xff0c;经常会遇到数据包丢失的情况。用Ping命令进行连接测试&#xff0c;会发现Ping包的延迟远远超过正常值&#xff0c;甚至无法到达&#xff0c;同时伴随着网络服务应用的障碍&#xff0c;比如打开网站的速度太慢&#xff0c;严重时甚至无法打开网页…...

2021-06-23 SpringCloud Zuul网关filter添加或修改传递的参数

场景&#xff1a;通过网关转发服务到具体的ip地址 比如网关验证accessToken&#xff0c;需要拦截访问&#xff0c;然后在url中添加参数&#xff0c;如下 //1、这个是原来的参数数据 String accessToken request.getParameter("accessToken"); //2、转换后的数据 S…...

[HCIP] 10 - IGMP 协议

一、IGMP 介绍 二、组播组管理协议工作机制&#xff1a;...

AcWing 920. 最优乘车

题面 H 城是一个旅游胜地&#xff0c;每年都有成千上万的人前来观光。 为方便游客&#xff0c;巴士公司在各个旅游景点及宾馆&#xff0c;饭店等地都设置了巴士站并开通了一些单程巴士线路。 每条单程巴士线路从某个巴士站出发&#xff0c;依次途经若干个巴士站&#xff0c;…...

2.1常量、变量、整型、实型和字符型

C语言的数据类型 常见数据类型所占内存的大小 数据类型32位操作系统(字节)64位操作系统(字节)char11short(unsigned short)22int(unsigned int)44float44double88long4\color{red}{4}48\color{red}{8}8long long88 常见数据类型的取值范围 数据类型最小值最大值所占字节char-…...

01_map容器_构造和赋值

map容器 自身按照key值默认排序 map中所有元素都是成对出现&#xff0c;插入数据时候要使用对组 接口&#xff1a; 判断是否为空——empty() 返回元素个数——size() 交换两个集合容器——swap() 插入——insert() (位置迭代器) 记住一种就可以了 //第一种 m.insert(…...

java与springboot 操作redis

文章目录Java&#xff08;jedis&#xff09;操作第一步导包第二步 代码Springboot 操作第一步导包&#xff1a;第二步&#xff1a; 设置yaml第三步操作&#xff1a;StringRedisTemplateRedisTemplateJava&#xff08;jedis&#xff09;操作 第一步导包 <!--引入jedis连接依…...

2021年安全员-C证复审考试及安全员-C证模拟考试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 安全生产模拟考试一点通&#xff1a;安全员-C证复审考试参考答案及安全员-C证考试试题解析是安全生产模拟考试一点通题库老师及安全员-C证操作证已考过的学员汇总&#xff0c;相对有效帮助安全员-C证模拟考试题学员顺…...

centos7 yum安装使用时提示 cannot find a valid baseurl for repo:base/7/x86_64 的解决方法(亲测有效!)

一、报错原因 机子解析不了yum源,原因有三种情况&#xff1a; &#xff08;1&#xff09;电脑不能上网。请检查好网络配置&#xff0c;确认是可以上网了再看第二种情况。简单点就是ping一个公网的IP&#xff0c;如ping 114.114.114.114 如果ping不通&#xff0c;就是上不了网。…...

VG验证码识别框架2.2 免费识别验证码

该验证码服务端&#xff0c;可以免费识别常见数字、英文混合验证码&#xff1b; 功能亮点&#xff1a;通过http请求调用dll,可以识别验证码、自定义功能、可玩性极等&#xff1b; 压缩包里面有自定义功能插件案例&#xff0c;可以定制化自己需要的功能&#xff0c;需要有易语…...

计算结构体的大小

#include <stdio.h> struct mystruct1 { // 1字节对齐 4字节对齐 int a; // 4 4 char b; // 1 2(11) short c; // 2 2 }; int main(void)…...

ping localhost和本机IP区别

本机IP 下列抓包均在lo口抓取的 ping 本机IP ping localhost ping 127.0.0.1 总结 ping本机IP和127.0.0.1效果一样&#xff0c;该数据包均会被发送到lo口&#xff0c;受防火墙管控ping localhost在lo口没有抓取到数据包&#xff0c;但是实际通了&#xff0c;说明协议栈直接把…...

新基建风口中的风口工业互联网的起飞

工业互联网从来没有像今年这样备受关注过。 今年以来&#xff0c;国家决策层关于加码新基建、加快工业互联网创新发展等表态&#xff0c;已经指示了社会资源向工业互联网倾斜的大趋势&#xff1b;同时&#xff0c;疫情期间&#xff0c;企业业务线上化、智能化需求迅速提升&…...

智能世代的工业/嵌入式网络与I/O桥接芯片解决方案

智能家居、智能办公室、智能工厂、智能城市、智能交通、…&#xff0c;身处于一个随时随地皆可上网的智能世代&#xff0c;亚信电子为个人计算机、工业计算机与智能嵌入式连网设备&#xff0c;提供容易设计、高性价比的工业/嵌入式网络与I/O桥接芯片解决方案。 进入智能世代 -…...

LSTM 牛津大学机器学习课程

找到牛津大学机器学习课程&#xff0c;里头有基本的LSTM的概述&#xff0c;对我在看论文的时候&#xff0c;会对发展历史、概念和应用等方面有一些相应的补充。 另外&#xff0c;安利一款Iphone store的翻墙软件&#xff1a;Onavo Protect&#xff0c;安装后用手机看YouTube上…...

比谷歌手表更酷!基于大数据分析的睡衣

摘要&#xff1a;TNW上发表了Niall Harbison的一篇文章《大数据让“可能”实现&#xff1a;科技改变生活》&#xff0c;列出了大数据引领创新的三种应用模式&#xff0c;并分享了诸多颇富创意的企业。其中&#xff0c;Pebble手表比Google Time要早很多&#xff0c;但设计思路却…...

WhatsApp月活跃用户4.3亿,是如何做到的

[转载自http://new.iheima.com/detail/2014/0122/58141.html] 发表于2014-01-22 08:44:56 来源&#xff1a;腾讯科技 聊天应用WhatsApp宣布其月活跃用户数达到4.3亿。在宣布用户数方面&#xff0c;WhatsApp近一年表现得非常积极。基本上每增长5000万&#xff0c;它就要向外界…...

Facebook 190 亿美元收购 WhatsApp 应对移动冲击

2019独角兽企业重金招聘Python工程师标准>>> Facebook周三&#xff08;2014年02月19日&#xff09;宣布&#xff0c;该公司已经同快速成长的跨平台移动通讯应用 WhatsApp 达成最终协议&#xff0c;将以约190亿美元的现金和股票收购WhatsApp。彭博社称此交易是继2001…...

Facebook190亿美元收购WhatsApp

Facebook收购WhatsApp&#xff0c;前后只花费10天时间。这是Facebook迄今规模最大的一笔收购&#xff0c;可能也是史上最昂贵的一笔针对靠私人风投起家的企业的收购案。 2月9日&#xff0c;马克•扎克伯格(Mark Zuckerberg)与WhatsApp的创始人会面&#xff0c;到本周三&#xf…...

聚焦全球移动市场:创新以色列 科技巨头的倾慕之地

摘要&#xff1a;实际上世界上最早的即时通讯技术、VoIP技术、因特尔迅驰处理器以及奔腾4都诞生于以色列——这个面积仅2万平方公里&#xff0c;人口只有800万的国度。许多科技巨头在这里都设立研发中心&#xff0c;欣赏这里的高科技公司和人才。提到以色列&#xff0c;大家首先…...

创新以色列

原文出处&#xff1a; http://www.csdn.net/article/2013-05-22/2815390-israel-innovation 摘要&#xff1a;实际上世界上最早的即时通讯技术、VoIP技术、因特尔迅驰处理器以及奔腾4都诞生于以色列——这个面积仅2万平方公里&#xff0c;人口只有800万的国度。许多科技巨头在…...

WhatsApp月活跃用户量达3.5亿,它成功的原因很简单

这周对于短信息初创公司WhatsApp来说非常重要。根据最新数据显示&#xff0c;该公司目前每月的活跃用户数量达到了3.5亿&#xff0c;WhatsApp首席执行官Jan Koum本周日透露&#xff0c;他们的用户每天分享的照片数量超过4亿张。 很明显&#xff0c;Jan Koum所说的照片数量是指…...

Facebook将斥资10亿美元收购初创公司CTRL Labs

Facebook已经同意收购总部位于美国纽约的初创公司CTRL- labs&#xff0c;该公司正在开发一种人们用意念控制电子设备的技术。 Facebook虚拟现实和扩充现实部门负责人Andrew Bosworth&#xff0c;周一在社交媒体上发表文称&#xff0c;此次收购是为了构建与设备和技术更自然、更…...

13条Android手机必备技巧 让玩机更有趣

腾讯数码讯&#xff08;编译&#xff1a;张秀梅&#xff09;如果你不是一名极客或手机爱好者&#xff0c;那么或许对于手中的Android手机来说&#xff0c;肯定无法做到百分之百了解。对于这款世界上最受欢迎的操作系统来说&#xff0c;有许多不为大部分人所知晓的使用技巧或方法…...

CY_001

我创业失败了&#xff0c;但我学到了 5 点经验 快速启动、快速部署、以更快的速度学习&#xff0c;这是创业公司生存的第一法则。 编者按&#xff1a;Mor Sela 是初创公司 Docady 的核心成员&#xff0c;但这家公司最近关闭了。Mor Sela 分享了他从失败中学到的教训经验教训。…...

【安全资讯】WhatsApp将与Facebook分享其数据,你还敢用它吗?

作者&#xff1a;xiaohui 来源&#xff1a;嘶吼网 发布时间&#xff1a;2021-01-08 周一&#xff0c;WhatsApp更新了其隐私政策和服务条款&#xff0c;提供了有关如何处理用户数据的更多信息。现在&#xff0c;该公司正通过其移动应用程序通知用户&#xff0c;从2月份开始&…...

买就赚到的以色列人工智能

让我们回首一下2017&#xff0c;会发现人工智能开始发飙&#xff0c;并不是从AlphaGo战胜柯洁开始的。在那遥远的3月份&#xff0c;英特尔150亿美金豪购以色列科技公司Mobileye&#xff0c;已经让我们看到为了争夺AI&#xff0c;巨头们有多努力。这起创纪录的年度收购已经被讨论…...

Facebook 是如何抄袭并逼死其他创业公司的?

摘要&#xff1a;在这个弱肉强食、强者生存的世界&#xff0c;当“垄断”的科技巨头 Facebook 怼上刚冒出芽的初创公司 Houseparty &#xff0c;面对其处处施压&#xff0c;不是“抄袭”其产品就是意欲收购&#xff0c;初创公司最难的可能不再是起步&#xff0c;而是在起步之后…...

信息安全快讯丨夏末秋初,正是阅读好时光

政府举措 以色列政府将不再使用微软软件 关键词&#xff1a;微软 由于微软授权条款发生变化&#xff0c;导致授权价格将增长一倍&#xff0c;以色列政府当地时间周二表示&#xff0c;到今年年底时以色列政府使用微软各种桌面软件的合同将不会再续签。根据目前与微软的框架协议…...

【开源要闻】Canonical发布新OpenStack工具、Kubernetes访客引导方法

Canonical发布支持CephFS的OpenStack Charms 20.02Canonical近日宣布了OpenStack Charms 20.02的全面上市&#xff0c;这是用于在Ubuntu上设计&#xff0c;构建和管理OpenStack私有云的强大工具的主要版本。OpenStack Charms 20.02是一个令人兴奋的版本&#xff0c;它增加了主要…...

当我阻止应用程序跟踪我的iPhone 1周后我发现了什么

重点 (Top highlight)技术 (TECHNOLOGY) A note from the editor: with this article, we are not changing the overall direction of Storius. Our publication remains all about the craft and business of storytelling in its many forms. But from time to time, we wil…...

《社交困境》:算法抓住了人类的弱点……

全文共6965字&#xff0c;预计学习时长18分钟《社交困境》是杰夫奥洛威斯基&#xff08;Jeff Orlowski&#xff09;和Exposure Labs团队投注数年心血的项目&#xff0c;最近刚刚在Netflix首映&#xff0c;迅速跃升至浏览前10榜单。该电影巧妙地将戏剧与我和其他十几名前社交媒体…...