1 unsigned long copy_from_user(void * to, const void __user * from, unsigned long n)
第一个参数to是内核空间的数据目标地址指针,
第二个参数from是用户空间的数据源地址指针, 第三个参数n是数据的长度。 如果数据拷贝成功,则返回零;否则,返回没有拷贝成功的数据字节数。 此函数将from指针指向的用户空间地址开始的连续n个字节的数据产送到to指针指向的内核空间地址 。
kexec -l image的处理过程如下:
1. 调用解压缩算法将image解压到malloc的buffer中
2. 获取可用的内存空间保存到struct kexec_info *info中
3. 调用probe函数判断elf文件的格式
3.1 build_elf_exec_info->build_elf_info->build_mem_ehdr
4. 调用load函数加载image
4.1 build_elf_exec_info(&ehdr)
4.2 从ehdr中获取kernel_addr与kernel_size
4.3 elf_exec_load(&info)->add_segment(&info)
5. valid_memory_ranges
6. kexec_load
6.1 kimage_alloc_init(&image)->do_kimage_alloc_init(&image)->copy_user_segment_list->sanity_check_segment_list