多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁(yè) > php開源 > php教程 > VELT-0.1.5開發(fā):使用kgdb調(diào)試Linux內(nèi)核

VELT-0.1.5開發(fā):使用kgdb調(diào)試Linux內(nèi)核

來(lái)源:程序員人生   發(fā)布時(shí)間:2015-03-16 10:25:09 閱讀次數(shù):4985次

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

  1. 支持x86 Linux,海思hi3516/hi3520MinGW這幾個(gè)平臺(tái),提供這幾個(gè)平臺(tái)的項(xiàng)目模板。

  2. 完成UBOOT的編譯,并根據(jù)編譯的毛病信息自動(dòng)定位到相應(yīng)的文件位置。

  3. 完成LINUX內(nèi)核的編譯,并根據(jù)編譯的毛病信息自動(dòng)定位到相應(yīng)的文件位置。

  4. VS下完成Linux內(nèi)核的配置。

  5. 不使用Makefile進(jìn)行Linux利用程序的編譯。

  6. 使用Makefile進(jìn)行Linux利用程序的開發(fā)。

  7. 使用SSH連接目標(biāo)機(jī)器并用gdb進(jìn)行利用程序的調(diào)試。

  8. 使用Telnet連接目標(biāo)機(jī)器并用gdb進(jìn)行利用程序的調(diào)試。

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


接下來(lái)嘗試通過(guò)串口調(diào)試Linux內(nèi)核。

hi3520的內(nèi)核為實(shí)驗(yàn)對(duì)象。


1.1  打開內(nèi)核的調(diào)試開關(guān)


首先打開內(nèi)核的調(diào)試開關(guān):


加上內(nèi)核的調(diào)試信息:


打開kgdb



1.2  引導(dǎo)參數(shù)配置


UBOOT下配置傳遞給內(nèi)核的參數(shù):

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兩個(gè)參數(shù),前1個(gè)參數(shù)指明要使用的串口參數(shù),后1個(gè)參數(shù)讓kgdb在內(nèi)核啟動(dòng)的時(shí)候進(jìn)行等待。

加載內(nèi)核:

kgdb: Registered I/O driver kgdboc.

kgdb: Waiting for connection from remote gdb...

然后系統(tǒng)開始等待。



1.3  MinGW gdb連接內(nèi)核


直接用MinGW gdb打開編譯內(nèi)核時(shí)生成的vmlinux文件,

然后用

target remote COM1

連接串口,很遺憾,超時(shí)!

 


1.3  修改內(nèi)核代碼


檢查了1下內(nèi)核的代碼,在等待連接時(shí)內(nèi)核停在了下面的位置:

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; }

它將不停地查詢串口上是不是有數(shù)據(jù),剛開始時(shí)懷疑是串口參數(shù)配置不正確致使讀取不到數(shù)據(jù),但跟蹤進(jìn)去后發(fā)現(xiàn)這里的read_char可以正確地調(diào)用串口驅(qū)動(dòng)(amba-pl011.c)中的查詢函數(shù):

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); }

只不過(guò)在讀取UART01x_FR寄存器時(shí)總是返回?zé)o數(shù)據(jù)的結(jié)果。

進(jìn)1步的檢查發(fā)現(xiàn)這個(gè)時(shí)候串口的接收使能是關(guān)閉的,而發(fā)送使能則是打開的!因此串口固然只能發(fā)送數(shù)據(jù)不能接收了!

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

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);

原來(lái)的代碼是這樣的:

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

直接給上加上使能標(biāo)記!


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

 


1.5  kdb


HI3520的內(nèi)核中已帶了kdb的支持:



當(dāng)選上最下面的那個(gè)選項(xiàng)時(shí)將啟用kdb,這樣我們就能夠在目標(biāo)機(jī)器上履行1些簡(jiǎn)單的調(diào)試命令了,也不需要依賴于主機(jī)上的gdb

但由于我們希望通過(guò)gdb結(jié)合源碼進(jìn)行調(diào)試,因此不選擇kdb,僅僅用kgdb










??
生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 精品国产日韩一区三区 | 在线观看视频一区二区 | 欧美一级h | 亚洲欧美另类在线视频 | 日本高清69| 在线天堂中文字幕 | 久久精品中文字幕不卡一二区 | 波多野结衣中文字幕在线视频 | 中文字幕播放 | 欧美日韩一区二区三区视频播 | 国产精品永久免费视频观看 | 国产一区二区精品久久91 | 国产呦精品一区二区三区网站 | 精品欧美一区二区三区四区 | 亚洲天堂在线视频观看 | 久久性生活 | 中文字幕在线永久在线视频2020 | 久久精品免费全国观看国产 | 精品中文字幕不卡在线视频 | 欧美一区二区三区日韩免费播 | 亚洲成人高清在线观看 | 最近中文字幕免费mv视频 | 日本wwxx护士 | 黄色网址在线看 | 欧美成人毛片一级在线 | 国产免费一区二区三区免费视频 | yellow字幕网在线91zmw | 国产亚洲精品久久久久久午夜 | 亚洲精品高清在线 | 欧美做受 | 91人人| 亚洲欧洲国产精品久久 | 视频一区二区三区欧美日韩 | 日本天堂视频在线观看 | 色网站欧美 | 亚洲一区二区三区在线网站 | 亚洲精品永久www忘忧草 | 国产人成精品免费视频 | 精品国产成人三级在线观看 | 999毛片免费| 精品国产亚洲一区二区在线3d |