- 博客(82)
- 资源 (3)
- 收藏
- 关注
原创 hugepage
arm64采用4级页表。分别是pgd->pud->pmd->pte,每个页表占64bit(8Byte),因此一个物理的4K页表可以存放512个也表项。如果采用pmd最为pte的话,就简化成三级,则每个pmd可以表示512*4KB =2MB的size。因此这设置CONFIG_ARM64_4K_PAGES=y的情况下打开CONFIG_HUGETLB_PAGE和CONFIG_HUGETLBFS的情况
2017-03-31 15:59:45 1519
原创 request_resource_conflict 源码分析
request_resource_conflict 用于检测新的resource和已经加入的resource是否有重叠,这个函数可以检测io/memory resource是否冲突struct resource *request_resource_conflict(struct resource *root, struct resource *new){struct resource
2017-03-31 11:08:31 1734
原创 pcie spec的简单理解
pcie 采用x1/x2/x4/x8/x16/x32 表示两个pcie devices之间的link,pcie是穿行总线而pci是并行的总线,pcie spec上将pcie 3.0 x1的带宽是2GB/s,物理层使用128/130编码,及128bit是数据,但是总线上传输的是130bit。这里的2GB/s 是怎么算出来来的呢?(8Gb/s ×2 )/ bit = 2GB/s。这里的8Gb/s
2017-03-31 10:32:51 8597
原创 nova schedule 调度器之FilterSchedulerz中的 _get_all_host_states
在filter_scheduler.py 的_schedule 中首先会调用_get_all_host_states来获得所有host的状态。 def _get_all_host_states(self, context): """Template method, so a subclass can implement caching.""" re
2017-03-30 17:03:47 953
原创 nova schedule 调度器之FilterScheduler 申请到instance后HostState持有资源的更新
在filter_scheduler.py 的_schedule 中选出需要的host后,会调用chosen_host.obj.consume_from_request(spec_obj) 来更新resource资源.consume_from_request 是在host_manager.py中实现 def consume_from_request(self, spec_obj):
2017-03-30 15:34:04 916
原创 grub的test命令
一般在build grub的最后会通过grub-mkimage来生成grubaa64.efi,其中-p 后面跟的是在grub.cfg 中可以支持的命令 ./bin/grub-mkimage -v -o grubaa64.efi -O arm64-efi -p / boot chain configfile efinet test这里重点看一下test这个命令。加上这个命令后,就可以在gru
2017-03-30 14:53:39 1111
原创 pcie bar资源的读取和remap
在pci_setup_device->pci_read_bases 中会读取bios 中配好的bar资源。pci_read_bases(dev, 6, PCI_ROM_ADDRESS);可见bar资源最多有6个,spec中也是这么规定的.static void pci_read_bases(struct pci_dev *dev, unsigned int howmany, int rom
2017-03-30 11:16:34 7043
原创 kernel中用%pR来打印resource结构体
kernel中用struct resource *res;表示资源struct resource { resource_size_t start; resource_size_t end; const char *name; unsigned long flags; unsigned long desc; struct resourc
2017-03-30 09:28:20 3363
原创 nova schedule 调度器之FilterScheduler
def select_destinations(self, context, spec_obj): """Selects a filtered set of hosts and nodes.""" self.notifier.info( context, 'scheduler.select_destinations.start',
2017-03-29 17:15:40 1596
原创 nova scheduler调度器
当在conductor中通过_schedule_instances 来调用select_destinations def _schedule_instances(self, context, request_spec, filter_properties): scheduler_utils.setup_instance_group(context, request_spec,
2017-03-29 15:48:53 2056
原创 smmu学习笔记之fwnode_handle代表smmu iort port在内存中的存在其作用是找到iommu_ops
在iort_init_platform_devices 中会从iort_table 中找node type是ACPI_IORT_NODE_SMMU 或者ACPI_IORT_NODE_SMMU_V3 的node,如果找到就申请一个fwnode_handle 类型的空间struct fwnode_handle *fwnode;fwnode = acpi_alloc_fwnode_static(
2017-03-29 14:48:03 3349
原创 smmu学习笔记之iommu_fwspec
在arm_smmu_iort_xlate 主要用于初始化dev->iommu_fwspec 这个结构体static int arm_smmu_iort_xlate(struct device *dev, u32 streamid, struct fwnode_handle *fwnode, const struct iommu_ops *ops){int r
2017-03-29 11:29:39 2396
原创 通过smbios传递参数给kernel而不通过grub
平时都是通过grub的commandline来传递参数给kernel,但是有些参数不想通过grub来传,这个时候就可以通过smbios来传。具体怎么使用呢?具体如下:static int do_sta_before_sun(const struct dmi_system_id *d){ pr_info("%s detected: will evaluate _STA before
2017-03-28 15:52:13 1109
原创 docker -v 添加数据卷
docker run --name test1 -v /test1 ubuntu bash 这条命令会在docker里面mount一个test1的目录,这个目录会和另外一个目录做映射,可以通过docker inspect -f {{.volume}} test1 查看,或者直接通过docker inspect -f test1 查看,在其中找关键字mount 就可以了。从mounts的sourc
2017-03-28 15:12:06 25394
原创 docker 的create/start
可以通过docker create命令来创建一个新的容器,但是不运行。要运行的话就是通过start 命令运行.
2017-03-28 11:35:58 1163
原创 pcie的pci_scan_bus
pcie的资源主要有三种,分别是io/mem/bus.再调用pci_create_root_bus的时候,这三种资源要提前准备好[ 13.419865] pci_bus 0002:80: root bus resource [mem 0xa8800000-0xaffeffff window][ 13.419865] pci_bus 0002:80: root bus resourc
2017-03-28 10:02:19 4691
原创 pcie的pci_scan_device
在pci_scan_device 中通过pci_bus_read_dev_vendor_id 找到pci 设备后,就调用pci_setup_device 来初始化设备static struct pci_dev *pci_scan_device(struct pci_bus *bus, int devfn){ struct pci_dev *dev; u32 l;
2017-03-28 09:10:07 4055
原创 pcie的pci_create_root_bus 分析
在pci_create_root_bus 中 首先会申请一个pci的root bus struct pci_bus *b; b = pci_alloc_bus(NULL); if (!b) return NULL; b->sysdata = sysdata; b->ops = ops; b->number = b->
2017-03-27 10:08:02 1997
原创 uefi 调用ExitBootServices
所有的boot service 都会在进入kernel的最后阶段退出,如果driver想接受这一个event的话,可以参考下面的写法创建一个新的event,注意一定要是 gEfiEventExitBootServicesGuidStatus = gBS->CreateEventEx ( EVT_NOTIFY_SIGNAL,
2017-03-25 16:19:42 5055
原创 pcie的8个capability(功能号)的查找
PCIe的capability代表PCIe设备是否具备某种功能,例如在static __inline__ int drm_pci_device_is_agp(struct drm_device *dev){ if (dev->driver->device_is_agp != NULL) { int err = (*dev->driver->device_is_a
2017-03-25 11:07:16 12144
原创 pcie 对rc操作的ops
rc 的全程是root compose,一般有host bridage + host bus + 几个 host port组成,是最靠近cpu的pci device。对rc的操作有一个专门的ops,每家的都不一样。这个ops 一般实在pci_mcfg_match_quirks 中根据bios传递过来的mcfg_oem_id/mcfg_oem_table_id/mcfg_oem_revision 来
2017-03-25 10:20:57 3072
原创 pcie对设备的枚举
kernel 中对pci设别的枚举flow如下:acpi_pci_root_add->pci_acpi_scan_root->acpi_pci_root_create->pci_scan_child_bus->pci_scan_slot这里的slot表示一个独立的PCI设备,PCI一般是由segment:bus:device:fn 这四部分组成root@ubuntu:/sdf5# ls
2017-03-25 09:34:05 4996
原创 pcie的配置空间
对PCI 设备来讲,只能操作configuration space的256Byte而PCIe 可以访问整个4096 Bytes 空间整个配置空间如下图所示而PCI 设备只能访问256 byte,这256 byte的详细spec u如下:
2017-03-24 15:41:48 1366
原创 docker 的exec/diff/commit/history
通过docker run --name web -d -p 80:80 nginx 可以跑起来一个nginx且name为web的容器通过docker exec -it web bash 可以改变docker 里面的内容,并在通过exit 退出docker后,可以使用diff 命令查看修改了哪些文件通过commit 命令可以将修改的Image 保存到本地
2017-03-24 09:04:36 693
原创 如何把一个盘剩余的空间分成一个区
1:首先用fdisk -l 看找到你要分盘的总size,这里以/dev/sdf为例。Size == 3.7TB2:输入parted 命令看看当前这个盘已经分好的区的start和end3:输入mkpart命令,start输入100G(这个是上一个区的结束的地址),end输入3879731M(3.7T/1024/10244:退出parted后,再次输入fdisk
2017-03-23 14:14:56 3715 1
原创 parted/fdisk/blkid(如何把整个盘分成一个区)
1:首先用fdisk -l 看找到你要mount的盘的size,这里以/dev/sdb为例。Size == 3.7TB2:如果盘的size 超过2T请用parted 分区,小于2T 可以使用fdisk,这里以parted为例.格式化盘.3:使用parted 分区:parted /dev/sdb4:输入mkpart命令,start输入1,end输入387973
2017-03-23 11:23:33 3439
原创 nova通过check_instance_lock对危险的操作保护
在computer/api.py 中一些函数前面有有一个装饰器check_instance_lock @check_instance_lock @check_instance_cell @check_instance_state(vm_state=None, task_state=None, must_have_l
2017-03-23 10:42:51 785
原创 mbigen的domain匹配
在mbigen_device_probe->mbigen_acpi_create_domain->platform_msi_create_device_domain domain = platform_msi_create_device_domain(&pdev->dev, num_msis, mbigen_write_msg,
2017-03-23 09:42:14 1423
原创 driver中同时兼容dtb和ACPI 需要注意的两点
如果你的driver 要兼容dtb和acpi 两种启动方式,基本可以分成两步第一步:在定义platform_driver match table的时候同时定义acpi和dtb的。例如:static const struct acpi_device_id mbigen_acpi_match[] = { { "HISI0152", 0 }, {}};st
2017-03-23 09:06:19 3301
原创 nova的soft_delete
在api/openstack/compute/servers.py 中实现_delete 函数用于删除镜像 def _delete(self, context, req, instance_uuid): instance = self._get_server(context, req, instance_uuid) context.can(serv
2017-03-22 16:58:38 974
原创 docker run -P/port/logs -f/rm/inspect
可以通过docker -P 命令指定端口运行可以通过docker port 查询端口,通过docker logs -f 查询docker内部的输出也可以在docker中使用top命令和使用iinspect 命令查询docker的配置和状态信息可以通过docker rm删除Image,但是必须先stop,否则会报错
2017-03-22 15:44:52 719
原创 smmu学习笔记之从acpi中parse irq资源
在acpi_iort_init->iort_init_platform_devices 中会遍历iort_table 中的node,然后调用iort_add_smmu_platform_device 将irq 资源添加给device,最终会在smmu的probe函数中使用这里添加的irq资源.static int __init iort_add_smmu_platform_device(str
2017-03-22 11:53:46 1548
原创 docker Images/run -d/logs/ps/stop/search/pull 命令
可以通过docker Image 查询本地的Image,可以看到ubuntu的Image 有好几个,如果要运行16.04的话,就必须用:指定docker run -d ubuntu:16.04 /bin/sh -c "echo hello world" 可以让程序在后台运行,这个时候不进入docker,这个时候会返回一个ID,这个ID表示是这个正在运行Image的唯一标识.如果
2017-03-22 11:10:48 720
原创 smmu学习笔记之device的platform_data和driver_data
device 这个结构体中有两个变量可以存储设备的私有数据 void *platform_data; /* Platform specific data, device core doesn't touch it */ void *driver_data; /* Driver data, s
2017-03-22 10:26:30 5648
原创 通过docker 里面的Image 输出hello world
有两种方法让docker 通过Image输出hello world第一种是通过docker run ubuntu:16.04 /bin/echo "hello world"其中,run是docker的命令,ubuntu:16.04 是指定要运行的Image,如果本地没有,就从网络上查找并下载到本地。第二种是通过docker run -i -t ubuntu:16.0
2017-03-22 09:11:11 1206
原创 docker 的启动
可以通过service docker start 来启动docker。通过which docker来确定是否安装docker通过ps -ef | grep docker来确定docker是否已经成功运行,如果范县docker daemony的话,就说明docker启动成功.
2017-03-21 17:19:46 955
原创 smmu 使能前后设备如何从swiotlb切换到smmu
在smmu使能之前系统中的device都是用的swiotlb。那smmu使能之后设备如何切换到smmu呢 这个时候会分两种情况第一种是如果设备在smmu使能之前已经开始使用dma了,那smmu只能时就要通知设备从swiotlb切换到smmu。static int __init __iommu_dma_init(void){ int ret; ret = iomm
2017-03-21 16:13:38 1919
原创 使用merge_config 合并两个或多个kernel config
在scripts/kconfig路径下有一个merge_config.sh,可以用于将将两个defconfig merge成一个.使用用法如下:./scripts/kconfig/merge_config.sh -m arch/arm64/configs/defconfig arch/arm64/configs/usb-configmv -f .config .merged.confi
2017-03-20 09:13:53 5761
原创 dev/iommu_group/iommu_domain 三者关系的简单理解
从device这个结构体中可以得到struct iommu_group *group;例如:struct iommu_group *iommu_group_get(struct device *dev){ struct iommu_group *group = dev->iommu_group; if (group) kobject_get(g
2017-03-17 17:20:31 6964
原创 如何从内存中找acpi子表,以iort为例.
在kernel中一般通过acpi_get_table的方式找到某个子table的head例如可以同下面这段code找到iort的head,然后将其赋值给iort_table,下面这段code可以当模板适用于acpi的个个子表 acpi_status status; status = acpi_get_table(ACPI_SIG_IORT, 0, &iort_table
2017-03-17 16:54:34 1998
EDK_II_UserManual_0_7.pdf
2017-03-24
EDK_II Module Writer_s Guide_0_7.pdf
2017-03-24
grub 官方文档
2017-03-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人