- 博客(85)
- 资源 (3)
- 收藏
- 关注
原创 ACPI 启动下platform_driver定义时是否要用of_match_ptr
一般驱动要同时兼容dt和acpi的话,需要在定义platform_driver的时候同时指定of_match_table和acpi_match_tablestatic struct platform_driver hns_nic_dev_driver = { .driver = { .name = "hns-nic", .of_match_tabl
2017-05-27 10:46:01 5403
原创 watchdog 提供ioctl和通过delayqueue来喂狗
watchdog_dev_register最终会调用watchdog_cdev_register来注册watchdog对应的字符设备。static int watchdog_cdev_register(struct watchdog_device *wdd, dev_t devno){ struct watchdog_core_data *wd_data; int er
2017-05-26 09:52:28 1795
原创 watchdog 注册字符设备和sys 系统来让user space可以控制watchdog
任何实现watchdog的driver都会调用watchdog_register_device来向kernel 提供的watchdog framework注册deviceint watchdog_register_device(struct watchdog_device *wdd){ int ret; mutex_lock(&wtd_deferred_reg_mu
2017-05-26 09:29:05 4947 1
原创 bl31 runtime service的注册和查找
在bl31_main 中会调用runtime_svc_init来初始化el3中定义的runtime service。由于runtime service都是通过DECLARE_RT_SVC 这个宏来定义的,从这个宏的实现可以发现所有的runtime service都是放在rt_svc_descs 这个段中#define DECLARE_RT_SVC(_name, _start, _end, _t
2017-05-25 15:32:27 1793
原创 sbsa watchdog的驱动分析
sbsa watchdog的全称是SBSA(Server Base System Architecture) Generic Watchdog driver。也就是sbsa是Server Base System Architecture的缩写这份code的路径在drivers/watchdog/sbsa_gwdt.c 中ARM SBSA Generic Watchdog的timeout 分
2017-05-25 11:35:01 2687
原创 gtdt的作用之一注册sbsa watchdog device
gtdt是APCI的一个子表,主要用来传递timer相关的resource其初始化函数在drivers/acpi/gtdt.c 中static int __init gtdt_sbsa_gwdt_init(void){ struct acpi_table_header *table; void *platform_timer; int index = 0;
2017-05-25 09:20:30 1413
原创 tar
tar 命令可以解压和压缩。一般压缩用tar -zcvf file.tar DirName.而解压用 tar -zxvf file.tar需要注意的是解压的时候,解压后的目录名就是压缩的目录名,和file.tar 这个压缩后的名字没啥关系。如下例子所示:
2017-05-24 16:40:48 845
原创 bl31 进入bl32的过程
bl32是所谓的secure os。前面知道bl32的init函数是从bl32的main函数中调用的.在bl31中为会bl32 的secure os提供runtime service.从arf/services/spd 下可以看到secure os 目前支持四种,分别是opteed/tlkd/trusty/tspd.我们这里以opteed为例,看opteed 这个secure os对应的run
2017-05-24 16:07:43 8821
原创 hns_mdio通过注册mdio bus对phy寄存器操作
从drivers/net/ethernet/hisilicon 下的Makefile可以看到hns_mido.c 可以被buildin,也可以被build成ko。且只有一个文件hns_mdio.cobj-$(CONFIG_HNS_MDIO) += hns_mdio.ostatic struct platform_driver hns_mdio_driver = { .probe
2017-05-24 11:49:30 6184
原创 bl31的执行
之前没有atf的时候,一般的bootflow是rom code ->uboot->kernel有了atf后,其bootflow 改为rom code ->uboot->atf->kernel.加入没有secure os的话,这里的atf就仅仅之bl31.bin在arm64的时候一般从rom code ->uboot的时候cpu处于el3,32bit模式,然后uboot中设置好warm re
2017-05-24 09:55:25 5986 1
原创 ethtool 命令对应的driver的具体实现
在net/core/dev_ethtool 中的dev_ethtool定义了ethtool 这个工具向下调用的接口int dev_ethtool(struct net *net, struct ifreq *ifr){ struct net_device *dev = __dev_get_by_name(net, ifr->ifr_name); void __user
2017-05-24 09:22:46 3310
原创 通过acpi_dev_found 区分不同的deviceid,通过dev_of_node和is_acpi_node 区分dt和ACPI
如果一个driver需要兼容两套设定,可以通过acpi_device_id 来区分static const struct acpi_device_id hns_enet_acpi_match[] = { { "HISI00C1", 0 }, { "HISI00C2", 0 }, { },};这样在driver中接可以根据不同的device_id来区分不同的
2017-05-23 10:30:52 3053
原创 kernel通过psci的smc让从cpu boot的过程
kernel会调用smp_init 来让从核cpu 起来.void __init smp_init(void){ unsigned int cpu; idle_threads_init(); cpuhp_threads_init(); /* FIXME: This should be done in userspace --RR */
2017-05-22 10:46:55 10501
原创 arm-trusted-firmware 收到psci的smc处理的过程
当kernel psci 通过smc陷到el3时的入口函数如下:arm-trusted-firmware-master/bl31/aarch64/runtime_exceptions.Svector_entry sync_exception_aarch64 /* * This exception vector will be the entry point for S
2017-05-22 09:20:41 7333 1
原创 rpm
可以通过rom -ivh ×××.rpm 来安装rpm build的命令有很多,我一般用下面的命令build这样会差生两个包这两个rpm包中包含的内容可以从kernel.spec 中看到.一般情况下kernel-header 源文件,,一般用kernel这个rpm包
2017-05-20 17:34:56 795
原创 通过工具让正则表达式图形化
在这个网址输入正则表达式https://regexper.com/,你就能看到正则表达式按照图形化的话的形式显示出来.通俗易懂.
2017-05-20 14:30:32 1169
原创 nvme创建config文件系统
如果enable drviers/nvme/target 之后会调用nvmet_init_configfs 来创建configs 文件系统.按组行目录/sys/kernel/config可以通过cat /proc/mounts 或者mount 命令来查看config的mount点static struct configfs_subsystem nvmet_configfs_subsyste
2017-05-20 10:37:36 1753
原创 使用tr加解密的ROT13 算法实践
ROT13 算法的加密和解密用的是一组key,具体测试如下图所以,可见感叹号没有没加盟,只是对字符加密,数字应该也不会加密
2017-05-19 10:38:27 1622
原创 通过object_is_on_stack检测指针是否在stack上
我们知道kernel中的stack很小,当别人传递给一个数组,如果这个数组很大的话,就需要检查这个数组是在stack上还是在堆上,kernel还提供了一个函数用于检查某个变量是否在stack上,不限于数组static inline int object_is_on_stack(void *obj){ void *stack = task_stack_page(current);
2017-05-19 10:14:10 658
原创 由nvme想到的通过周期性timer检查硬件controller的状态
有时候需要监控硬件是否工作正常,如果已经有寄存器可以确认工作不正常,那这个时候可以reset 这个hw。例如nvme需要周期性的检测nvme controller是否工作正常,就是用这种方法做的的,详细code如下:要使用timer周期性的检测硬件状态,首先在自身的结构图中加上struct timer_list。例如:struct nvme_dev { struct nvme
2017-05-19 09:53:02 1369
原创 UEFI向SRAT 表中添加memory信息
从inf文件可以看到这是一个DXE_DRIVER,其入口函数是AcpiPlatformEntryPoint[Defines] INF_VERSION = 0x00010005 BASE_NAME = AcpiPlatform MODULE_UNI_FILE = Acp
2017-05-18 15:17:38 1727
原创 通过date测试shell 命令执行占用的时间
首先通过echo $SHELL 查看当前系统用的shell。然后编写测试脚本。可以看到结果输出程序执行用了5s。源码如下:#!/bin/bashstarttime=$(date +%s)sleep 5endtime=$(date +%s)cost=$((endtime - starttime))echo $cos
2017-05-18 11:36:51 4835
原创 uefi driver
uefi drivers 是指在inf中将MODULE_TYPE指定为UEFI_DRIVER。例如inf的例子[Defines] INF_VERSION = 0x00010005 BASE_NAME = DiskIoDxe MODULE_UNI_FILE = Disk
2017-05-18 10:29:23 6202
原创 nvme_core_init
从drivers/nvme/host/kconfig中可以看到,要使用nvme的话,只需要打开CONFIG_BLK_DEV_NVME即可,当选择这个时,默认会选择CONFIG_NVME_COREconfig BLK_DEV_NVME tristate "NVM Express block device" depends on PCI && BLOCK select
2017-05-18 09:55:35 2147
原创 wc
wc 用于统计文件中的lines/words/bytes 等,在shell中经常用grep processor /proc/cpuinfo | wc -l 来统计有多少个cpu
2017-05-17 16:06:19 568
原创 改变echo 输出的颜色
echo -e \e[1; 和 \e[0m 配对,表示打开和关闭对echo的设定。\e[1;number.这个number可以随意,下面是一些测试,可见40开都的都是背景颜色,而30开始的是改变字体的颜色.测试如下:
2017-05-17 15:30:05 1781
原创 nvme的__nvme_revalidate_disk分析
在nvme_scan_ns_list->nvme_validate_ns->nvme_alloc_ns 中会通过alloc_disk_node来申请一个gendisk来描述一个独立的磁盘或者分区。 disk = alloc_disk_node(0, node); if (!disk) goto out_free_id;
2017-05-17 15:11:36 1837
原创 CON_PRINTBUFFER的作用
下面分析的code都在register_console 这个函数中在register_console中,如果console_cmdline 中的console driver和selected_console相等,也就是下面的条件成立 if (i == selected_console) { newcon->flags |= CON_CONSDEV;
2017-05-17 11:24:26 1861
原创 UEFI Application
UEFI Application是一种EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION类型的EFI Image。os loader 是一种特殊的application,执行完成后不会return或者exit,相反会调用EFI boot service gBS->ExitBootServices()来将控制权从fireware 传递给os。下面是一个名为HelloWorld
2017-05-16 16:52:10 4878
原创 who and w
通过who命令可以查看有谁登录这台机器,例如下面这个就说明有两个root 用户登录,一个是从串口终端ttyS0登录,一个是通过伪串口pts/0 登录的,具体是通过ssh 在192.168.1.107上登录的.
2017-05-16 14:54:16 666
原创 nvmem 架构
nvme是针对非易失性,例如eeprom, efuses等的一个抽象层,nvme分为consumer和provide,其在kernel中的位置为drivers/nvmem其中provide 最终要的就是调用nvmem_register,其一般的模板如下:static struct nvmem_config econfig = { .name = "qfprom", .o
2017-05-16 14:44:51 6582
原创 watch命令重复执行某一个命令
通过watch -n 1 可以每一秒都执行后面的echo hello.执行效果如下:实际测试watch 后面的命令可以用双引号,也可以不用
2017-05-16 10:16:40 2761
原创 nvme_queue_scan 分析
nvme_reset_work 最后通过nvme_queue_scan(&dev->ctrl); 来scan controllervoid nvme_queue_scan(struct nvme_ctrl *ctrl){ /* * Do not queue new scan work when a controller is reset during *
2017-05-16 10:11:09 1582
原创 fg/bg/jobs
如果执行dd if=/dev/zero of=/dev/null bs=10M count=100000 这个命令的话,cpu就会100%的被站住,当然你可以通过添加&,也就是dd if=/dev/zero of=/dev/null bs=10M count=100000 & 让这个命令后台执行。如果没有家&的话,这个命令就会占满当前cpu,只是可以通过ctrl+z 暂停这个命令,这个时候通过
2017-05-15 17:05:28 560
EDK_II_UserManual_0_7.pdf
2017-03-24
EDK_II Module Writer_s Guide_0_7.pdf
2017-03-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人