日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > VELT-0.1.5開發:使用kgdb調試Linux內核

VELT-0.1.5開發:使用kgdb調試Linux內核

來源:程序員人生   發布時間:2015-03-16 10:25:09 閱讀次數:5003次

VELT的全稱是Visual EmbedLinuxTools,它是1個與visual gdb類似的visual studio插件,用以輔助完成Linux開發。利用這個插件,將可以在visual studioIDE中進行Linux利用程序的開發(包括編譯和調試),也能夠進行ubootlinux內核的編譯,并根據編譯時的毛病信息正肯定位到源碼。目前的版本是0.1.4,僅支持vs2013。此插件可以在CSDN下載頻道下載(http://download.csdn.net/detail/lights_joy/8429771),安裝進程參見《vs2013+velt-0.1.4進行嵌入式開發:插件安裝》。下面是它的基本功能:

  1. 支持x86 Linux,海思hi3516/hi3520MinGW這幾個平臺,提供這幾個平臺的項目模板。

  2. 完成UBOOT的編譯,并根據編譯的毛病信息自動定位到相應的文件位置。

  3. 完成LINUX內核的編譯,并根據編譯的毛病信息自動定位到相應的文件位置。

  4. VS下完成Linux內核的配置。

  5. 不使用Makefile進行Linux利用程序的編譯。

  6. 使用Makefile進行Linux利用程序的開發。

  7. 使用SSH連接目標機器并用gdb進行利用程序的調試。

  8. 使用Telnet連接目標機器并用gdb進行利用程序的調試。

  9. VS中集成Linux終端(Poderosa),支持SSH/Telnet/Com,在打開終端時自動將VS的變量導出為bash里的變量,如ProjectDir等。


接下來嘗試通過串口調試Linux內核。

hi3520的內核為實驗對象。


1.1  打開內核的調試開關


首先打開內核的調試開關:


加上內核的調試信息:


打開kgdb



1.2  引導參數配置


UBOOT下配置傳遞給內核的參數:

Kernel command line: mem=127m console=ttyAMA0,115200ip=192.168.110.10:::255.255.255.0::eth0: root=mtd:work02 init=/sbin/initmtdparts=hi_sfc:256K(uboot01),64K(env01),64K(sysinfo01),3712k(configs01),8M(boot01),20M(work01),256K(uboot02),64K(env02),64K(sysinfo02),3712k(configs02),8M(boot02),20M(work02)kgdboc=ttyAMA0,115200 kgdbwait

這里最重要的是kgdbockgdbwait兩個參數,前1個參數指明要使用的串口參數,后1個參數讓kgdb在內核啟動的時候進行等待。

加載內核:

kgdb: Registered I/O driver kgdboc.

kgdb: Waiting for connection from remote gdb...

然后系統開始等待。



1.3  MinGW gdb連接內核


直接用MinGW gdb打開編譯內核時生成的vmlinux文件,

然后用

target remote COM1

連接串口,很遺憾,超時!

 


1.3  修改內核代碼


檢查了1下內核的代碼,在等待連接時內核停在了下面的位置:

static int gdbstub_read_wait(void) { int ret = dbg_io_ops->read_char(); while (ret == NO_POLL_CHAR) ret = dbg_io_ops->read_char(); return ret; }

它將不停地查詢串口上是不是有數據,剛開始時懷疑是串口參數配置不正確致使讀取不到數據,但跟蹤進去后發現這里的read_char可以正確地調用串口驅動(amba-pl011.c)中的查詢函數:

static int pl010_get_poll_char(struct uart_port *port) { struct uart_amba_port *uap = (struct uart_amba_port *)port; unsigned int status, ena_status; status = readw(uap->port.membase + UART01x_FR); ena_status = readw(uap->port.membase + UART011_CR); if (status & UART01x_FR_RXFE) return NO_POLL_CHAR; return readw(uap->port.membase + UART01x_DR); }

只不過在讀取UART01x_FR寄存器時總是返回無數據的結果。

進1步的檢查發現這個時候串口的接收使能是關閉的,而發送使能則是打開的!因此串口固然只能發送數據不能接收了!

不太想追究為何會這樣,直接在shutdown函數中打開接收使能:

static void pl011_shutdown(struct uart_port *port) { struct uart_amba_port *uap = (struct uart_amba_port *)port; /* * disable all interrupts */ spin_lock_irq(&uap->port.lock); uap->im = 0; writew(uap->im, uap->port.membase + UART011_IMSC); writew(0xffff, uap->port.membase + UART011_ICR); spin_unlock_irq(&uap->port.lock); pl011_dma_shutdown(uap); /* * Free the interrupt */ free_irq(uap->port.irq, uap); /* * disable the port */ uap->autorts = false; writew(UART01x_CR_UARTEN | UART011_CR_TXE | UART011_CR_RXE, uap->port.membase + UART011_CR); /* * disable break condition and fifos */ pl011_shutdown_channel(uap, uap->lcrh_rx); if (uap->lcrh_rx != uap->lcrh_tx) pl011_shutdown_channel(uap, uap->lcrh_tx); /* * Shut down the clock producer */ clk_disable(uap->clk); if (uap->port.dev->platform_data) { struct amba_pl011_data *plat; plat = uap->port.dev->platform_data; if (plat->exit) plat->exit(); } }

修改了這1行:

writew(UART01x_CR_UARTEN | UART011_CR_TXE | UART011_CR_RXE, uap->port.membase + UART011_CR);

原來的代碼是這樣的:

writew(UART01x_CR_UARTEN | UART011_CR_TXE, uap->port.membase + UART011_CR);

直接給上加上使能標記!


再履行gdbtarget remote COM1命令,可以正常連接了!!

 


1.5  kdb


HI3520的內核中已帶了kdb的支持:



當選上最下面的那個選項時將啟用kdb,這樣我們就能夠在目標機器上履行1些簡單的調試命令了,也不需要依賴于主機上的gdb

但由于我們希望通過gdb結合源碼進行調試,因此不選擇kdb,僅僅用kgdb










??
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 日韩二区 | 欧美aaaa视频 | avav在线看 | 高清不卡一区二区三区 | 久久成人免费视频 | 精品国产99久久久久久宅男i | 亚洲精品久久久久中文字幕欢迎你 | 一级激情视频 | 免费不卡视频 | 欧美视频在线一区 | 欧美日韩精品一区二区三区蜜桃 | 国产精品视频一区二区三区 | 国产伦精品一区二区三区精品视频 | 91久久精品一区二区 | 中国av免费在线观看 | 亚洲国产网站 | 99日韩| 亚洲国产aⅴ成人精品无吗 天天草比 | 免费v片在线观看 | 欧美xxxhd | 亚洲成人免费电影 | 夜夜福利| 毛片真人毛毛片毛片 | 在线免费福利 | 亚洲午夜久久久久久久久久久 | 国产精品一区免费视频 | 成人亚洲免费 | 99久视频 | 在线视频区 | 日韩中文一区二区三区 | 国产一区二区三区在线观看视频 | 成人精品一区二区三区中文字幕 | 中文字幕日韩欧美一区二区三区 | 麻豆精品 | a在线免费 | 欧美日韩成人在线观看 | 日本成人三级 | 中文字幕亚洲国产 | 中文字幕亚洲综合久久 | 91精品网站 | 国产老女人精品毛片久久 |