在linux的驱动代码中经常可以看到__weak去修饰一个函数或者变量,大多是用来修饰函数。它的作用有两个:

1.weak 顾名思义是“弱”的意思,所以如果函数名称前面加上__weak 修饰符,我们一般称这个函数为**“弱函数”**。加上了__weak 修饰符的函数,用户可以在用户文件中重新定义一个同名函数,最终编译器编译的时候,会选择用户定义的函数,如果用户没有重新定义这个函数,那么编译器就会执行__weak 声明的函数,并且编译器不会报错。

2.__weak 在回调函数的时候经常用到。这样的好处是,系统默认定义了一个空的回调函数,保证编译器不会报错。同时,如果用户自己要定义用户回调函数,那么只需要重新定义即可,不需要考虑函数重复定义的问题,使用非常方便

在linux/init/main.c中有函数smp_setup_processor_id

void __init __weak smp_setup_processor_id(void)

{

}

2.6.30内核中ARM结构没有额外定义smp_setup_processor_id(),所以ARM结构不执行任何操作。

n-ubuntu05@nubuntu05:linux-2.6.30.4$ grep -rn smp_setup_processor_id ./*

./arch/sparc/kernel/smp_64.c:1182:void __init smp_setup_processor_id(void)

./include/linux/smp.h:188:void smp_setup_processor_id(void);

./init/main.c:528:void __init __weak smp_setup_processor_id(void)

./init/main.c:541:smp_setup_processor_id();

v4.9内核在*./arch/arm/kernel/setup.c*中定义了smp_setup_processor_id():

584 void __init smp_setup_processor_id(void)

585 {

586 int i;

587 u32 mpidr = is_smp() ? read_cpuid_mpidr() & MPIDR_HWID_BITMASK : 0;

588 u32 cpu = MPIDR_AFFINITY_LEVEL(mpidr, 0);

589

590 cpu_logical_map(0) = cpu;

591 for (i = 1; i < nr_cpu_ids; ++i)

592 cpu_logical_map(i) = i == cpu ? 0 : i;

593

594 /*

595 * clear __my_cpu_offset on boot CPU to avoid hang caused by

596 * using percpu variable early, for example, lockdep will

597 * access percpu variable inside lock_release

598 */

599 set_my_cpu_offset(0);

600

601 pr_info("Booting Linux on physical CPU 0x%x\n", mpidr);

602 }

由于linux/init/main.c中定义的函数有__weak属性,所以ARM使用的是*./arch/arm/kernel/setup.c*中定义的smp_setup_processor_id

v4.9其他结构中相关定义:

