自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 通过KBUILD_MODNAME让dev_err等函数打印模块的name

在drivers/base/core.c 中有dev_err 等的实现2808    #define define_dev_printk_level(func, kern_level)        \2809    void func(const struct device *dev, const char *fmt, ...)    \2810    {              

2017-07-31 15:26:01 5866

原创 通过cat /prco/driver/rtc 看到rtc的信息

在drivers/rtc/rtc-efi.c 中会定义rtc_class_ops 由于注册rtc设备static const struct rtc_class_ops efi_rtc_ops = {    .read_time    = efi_read_time,    .set_time    = efi_set_time,    .read_alarm    = efi_re

2017-07-31 10:31:10 1077

原创 idr 映射总结

idr的源码包含lib/idr.c 和include/linux/idr.hidr 是一种关联数组,采用基数让没一个键关联一个特定的值可以通过下面的方式初始化一个idr,采取先定义然后调用idr_init 来初始化.动态创建static struct idr hfi1_unit_table;    idr_init(&hfi1_unit_table);静态创建stati

2017-07-29 14:45:31 4612

原创 socket系统调用

当user space调用socket 编程是,最终会调用到linux kernel系统调用如下:SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol){    int retval;    struct socket *sock;    int flags;    //主要是建立一个struct

2017-07-29 11:46:23 1100

原创 acpi_apd.c 的作用是create I2C device.

acpi_apd.c 用于创建I2C devicestatic const struct acpi_device_id acpi_apd_device_ids[] = {    /* Generic apd devices */#ifdef CONFIG_ARM64    { "APMC0D0F", APD_ADDR(xgene_i2c_desc) },    { "BRCM9

2017-07-28 11:42:10 1043

原创 使用objdump grub中的命令

grub2中没有统一的symbol文件而是由一个一个的模块组成,这里以reboot 为例查看objdump -s 和objdump -S的区别

2017-07-27 17:14:32 687

原创 设置网卡设备默认名字是eth0/eth1的过程

在网卡设备的驱动中首先会调用    ndev = alloc_etherdev_mq(sizeof(struct hns_nic_priv), NIC_MAX_Q_PER_VF);    if (!ndev)        return -ENOMEM;来申请一个struct net_device *ndev;#define alloc_etherdev_mq(sizeof

2017-07-27 11:14:20 6511

原创 grub2 中时间的获取在arm和arm64的差别

在arm32的时候,在grub中通过调用bios提供的create_event 来产生时间戳,源码路径如下:grub-core/kernel/arm/efi/init.cincrement_timer (grub_efi_event_t event __attribute__ ((unused)),         void *context __attribute__ ((unused)

2017-07-27 09:38:31 2306

原创 ceph系统的整体逻辑架构

ceph系统的逻辑结构如下:rados:是有大量的存储节点组成,每个节点都有字节的硬件资源(cpu/memory/net),和软件资源 例如os和文件系统,rados本身就是一个对象存储系统.librados:对rados进行的抽象和封装,因此librados也是对象存储的文件系统rdos gw:提供和swift兼容的RESTfulrbd:提供一个块设备接口,主要用于虚拟化场景

2017-07-24 14:24:14 834

原创 linaro optee os官网的几张架构图

第一张:第二张第三张

2017-07-21 17:32:27 3298

原创 kernel中的除法总结

在lib/div64.c 中提供了除法操作static inline u64 div_u64(u64 dividend, u32 divisor); //无符号除法操作:除数是无符号64bit,被除数是无符号32static inline s64 div_s64(s64 dividend, s32 divisor);//有符号除法操作:除数是有符号64bit,被除数是有符号32stat

2017-07-21 11:35:28 6611

原创 通过ktime 测试code 运行时间

在kernel中可以按照下面的sample code来通过ktime测量code运行的时间    ktime_t            ktime;    s64            runtime = 0;    ktime = ktime_get();    xxx    xxx    需要测量时间的code    xxx    ktime = ktime

2017-07-21 10:52:38 5995 1

原创 dma client test

在driver/dma/dmatest.c 可以测试dma client.config DMATEST    tristate "DMA Test client"    depends on DMA_ENGINE    select DMA_ENGINE_RAID    help      Simple DMA test client. Say N unless you'r

2017-07-21 10:26:46 3547

原创 使用NAPI的完整例子

hns_nic_try_get_ae->hns_nic_init_ring_datastatic int hns_nic_init_ring_data(struct hns_nic_priv *priv){struct hnae_handle *h = priv->ae_handle;struct hns_nic_ring_data *rd;bool is_ver1 = AE_

2017-07-18 15:19:50 3090

原创 net_device_ops的ndo_open和ndo_start_xmit函数

net_device_ops的ndo_open 函数实在dev_open->__dev_open 中打开的.    if (!ret && ops->ndo_open)        ret = ops->ndo_open(dev);static int hns_nic_net_open(struct net_device *ndev){    struct hns_nic

2017-07-18 11:01:05 8648 1

原创 acpi的_PXM 表示device所在的numa id

如果使能了CONFIG_NUMA#ifdef CONFIG_NUMAstatic inline int dev_to_node(struct device *dev){    return dev->numa_node;}static inline void set_dev_node(struct device *dev, int node){    dev->nu

2017-07-17 09:38:54 2104

原创 optee 中静态memory的管理

optee os中的静态memory都存在static_memory_map 这个数组中,这里的#define MAX_MMAP_REGIONS    13所以这个数组最大保存14个静态memorystatic struct tee_mmap_region static_memory_map[MAX_MMAP_REGIONS + 1] __early_bss;这个数组会在core_in

2017-07-14 15:57:58 2019

原创 对TA 镜像文件的加密

optee中通过scripts中的sign.py 来对tee签名#def get_args():    from argparse import ArgumentParser    parser = ArgumentParser()    parser.add_argument('--key', required=True, help='Name of key file

2017-07-14 14:55:21 995

原创 通过memblock的debugfs接口查看memblock信息

在mm/memblock.c 中会为memblock 在/sys/kernel/debug 下为memblock新建一个入口,通过这个入口可以看到bios 传给kernel的memory和在kernel中已经reserve 好的memory.static int __init memblock_init_debugfs(void){//在调用debugfs_create_dir 是如果

2017-07-14 09:24:00 1981

原创 tee driver 对共享内存的管理

在driver/tee/optee/core.c中的optee_probe函数中会调用optee_config_shm_memremap 来配置secure world 和 normal world之间的共享内存static struct tee_shm_pool *optee_config_shm_memremap(optee_invoke_fn *invoke_fn, void **m

2017-07-13 17:08:36 1663

原创 netperf 测试

下载源码后tar xf netperf-2.7.0.tar.gzcd netperf-2.7.0./configure --build=aarch64-unknown-linux-gnumake && make install这个时候有可能发生下面的错误针对这个问题solution 如下:最终nerservice 这个bin已经build 出来了

2017-07-13 14:43:03 1455

原创 coremark测试

coremark的官网在http://www.eembc.org/coremark/index.php。注册后申请就可以拿到源码拿到源码后通过下面的方法即可以编译运行tar xf coremark_v1.0.tgzcd coremark_v1.0makecoremark 运行的结果会生成两个文件run1.log和run2.log

2017-07-13 10:05:03 6532

原创 kernel中的tee driver

optee 驱动主要是tee_supplicant和libteec 和tee 交互的桥梁.其路径在drivers/tee 这个路径下:其核心文件有两一个,一个是tee_core.c ,另外一个是optee/core.c先看tee_core.cstatic int __init tee_init(void){    int rc;//新建一个class,这样就可以在/sys/cl

2017-07-13 09:30:25 2066

原创 通过cache_line_size得到L1 cache size

通过cache_line_size 可以得到L1 cache的size    if (cache_line_size() == 128 || cache_line_size() == 256) {        mlx4_dbg(dev, "Enabling CQE stride cacheLine supported\n");        /* Changing the real

2017-07-12 09:12:51 3202

原创 DO_ONCE 和 printk_once

DO_ONCE 这个宏是是kernel 为避免一个函数被调用两次而定义的宏#define DO_ONCE(func, ...)                             \    ({                                     \        bool ___ret = false;                         \ 

2017-07-12 08:53:18 1601

原创 e1000 网卡使用NAPI

在e1000 网卡的probe函数中会调用netif_napi_add 来注册在第一次接收中断后的poll函数。netif_napi_add(netdev, &adapter->napi, e1000_clean, 64);在e1000_setup_rx_resources 函数中会申请一个4k的DMA bufferstatic int e1000_setup_rx_resources

2017-07-12 08:52:35 2526

原创 iostat/vmstat/sar/mysql

安装运行

2017-07-11 10:41:24 567

原创 lsscsi

2017-07-11 10:34:07 2262

原创 smartctl

安装和开启服务检查硬盘是否开启smartctl(最后两行)

2017-07-11 10:29:20 1061

原创 iozone 测试

2017-07-11 10:20:14 1158

原创 github 上新建仓库

1:首先在github上新建目录2:然后提交改动

2017-07-11 10:15:27 474

原创 java 测试

安装包 128  2017-07-10 05:15:25 zypper install java  129  2017-07-10 05:16:28 java -version这里就可以运行java version命令,如果要编译的话,还需要安装下面的包。这里一定要注意java的测试文件的名字就是类的名字。我还在这里犯了个错误  150  2017-07-10 05:25:26

2017-07-10 17:41:26 397

原创 php 测试

2017-07-10 17:35:47 396

原创 通过grep -f 比较两个文件的不同

2017-07-10 11:16:11 7543

原创 cmake 测试

首先写一个简单的c语言程序通过cmake 生产makefile,然后再通过makefile 来编译程序,并运行那个程序cmake 和makefile后执行后的目录

2017-07-10 10:34:30 835

原创 scsi 底层实现的template(sas/sata host)

scsi 子系统是一个分层结构,总共分为三层Upper leve:disk driver(linux/drivers/scsi/sd.c), taple driver(linux/drivers/scsi/st.c),cdrom driver(linux/drivers/scsi/sr.c),generic driver(linux/drivers/scsi/sg.c)mid leve

2017-07-07 10:51:51 1053

原创 grub2的exit命令

在grub-core/commands/minicmd.c 中有实现cat/help/dump/rmmod/lsmod/exit 命令GRUB_MOD_INIT(minicmd){  cmd_cat =    grub_register_command ("cat", grub_mini_cmd_cat,               N_("FILE"), N_("Show t

2017-07-06 17:02:51 1008

原创 通过bcc 使用ebpf

通过前一篇博文知道要使用ebpf debug kernel还是相当麻烦的,github 上有个项目https://github.com/iovisor/bcc 可以简化ebpf的操作,应为kernel space已经支持ebpf,所以这个项目主要集中在user space部分的编写,user space 可以通过各种语言编写,这里以python为例.下面的代码的是在调用sys_clone的

2017-07-06 09:33:26 3023

原创 ebpf 实例

ebpf的全程是enhancement to berkeley packet filter。网上介绍的资料有很多,举个例子。ebpf的code 都分成user space 和 kernel space的两部分,在/samples/bpf 路径下有很多例子我以其中的一个为例首先看kernel 部分SEC("kprobe/__netif_receive_skb_core")in

2017-07-06 09:24:04 3230

原创 kprobe

kprobe 则可以分别在被探测函数的前后分别执行毁掉函数,kprobe->pre_handle->被探测函数->post_handler.当执行到被探测函数发生fault(例如怕个fault)会调用fault_handler,当陷入breakopint是会调用break_handler例如下例会在执行_do_fork前执行handler_pre,执行完成后调用handler_post,当

2017-07-06 09:09:20 526

空空如也

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

TA关注的人

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