windows内核驱动开发有类似Map这种结构吗?

我才开始接触内核驱动开发,我想在内存中存KV键值对,但是搜了很久没搜到map。map也算很常用的结构吧,难道没有嘛?如果需要我只能自己实现的话,请问大佬们有没有写好的参考一下!悬赏的分不多,只剩这么点了。

2个回答

可以用boost库或者stl(c++),里面有。

内核是c啊 map是stl里面的东西啊

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Windows内核驱动开发里有类似Map这种结构吗?我想存KV键值对怎么办?
我才接触windows内核开发,需要在内存里存KV键值对,搜了很久好像没有map,难道需要我自己实现一个吗?map也算很常用的结构了吧,有大佬自己实现过嘛?求参考!
windows内核驱动有什么收发数据包的方法
windows内核驱动有什么收发数据包的方法?windows内核驱动有什么收发数据包的方法?
Windows内核驱动如何让高速缓存(Cache)失效
Windows内核驱动如何让高速缓存(Cache)失效, 做视频采集卡,采集的视频总是有雪花点,发现DMA传输完成后,驱动取到的数据是不正确的,怀疑是内存与高速缓存(Cache)不一致引起的 使用AllocateCommonBuffer分配内存,看API说明在WIN7及之前版本,CacheEnabled参数是被忽略的,求教各位大神如何在DMA操作完成时,进行刷新。 ``` CacheEnabled Specifies whether the allocated memory can be cached. **This parameter is ignored. **The operating system determines whether to enable cached memory in the common buffer that is to be allocated. That decision is based on the processor architecture and device bus. On computers with x86-based, x64-based, and Itanium-based processors, cached memory is enabled. It is assumed that all DMA operations performed by a device are coherent with the relevant CPU caches, which might be caching that memory. If your driver needs to disable caching, call AllocateCommonBufferEx instead. ```
android 内核驱动编译
android 内核编译时,编译驱动只生成.o文件,不生成.ko文件,确认驱动没有编译进内核,第一次编译的时候生成过.ko文件,以后在编译时就不生成ko文件了。 Building modules, stage 2. MODPOST 0 modules OBJCOPY arch/arm/boot/Image Kernel: arch/arm/boot/Image is ready GZIP arch/arm/boot/compressed/piggy.gzip CC arch/arm/boot/compressed/misc.o CC arch/arm/boot/compressed/decompress.o CC arch/arm/boot/compressed/string.o AS arch/arm/boot/compressed/piggy.gzip.o LD arch/arm/boot/compressed/vmlinux OBJCOPY arch/arm/boot/zImage Kernel: arch/arm/boot/zImage is ready CAT arch/arm/boot/zImage-dtb Kernel: arch/arm/boot/zImage-dtb is ready
关于linux内核的驱动程序
类似于wm8960这种的内核提供驱动源码的,如何能得到单独的.ko驱动文件呢?
内核驱动程序的是什么意思和一般意义上的驱动应该怎么理解好
内核驱动程序的是什么意思和一般意义上的驱动应该怎么理解好 我很疑惑,请教了
linux如何拦截raw_socket原始套接字的网络数据包
请问各位大佬,现在想做一个linux网络数据包的拦截与修改,需要拦截并修改raw_socket原始套接字发送的数据包,有没有好的方法推荐的?已知netfilter和iptables不可行,这两个的拦截发生在网络层,不能拦截链路层的原始套接字数据包。有了解过BPF(eBPF)伯克利包过滤器、ebtables强制匹配特定规则的帧通过iptables、ftrace挂钩内核函数(要求内核版本大于3.19)、LSM内核安全模块挂钩。但这些方法都没有找到好的参考,目前也没有测试成功,是否有其他方法可以实现,比如驱动或者修改内核,有没有大神可以指点指点?先在此谢过。
Windows内核使用RtlAppendUnicodeToString时,中文变成乱码
Windows内核使用RtlAppendUnicodeToString时,如果追加内容有中文,会出现乱码
Chrome浏览器和新版的Edge Dev浏览器会冲突么?
&nbsp;&nbsp;&nbsp;&nbsp;Chrome浏览器近半年来经常会崩溃,有时候过几天自己就好了,有时候需要求助于网上的一些方法。<br/> &nbsp;&nbsp;&nbsp;&nbsp;后来发现同事的Chrome浏览器从来没有崩过,他没有安装过类似Chrome canary、Edge Dev这样的新版浏览器。<br> &nbsp;&nbsp;&nbsp;&nbsp;正式版Chrome和这些开发版的Chromium内核的浏览器会冲突么?如果冲突的话怎么解决?
嵌入式v4l2驱动开发 tvp5150驱动开发
查阅了很多关于v4l2驱动编写的博客和文件,发现都提到了v4l2_device_register()函数以及一些重要的结构体,如:video_device,v4l2_ioctl_ops等。然而我查看了内核kernel3.0.8提供的tvp5150.c文件,并未发现这些重要内容。。。然后,宝宝就晕了,不知道该怎么办来读这份内核驱动源码了。。求助大家,,,跪谢
Windows内核对象到底是什么?
学习中,经常会碰到Windows内核对象这一个概念,例如Mutex就是一个内核对象,我想问一下他与普通的类创建的对象有什么区别
编译内核驱动程序,没有报错但没有生成ko文件,请大家帮看下
系统:centos7.2 内核版本:5.3.7 内核代码: ``` #include <linux/init.h> #include <linux/module.h> #include <linux/netfilter.h> #include "sockopt_test.h" #define BUFFER_LEN_MAX 1024 static char buffer[BUFFER_LEN_MAX]; /* setsockopt 回调处理函数 */ int setsockopt_handler(struct sock *sk, int optval, void __user *user, unsigned int len) { switch(optval) { case SOCKOPT_SET_BUFFER: if ( copy_from_user((void*)&buffer, user, len) != 0 ) { return -EFAULT; } break; default: printk(KERN_INFO "invalid setsockopt opt : %d\n", optval); return -EFAULT; } printk(KERN_INFO "buffer[]: %s\n", buffer); return 0; } /* getsockopt 回调处理函数 */ int getsockopt_handler(struct sock *sk, int optval, void __user *user, int *len) { unsigned int cpy_len; cpy_len = *len > BUFFER_LEN_MAX ? BUFFER_LEN_MAX : *len; switch(optval) { case SOCKOPT_GET_BUFFER: if(copy_to_user(user, (void*)&buffer[0], cpy_len) != 0) { printk(KERN_INFO "getsockopt_handler fail \n"); return -EFAULT; } break; default: printk(KERN_INFO "unrecognized getsockopt optvalue : %d\n", optval); return -EFAULT; } return 0; } /* 定义nf_sockopt_ops结构体 */ static struct nf_sockopt_ops sockopt_ops_test = { .pf = PF_INET, .set_optmin = SOCKOPT_SET_MIN, .set_optmax = SOCKOPT_SET_MAX, .set = setsockopt_handler, .get_optmin = SOCKOPT_GET_MIN, .get_optmax = SOCKOPT_GET_MAX, .get = getsockopt_handler, }; static __init int sockopt_test_init(void) { int result; /* 注册sockopt */ result = nf_register_sockopt(&sockopt_ops_test); if(result != 0) { printk("register sockopt error!\n"); } printk("sockopt_test register success !\n"); return 0; } static __exit void sockopt_test_exit(void) { /* 注销sockopt */ nf_unregister_sockopt(&sockopt_ops_test); printk("sockopt_test unregister\n"); } module_init(sockopt_test_init); module_exit(sockopt_test_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Stone"); ``` MakeFile:
请问如何用linux套接字编程来发挥万兆网卡的性能?
双线程,一个生产数据放入kfifo,一个从kfifo取出数据,通过套接字发送。最终测试出来速度只能达到400MB/S。(kfifo出队64KB数据要100us) 之后我将生产者做了更改,让它只更新队首的in指针,不做数据拷贝,此时速度能达到1000MB/S。(kfifo出队64KB数据只要10us) 我怀疑是生产者生产数据写入队列时,导致消费者所在的cpu cache失效,然后cache未命中导致速度骤降。但是不知道怎么解决这个问题。 在网上搜索答案,但是没有找到类似情况。看到有一个和我问题应该比较类似的,但是没有找到解决方法。 《请问为何tcp send第一次时很慢, 第二次时很快呢?》 https://www.oschina.net/question/2897213_2193602 ```c #include "szg_common.h" #include "szg_kfifo.h" #include "szg_socket.h" /**kfifo * 队列是将linux内核中的kfifo移到了这里来用,用malloc来替代内核中的kmalloc * 此代码(发送端)运行在NXP T4240上,系统linux,万兆网卡。 * 接收端软件运行在PC上,系统windows10,万兆网卡。 * * 1.正常出入队,kfifo总大小64M 元素大小256bytes 期望出队和期望入队都是256个元素 * 速度400MB/S 出队64k要100us send要50us * 2.注释掉kfifoin中的两行memcpy(szgKfifoCopyIn中的),让其只更新队首in指针 * 速度1000MB/S 出队64k要10us send要50us * * */ #define KFIFO_SEND_SIZE 0x10000 //64k #define FIFO_IN 0x100 //每次入队时期望入队的元素个数:256个(即256*256 = 64k) #define FIFO_OUT 0x100 //每次出队时期望出队的元素个数:256个(即256*256 = 64k) #define FIFO_E_SIZE 0x100 //元素大小:256byte #define FIFO_SIZE 0x4000000 //总大小:64Mbyte (256*256*1024个) kfifo testkFifo; void *szgTestKfifoThread(void *param) { UINT32 ret; char data_buf[KFIFO_SEND_SIZE] = {0}; while(TRUE) { ret = szgKfifoIn(&testkFifo,data_buf,FIFO_IN); if(ret == 0) { pthread_yield(); //usleep(2); } } } int kfifo_test(void) { INT32 listenFd; INT32 connectFd; INT32 ret; UINT32 clientIp; pthread_t threadId; pthread_attr_t attr; struct timeval start,end; char send_buf[KFIFO_SEND_SIZE]; memset(send_buf,1,KFIFO_SEND_SIZE); signal(SIGPIPE,SIG_IGN); /** * 初始化kfifo * 总大小 64M * 元素大小 256byes * 元素个数 256*1024个 * 出队,入队都是期望256个元素,不到256个有多少出多少,实际个数作为返回值返回 */ ret = szgKfifoAlloc(&testFifo,FIFO_SIZE/FIFO_E_SIZE,FIFO_E_SIZE); CHECK_EXIT(ret == ERROR, "fifo init err!"); /*创建线程,线程分离*/ pthread_attr_init (&attr); pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED); if (0 != pthread_create(&threadId,&attr, (void *)szgTestKfifoThread,NULL)) { SZG_LOG(SZG_LOG_ERR,"Create Thread data_filter_thread Fail \n"); return ERROR; } /*服务器初始化 端口6101 发送缓存2M 接收缓存1M(2M/2)*/ listenFd = szgSockInit(NULL,6101,0x200000); CHECK_EXIT(listenFd < 0, "socket error"); while(TRUE) { printf("wait connect\n"); /*客户端ip通过&clientIp返回(其实下面没用到)*/ connectFd = szgSockAccept(listenFd,&clientIp); if (connectFd < 0) { SZG_LOG(SZG_LOG_ERR,"server Accept Failed!/n"); return 0; } while(TRUE) { //gettimeofday(&start,NULL); /*出队 256*256 */ ret = szgKfifoOut(&testkFifo,send_buf,FIFO_OUT); if(ret == 0)//没有数据 { pthread_yield(); continue; //usleep(2); } //gettimeofday(&end,NULL); //printf("kfifo time %lu us \n",(1000000*(end.tv_sec-start.tv_sec) + (end.tv_usec-start.tv_usec))); /*发送64k*/ //gettimeofday(&start,NULL); ret = szgSendData(connectFd,send_buf,ret*FIFO_E_SIZE); if(ret == ERROR) { SZG_LOG(SZG_LOG_ERR,"szgSendData data error\n"); break; } //gettimeofday(&end,NULL); //printf("send time %lu us \n",(1000000*(end.tv_sec-start.tv_sec) + (end.tv_usec-start.tv_usec))); } } return 0; } ```
不懂就问,Appium 小白,在微信切换 webview 时遇到 Original error: unknown error: Failed to get PID for com.tencent.mm:tools
##前置条件: 1.真机 OPPO R11st 2.安卓版本 7.1.1 3.真机webview 66.0.3359.126(chrome浏览器和微信内嵌webview同此版本) 4.appium 1.15.1 ###代码 public static void main(String[] args) throws Exception { //创建配置对象 DesiredCapabilities desiredCapabilities = new DesiredCapabilities(); desiredCapabilities.setCapability("deviceName","OPPO R11st"); //测试平台 desiredCapabilities.setCapability("platformName", "Android"); //安卓系统版本 desiredCapabilities.setCapability("paltformVersion", "7.1.1"); desiredCapabilities.setCapability("appPackage", "com.tencent.mm"); desiredCapabilities.setCapability("appActivity", ".ui.LauncherUI"); //不清除数据启动 desiredCapabilities.setCapability("noReset", "True"); desiredCapabilities.setCapability("recreateChromeDriverSessions","True"); //自动化引擎(解决输入框不能输入的问题) desiredCapabilities.setCapability("automationName", "uiautomator2"); // 支持X5内核应用自动化配置 desiredCapabilities.setCapability("recreateChromeDriverSessions", true); ChromeOptions options = new ChromeOptions(); options.setExperimentalOption("androidProcess", "com.tencent.mm:tools"); desiredCapabilities.setCapability(ChromeOptions.CAPABILITY, options); desiredCapabilities.setCapability("browserName",""); //创建驱动 androidDriver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), desiredCapabilities); //元素超时等待 androidDriver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS); weChat(); //关闭驱动 androidDriver.quit(); } public static void weChat() throws Exception { Thread.sleep(5000); androidDriver.findElementById("com.tencent.mm:id/r_").click(); androidDriver.findElementById("com.tencent.mm:id/m7").sendKeys("接口测试号"); androidDriver.findElementById("com.tencent.mm:id/s7").click(); androidDriver.findElementByAndroidUIAutomator("new UiSelector().text(\"贷款\")").click(); androidDriver.findElementByAndroidUIAutomator("new UiSelector().text(\"卢贝尔TEST\")").click(); Thread.sleep(15000); Set<String> context = androidDriver.getContextHandles(); for(String contextname : context){ System.out.println(contextname);//打印 if(contextname.equals("WEBVIEW_com.tencent.mm:tools")) androidDriver.context(contextname); } System.out.println(androidDriver.findElementsByXPath("//*").toString()); System.out.println("进来了。。。。。。"); androidDriver.findElementByXPath("//*[@id=\"app\"]/div/div[2]/div[1]/img").click(); androidDriver.findElementByXPath("//*[@id=\"app\"]/div/div[1]/div[2]/div[1]/input").sendKeys("13983871447"); androidDriver.findElementByXPath("//*[@id=\"app\"]/div/div[1]/div[2]/div[2]/div").sendKeys("qwe000111"); androidDriver.findElementByXPath("//*[@id=\"app\"]/div/div[1]/div[3]/input").click(); Thread.sleep(25000); } ##appium详细信息 ###这里可以看到pid是被找到了的 ``` [2020-01-20 04:08:12][AndroidDriver] Parsed pid: '21104' pkg: 'com.tencent.mm:tools' from [2020-01-20 04:08:12][AndroidDriver] USER PID PPID VSIZE RSS FRZ WCHAN PC NAME [2020-01-20 04:08:12][AndroidDriver] u0_a297 21104 997 3907284 381152 efg 0 0000000000 S com.tencent.mm:tools [2020-01-20 04:08:12][AndroidDriver] Returning process name: 'com.tencent.mm:tools' [2020-01-20 04:08:12][AndroidDriver] Parsed pid: '20267' pkg: 'com.tencent.mm' from [2020-01-20 04:08:12][AndroidDriver] USER PID PPID VSIZE RSS FRZ WCHAN PC NAME [2020-01-20 04:08:12][AndroidDriver] u0_a297 20267 997 3487468 300536 efg 0 0000000000 S com.tencent.mm [2020-01-20 04:08:12][AndroidDriver] Returning process name: 'com.tencent.mm' [2020-01-20 04:08:12][AndroidDriver] Parsed pid: '20643' pkg: 'com.tencent.mm:appbrand0' from [2020-01-20 04:08:12][AndroidDriver] USER PID PPID VSIZE RSS FRZ WCHAN PC NAME [2020-01-20 04:08:12][AndroidDriver] u0_a297 20643 997 3474560 255204 unk 0 0000000000 S com.tencent.mm:appbrand0 [2020-01-20 04:08:12][AndroidDriver] Returning process name: 'com.tencent.mm:appbrand0' [2020-01-20 04:08:12][AndroidDriver] Parsed pid: '21040' pkg: 'com.tencent.mm:toolsmp' from [2020-01-20 04:08:12][AndroidDriver] USER PID PPID VSIZE RSS FRZ WCHAN PC NAME [2020-01-20 04:08:12][AndroidDriver] u0_a297 21040 997 3227048 264568 unk 0 0000000000 S com.tencent.mm:toolsmp [2020-01-20 04:08:12][AndroidDriver] Returning process name: 'com.tencent.mm:toolsmp' [2020-01-20 04:08:12][AndroidDriver] Found webviews: ["WEBVIEW_com.tencent.mm:tools","WEBVIEW_com.tencent.mm:appbrand0","WEBVIEW_com.tencent.mm","WEBVIEW_com.tencent.mm:toolsmp"] [2020-01-20 04:08:12][AndroidDriver] Available contexts: ``` ##appium报错信息 ``` [2020-01-20 04:08:12][Chromedriver] Starting MJSONWP Chromedriver session with capabilities: { [2020-01-20 04:08:12][Chromedriver] "desiredCapabilities": { [2020-01-20 04:08:12][Chromedriver] "chromeOptions": { [2020-01-20 04:08:12][Chromedriver] "androidPackage": "com.tencent.mm", [2020-01-20 04:08:12][Chromedriver] "androidUseRunningApp": true, [2020-01-20 04:08:12][Chromedriver] "androidProcess": "com.tencent.mm:tools", [2020-01-20 04:08:12][Chromedriver] "args": [], [2020-01-20 04:08:12][Chromedriver] "extensions": [], [2020-01-20 04:08:12][Chromedriver] "androidDeviceSerial": "8905da57" [2020-01-20 04:08:12][Chromedriver] }, [2020-01-20 04:08:12][Chromedriver] "loggingPrefs": { [2020-01-20 04:08:12][Chromedriver] "browser": "ALL" [2020-01-20 04:08:12][Chromedriver] } [2020-01-20 04:08:12][Chromedriver] } [2020-01-20 04:08:12][Chromedriver] } [2020-01-20 04:08:12][WD Proxy] Matched '/session' to command name 'createSession' [2020-01-20 04:08:12][WD Proxy] Proxying [POST /session] to [POST http://127.0.0.1:8000/wd/hub/session] with body: {"desiredCapabilities":{"chromeOptions":{"androidPackage":"com.tencent.mm","androidUseRunningApp":true,"androidProcess":"com.tencent.mm:tools","args":[],"extensions":[],"androidDeviceSerial":"8905da57"},"loggingPrefs":{"browser":"ALL"}}} [2020-01-20 04:08:14][WD Proxy] Got response with status 200: {"sessionId":"db8120c4243d3b2e3714bb62b5357a5b","status":13,"value":{"message":"unknown error: Failed to get PID for the following process: com.tencent.mm:tools\n (Driver info: chromedriver=2.40.565498 (ea082db3280dd6843ebfb08a625e3eb905c4f5ab),platform=Windows NT 6.1.7601 SP1 x86_64)"}} [2020-01-20 04:08:14][WD Proxy] Determined the downstream protocol as 'MJSONWP' [2020-01-20 04:08:14][WD Proxy] The response has an unknown format [2020-01-20 04:08:14][MJSONWP] Matched JSONWP error code 13 to UnknownError [2020-01-20 04:08:14][Chromedriver] Failed to start Chromedriver session: An unknown server-side error occurred while processing the command. Original error: unknown error: Failed to get PID for the following process: com.tencent.mm:tools [2020-01-20 04:08:14][Chromedriver] (Driver info: chromedriver=2.40.565498 (ea082db3280dd6843ebfb08a625e3eb905c4f5ab),platform=Windows NT 6.1.7601 SP1 x86_64) [2020-01-20 04:08:14][WD Proxy] Matched '/session' to command name 'createSession' [2020-01-20 04:08:14][WD Proxy] Proxying [POST /session] to [POST http://127.0.0.1:8000/wd/hub/session] with body: {"desiredCapabilities":{"chromeOptions":{"androidPackage":"com.tencent.mm","androidUseRunningApp":true,"androidProcess":"com.tencent.mm:tools","args":[],"extensions":[],"androidDeviceSerial":"8905da57"},"loggingPrefs":{"browser":"ALL"}}} [2020-01-20 04:08:15][WD Proxy] Got response with status 200: {"sessionId":"41893d46f51c7c60c153a16cd7cfe42f","status":13,"value":{"message":"unknown error: Failed to get PID for the following process: com.tencent.mm:tools\n (Driver info: chromedriver=2.40.565498 (ea082db3280dd6843ebfb08a625e3eb905c4f5ab),platform=Windows NT 6.1.7601 SP1 x86_64)"}} [2020-01-20 04:08:15][WD Proxy] Determined the downstream protocol as 'MJSONWP' [2020-01-20 04:08:15][WD Proxy] The response has an unknown format [2020-01-20 04:08:15][MJSONWP] Matched JSONWP error code 13 to UnknownError [2020-01-20 04:08:15][Chromedriver] Failed to start Chromedriver session: An unknown server-side error occurred while processing the command. Original error: unknown error: Failed to get PID for the following process: com.tencent.mm:tools ```
如何控制一个内核驱动,待SD卡或内部存储设备加载完毕后再运行?
在做一个Android内核驱动程序,主要功能是读取一个存储在SD卡或内部存储比如NAND中的一个文本文件,然后解析该文件来设置一些参数。 先编译成模块,用insmod加载,rmmod来卸载,经过调试一切功能都搞定了。然后,把模块编译进了内核,也能正常加载,但是文件打开失败,看了一下内核启动log,发现由于驱动运行时文件系统还没有加载SD卡和NAND,自然无法打开文件。所以很想知道,遇到这类情况如何解决?
Ubuntu 18.04系统进不去了,只有老内核的恢复模式还能进,请大家帮看一下
Ubuntu 18.04 新内核和恢复模式进不去,会报错。老内核也进不去,只有老内核的恢复模式能进,请大佬帮看一下~~ 这边上传不了图片,问题详见 https://mp.csdn.net/postedit/103317233 virtualbox里安装的是Ubuntu 18.04.1 LTS ,打开idea程序没响应,强制关闭。然后系统就进不去了,报错 end kernel panic - not syncing: VFS: unable to mount root fs on unknown-block(0,0) 然后上网找解决方案,发现更新grub也解决不了 grub四个选项: ubuntu linux 4.15.0-70-generic ubuntu linux 4.15.0-70-generic(recovery mode) ubuntu linux 4.15.0-43-generic ubuntu linux 4.15.0-43-generic(recovery mode) 目前前两个选项(ubuntu linux 4.15.0-70-generic 和 ubuntu linux 4.15.0-70-generic(recovery mode),新内核和新内核的恢复模式)都报错。end kernel panic - not syncing: VFS: unable to mount root fs on unknown-block(0,0) 第3个选项(ubuntu linux 4.15.0-43-generic,老内核),界面显示ubuntu,但进不去 第4个选项(ubuntu linux 4.15.0-43-generic(recovery mode),老内核的恢复模式),输入好几次密码才能登进去 1. ubuntu linux 4.15.0-70-generic ubuntu linux 4.15.0-70-generic(recovery mode) 这两个选项,新内核和新内核的恢复模式都报错。end kernel panic - not syncing: VFS: unable to mount root fs on unknown-block(0,0) 2. 第3个选项(ubuntu linux 4.15.0-43-generic,老内核),界面显示ubuntu,但进不去 3. 第4个选项(ubuntu linux 4.15.0-43-generic(recovery mode),老内核的恢复模式),输入好几次密码才能登进去。 下面是du -h的回显 4. 之前显示过“GRUB 引导器先前安装到了一个消失了的磁盘上”,没有处理 ┌───────────────────────────┤ 正在设定 grub-pc ├────────────────────────────┐ │ GRUB 引导器先前安装到了一个消失了的磁盘上,或者它的唯一标识符由于某些原 │ │ 因变化了。确保安装的 GRUB 核心映像和 GRUB 模块及 grub.cfg 的同步非常重要 │ │ 。请再次检查以确保 GRUB 安装到了适当的引导设备。 │ │ │ │ 如果不确定 BIOS 使用哪个驱动器作为主引导,将 GRUB 安装到所有这些驱动器是 │ │ 一个不错的主意。 │ │ │ │ 注意:也可以将 GRUB 安装到分区的引导记录,这里提供了一些适当的分区。然而 │ │ ,这强制 GRUB 使用黑名单机制,会造成可靠性降低,因此不推荐使用。 │ │ │ │ GRUB 安装设备: │ │ │ │ [ ] /dev/sda (53687 MB; VBOX_HARDDISK) │ │ [ ] - /dev/sda1 (53684 MB; /) │ │ │ │ │ │ <确定> │ │ 使用了如下方法都没有生效 1. (1)开机以后不要直接进入ubuntu 的开机选项,选择高级模式, (2)然后选择recovery mode, (3)选择resume resume normal boot (4)进入系统后,打开终端,输入 sudo apt-get autoremove --purge 运行结束后,更新grub sudo update-grub 2. 运行下面的命令更新grub2: sudo update-grub2 sudo reboot
Linux内核LCD驱动某些寄存器值无法修改
为了熟悉总线驱动,便自己写内核LCD驱动,板子是4412的开发板,make menuconfig里面裁剪LCD驱动后会报很多错误所以在drivers/video下面注释掉LCD相关的驱动。注释过后重新编译kernel。dev下面已经没有fb了。 现在只是测试内核LCD显示,寄存器配置用的跟裸板一样的配置步骤,裸板上面已经测试过了,能够正常显示图片。证明寄存器的,所以寄存器配置步骤应该是没有问题的。 现在出现的问题就是,按照裸板上的配置步骤,让开发板在Linux内核模块程序中配置寄存器,insmod能够成功添加模块,但printk打印来看,某些寄存器(LCD寄存器)能够修改,某些寄存器不能修改,修改的方法是一样的。所以应该不是修改方法的问题。我看了一下/proc/iomem文件,不能修改的那段寄存器地址已经被注册了,不知道是不是这个原因导致我无法修改。 搞了几天了,个人无法解决,跪求方法 Orz
新手,请教WINDOWS内核的一个问题。
新手,请问WINDOWS内核里的进程线程管理器组件,内存管理器组件,I/O管理器组件,等等这些组件都是一个个独立的模块吗? 如果是,这些模块不都是在一个程序ntoskrnl.exe里的吗?没有办法并行运行啊?在一个程序里这些模块只能依次顺序执行啊?可是按道理这些模块应该同时运行啊?难道这些模块是形成了线程并行运行的吗?请专家给解释一下,谢谢了!!
i2c设备和设备地址是好的,但是为什么读写数据发送完设备地址后没有ack回复?
最近在君正的x1000平台,linux kernel调试ov7725摄像头驱动,驱动是写好的,编译到内核镜像,在驱动中通过i2c对sensor初始化是可以正常读写寄存器数据的,抓到的正确波形如下 ![图片说明](https://img-ask.csdn.net/upload/201912/30/1577690158_940306.jpg) 可是我在应用层通过ioctl的O_RDWR访问i2c总线的方式读写寄存器就会报中断错误,抓到的波形如下 ![图片说明](https://img-ask.csdn.net/upload/201912/30/1577690347_708074.jpg) 应用层代码如下 ![图片说明](https://img-ask.csdn.net/upload/201912/30/1577690608_205675.png)
相见恨晚的超实用网站
相见恨晚的超实用网站 持续更新中。。。
字节跳动视频编解码面经
三四月份投了字节跳动的实习(图形图像岗位),然后hr打电话过来问了一下会不会opengl,c++,shador,当时只会一点c++,其他两个都不会,也就直接被拒了。 七月初内推了字节跳动的提前批,因为内推没有具体的岗位,hr又打电话问要不要考虑一下图形图像岗,我说实习投过这个岗位不合适,不会opengl和shador,然后hr就说秋招更看重基础。我当时想着能进去就不错了,管他哪个岗呢,就同意了面试...
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
python学习方法总结(内附python全套学习资料)
不要再问我python好不好学了 我之前做过半年少儿编程老师,一个小学四年级的小孩子都能在我的教学下独立完成python游戏,植物大战僵尸简单版,如果要肯花时间,接下来的网络开发也不是问题,人工智能也可以学个调包也没啥问题。。。。。所以python真的是想学就一定能学会的!!!! --------------------华丽的分割线-------------------------------- ...
python 简易微信实现(注册登录+数据库存储+聊天+GUI+文件传输)
socket+tkinter详解+简易微信实现 历经多天的努力,查阅了许多大佬的博客后终于实现了一个简易的微信O(∩_∩)O~~ 简易数据库的实现 使用pands+CSV实现数据库框架搭建 import socket import threading from pandas import * import pymysql import csv # 创建DataFrame对象 # 存储用户数据的表(...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 cpp 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7 p...
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小型人工智障。 知识可以运用在不同地方,不一定非是天气预报。
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
Python实例大全(基于Python3.7.4)
博客说明: 这是自己写的有关python语言的一篇综合博客。 只作为知识广度和编程技巧学习,不过于追究学习深度,点到即止、会用即可。 主要是基础语句,如三大控制语句(顺序、分支、循环),随机数的生成,数据类型的区分和使用; 也会涉及常用的算法和数据结构,以及面试题相关经验; 主体部分是针对python的数据挖掘和数据分析,主要先攻爬虫方向:正则表达式匹配,常用数据清洗办法,scrapy及其他爬虫框架,数据存储方式及其实现; 最后还会粗略涉及人工智能领域,玩转大数据与云计算、进行相关的预测和分析。
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
刷了几千道算法题,这些我私藏的刷题网站都在这里了!
遥想当年,机缘巧合入了 ACM 的坑,周边巨擘林立,从此过上了"天天被虐似死狗"的生活… 然而我是谁,我可是死狗中的战斗鸡,智力不够那刷题来凑,开始了夜以继日哼哧哼哧刷题的日子,从此"读题与提交齐飞, AC 与 WA 一色 ",我惊喜的发现被题虐既刺激又有快感,那一刻我泪流满面。这么好的事儿作为一个正直的人绝不能自己独享,经过激烈的颅内斗争,我决定把我私藏的十几个 T 的,阿不,十几个刷题网...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
JavaScript 为什么能活到现在?
作者 | 司徒正美 责编 |郭芮 出品 | CSDN(ID:CSDNnews) JavaScript能发展到现在的程度已经经历不少的坎坷,早产带来的某些缺陷是永久性的,因此浏览器才有禁用JavaScript的选项。甚至在jQuery时代有人问出这样的问题,jQuery与JavaScript哪个快?在Babel.js出来之前,发明一门全新的语言代码代替JavaScript...
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
Nginx 原理和架构
Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
Python 编程开发 实用经验和技巧
Python是一门很灵活的语言,也有很多实用的方法,有时候实现一个功能可以用多种方法实现,我这里总结了一些常用的方法和技巧,包括小数保留指定位小数、判断变量的数据类型、类方法@classmethod、制表符中文对齐、遍历字典、datetime.timedelta的使用等,会持续更新......
吐血推荐珍藏的Visual Studio Code插件
作为一名Java工程师,由于工作需要,最近一个月一直在写NodeJS,这种经历可以说是一部辛酸史了。好在有神器Visual Studio Code陪伴,让我的这段经历没有更加困难。眼看这段经历要告一段落了,今天就来给大家分享一下我常用的一些VSC的插件。 VSC的插件安装方法很简单,只需要点击左侧最下方的插件栏选项,然后就可以搜索你想要的插件了。 下面我们进入正题 Material Theme ...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
相关热词 c#中dns类 c#合并的excel c# implicit c#怎么保留3个小数点 c# 串口通信、 网络调试助手c# c# 泛型比较大小 c#解压分卷问题 c#启动居中 c# 逻辑或运算符
立即提问