自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(85)
  • 资源 (3)
  • 收藏
  • 关注

原创 git checkout 一个目录

如果一个目录下有多个文件的更改,但是不想用这些修改的话,可以通过git checkout  整个目录

2017-05-27 14:55:14 15740

原创 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 5402

原创 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 4946 1

原创 shell 流程控制语句测试

1:if else测试结果:2:for结果:可见只有第一种for循环是对的

2017-05-25 15:59:41 557

原创 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 2685

原创 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 1412

原创 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 8820

原创 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

原创 du and df

du 是disk usage的简写,用du -h可以查看某个目录的size ,-m 表示以兆为单位表示

2017-05-24 10:47:27 698

原创 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 5983 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 3309

原创 通过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

原创 解压rpm包

通过rpm2cpio 将rpm包转成cpio后在通过cpio -div 解压。参考如下:

2017-05-22 15:52:26 855

原创 通过rpm -qf 可以查看某个文件输入哪个rpm包

通过rpm -qf 可以查看某个文件输入哪个rpm包。举例如下:

2017-05-22 10:56:07 1983

原创 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 10500

原创 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 7332 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 1752

原创 使用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 6201

原创 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

原创 md5sum

通过md5sum 可以计算文件的md5值,这样可以比较文件是否被篡改.

2017-05-17 16:13:12 792

原创 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 6581

原创 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

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除