n-ubuntu05@nubuntu05:v4.9$ grep -rn smp_setup_processor_id ./*

./arch/arm64/kernel/setup.c:95:void __init smp_setup_processor_id(void)

./arch/s390/kernel/smp.c:930:void __init smp_setup_processor_id(void)

./arch/sparc/kernel/smp_64.c:1238:void __init smp_setup_processor_id(void)

./arch/arm/kernel/devtree.c:147: * to override the map created in smp_setup_processor_id().

./arch/arm/kernel/devtree.c:185: * logical map created in smp_setup_processor_id() can be overridden

./arch/arm/kernel/setup.c:584:void __init smp_setup_processor_id(void)

./include/linux/smp.h:197:void smp_setup_processor_id(void);

./init/main.c:452:void __init __weak smp_setup_processor_id(void)

./init/main.c:487:smp_setup_processor_id();

linux密码weak,linux中__weak关键字相关推荐

  1. linux中__weak关键字的作用

    在linux的驱动代码中经常可以看到__weak去修饰一个函数或者变量,大多是用来修饰函数. 它的作用有两个: 1.weak 顾名思义是"弱"的意思,所以如果函数名称前面加上__w ...

  2. sabayon linux 密码,Sabayon Linux 19.03 新版本增加全盘加密,基于Gentoo

    经过几个月的沉默,基于Gentoo的Sabayon Linux操作系统终于收到了一个新版本,其中包含最新的映像,不仅带来了Gentoo Linux存储库的更新组件,还带来了新功能和急需的改进. 在全新 ...

  3. 分分钟破解linux密码以及linux常见问题

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 linux常见问题 一.修改主机名为server.local 二.将虚拟机的网络连接模式分别调换成仅主机模式.nat模式.桥接模式并获 ...

  4. stm32_HAL库中__weak修饰符

    前言, 在 HAL 库中,很多回调函数前面使用__weak 修饰符. weak 顾名思义是"弱"的意思,所以如果函数名称前面加上__weak 修饰符,我们一般称这个函数为" ...

  5. linux tcb,在Linux中从潜藏密码迁移至tcb怎么做?

    潜藏密码作为Linux产品的既定事实标准已经有好多年了,md5密码的运用亦是如此.但是,运用传统的潜藏密码要领也有不足之处,甚至md5也不像以前那么安全了. 潜藏密码文件的一个缺点就是,任意一个须要查 ...

  6. linux查找某时间后的关键字,linux - 查找指定时间的文件及文件中的关键字

    Linux查找某个时间内的文件 1.? n天内修改的(-ctime) find . -type f -ctime -1| xargs ls –l 说明: (1) -type f 只搜索文件,不包含文件 ...

  7. Linux,grep命令,在大日志文件中搜索关键字 最后/最开始出现位置

    Linux,grep命令,在大日志文件中搜索关键字 最后/最开始出现位置 grep [选项]... PATTERN [FILE]... grep -C N,(N代表一个整数)是搜索关键字出现位置,并且 ...

  8. linux 日志中查找关键字

    linux 日志中查找关键字 1.查看日志前 n行: cat 文件名 | head -n 数量 demo: cat test.log | head -n 200 # 查看test.log前200行 2 ...

  9. 在Windows, Mac, Linux三种系统中分别获取wifi密码的方式

    在Windows, Mac, Linux三种系统中分别获取wifi密码的方式 1. Windows netsh wlan show profile name=wifi名称 key=clear | fi ...

  10. linux vim 搜索关键词,在Vim/Vi中搜索关键字就这么简单

    原标题:在Vim/Vi中搜索关键字就这么简单 本文描述了如何在Vim / Vi中执行搜索操作. Vim或其前身Vi预装在macOS和大多数Linux发行版上.搜索文本是处理文件时最常见的任务之一.当您 ...

最新文章

  1. 常见的“公共标志和说明”英文表达
  2. 防止一个进程被多次启动
  3. 广东汕尾2021年高考成绩查询,广东汕尾2021年高考英语听说考试成绩查询入口
  4. 全球及中国血液透析行业发展规模与前景动态调研报告2022版
  5. ExtJs Ext.TaskMgr定时刷新数据源
  6. android auto错位,recyclerview 的item布局错乱
  7. 仙剑4按键取钱的东东。
  8. NodeJs .net core connect Azure service bus
  9. mysql对null排序_mysql中null值的排序问题分析_MySQL
  10. 【渝粤题库】陕西师范大学201451 中国法制史作业
  11. php+控制器+数据库,Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法_PHP...
  12. 推荐召回体系化建设与排序优化实践
  13. Spring零配置之@Configuration注解详解。
  14. centos7 安装VNC Server
  15. PowerDesigner16.5汉化破解版安装教程(含安装文件、汉化包、破解文件)
  16. 从零基础入门Tensorflow2.0 ----七、34 embedding rnn
  17. WDSR:Wide Activation for Efficient and Accurate Image Super-Resolution
  18. sourceTree git工作流无法结束
  19. 4、STYLE-------------labview宝典
  20. 互联网服务器使用ipset 和iptables禁止国外IP访问

热门文章

  1. 许三多和他的基金定投
  2. CSS属性之relative
  3. 从思维走向实践,数字化转型 IT 经营的成功路径
  4. 安卓双摄像头录像_USB双摄像头app手机版下载-USB双摄像头apk安卓版下载 - 口袋手机站...
  5. android 电源管理
  6. word打开文档很久很慢_word打开慢,详细教您怎么解决word打开慢
  7. 昆仑通泰高级教程_2014-昆仑通态-高级教程.pdf
  8. 答应了邮件offer还能反悔吗?
  9. php下载大文件的方法
  10. openLooKeng视图详解