• 正文
    • 一、通過修改ipconfig.txt
    • 二、通過開源項目ifplugd
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

瑞芯微 | 如何固定以太口地址為指定ip?

02/17 15:30
282
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論
rxw的RK3568的evb1公板,有2個以太口,默認(rèn)UI界面只能配置eth0,無法配置eth1,實際應(yīng)用中,有時需要一旦有網(wǎng)線插入,就需要該地址設(shè)置為指定IP地址。

本文介紹2個最簡單的方法實現(xiàn)固定IP。

一、通過修改ipconfig.txt

安卓設(shè)備以太口的配置信息保存在以下文件中:

/data/misc/ethernet/ipconfig.txt

該文件是二進(jìn)制文件,而且默認(rèn)只有eth0的配置信息,一口君通過一些特殊方法,生成了包含eth0、eth1的兩個網(wǎng)口配置的配置文件,

并且rxw原廠的ui界面可以識別該配置文件。

配置文件用16進(jìn)制格式打開內(nèi)容如下:

00000000?00?00?00?03?00?0C?69?70?41?73?73?69?67?6E?6D?65?......ipAssignme
00000010?6E?74?00?06?53?54?41?54?49?43?00?0B?6C?69?6E?6B?nt..STATIC..link
00000020?41?64?64?72?65?73?73?00?0D?31?39?32?2E?31?36?38?Address..192.168
00000030?2E?34?30?2E?33?34?00?00?00?18?00?07?67?61?74?65?.40.34......gate
00000040?77?61?79?00?00?00?00?00?00?00?01?00?0C?31?39?32?way..........192
00000050?2E?31?36?38?2E?34?30?2E?31?00?03?64?6E?73?00?07?.168.40.1..dns..
00000060?30?2E?30?2E?30?2E?30?00?03?64?6E?73?00?07?30?2E?0.0.0.0..dns..0.
00000070?30?2E?30?2E?30?00?0D?70?72?6F?78?79?53?65?74?74?0.0.0..proxySett
00000080?69?6E?67?73?00?04?4E?4F?4E?45?00?02?69?64?00?04?ings..NONE..id..
00000090?65?74?68?30?00?03?65?6F?73?00?0C?69?70?41?73?73?eth0..eos..ipAss
000000A0?69?67?6E?6D?65?6E?74?00?06?53?54?41?54?49?43?00?ignment..STATIC.
000000B0?0B?6C?69?6E?6B?41?64?64?72?65?73?73?00?0D?31?39?.linkAddress..19
000000C0?32?2E?31?36?38?2E?32?2E?31?32?35?00?00?00?18?00?2.168.2.125.....
000000D0?07?67?61?74?65?77?61?79?00?00?00?00?00?00?00?01?.gateway........
000000E0?00?0B?31?39?32?2E?31?36?38?2E?32?2E?31?00?03?64?..192.168.2.1..d
000000F0?6E?73?00?07?30?2E?30?2E?30?2E?30?00?03?64?6E?73?ns..0.0.0.0..dns
00000100?00?07?30?2E?30?2E?30?2E?30?00?0D?70?72?6F?78?79?..0.0.0.0..proxy
00000110?53?65?74?74?69?6E?67?73?00?04?4E?4F?4E?45?00?02?Settings..NONE..
00000120?69?64?00?04?65?74?68?31?00?03?65?6F?73?--?--?--?id..eth1..eos

用 ascii格式打開如下【因為是二進(jìn)制文件,會有部分內(nèi)容是亂碼】:

?????ipAssignment?STATIC??linkAddress?
192.168.40.34????gateway?????????192.168.40.1?dns?0.0.0.0?dns?0.0.0.0?
proxySettings?NONE?id?eth0?eos??ipAssignment?STATIC??linkAddress?
192.168.2.125????gateway?????????192.168.2.1?dns?0.0.0.0?dns?0.0.0.0?
proxySettings?NONE?id?eth1?eos

總結(jié)一下,主要配置信息如下:

|?網(wǎng)口?|????????ip????????|??????網(wǎng)關(guān)??????|
|-----------------------------------------|
|?eth0?|??192.168.40.34???|??192.168.40.1?|
|?eth1?|??192.168.2.125???|??192.168.2.1??|

將該文件push進(jìn)開發(fā)板,重啟即可

adb?root
adb?remount
adb?pull?/data/misc/ethernet/ipconfig.txt

這樣只要eth1對應(yīng)的以太口up,就會自動設(shè)置ip地址192.168.2.125

同時并不影響UI配置eth0接口

注意:這種方法僅在rxw3568+android11上測試通過,其他平臺或者android版本沒有測試。

二、通過開源項目ifplugd

除了第一種種方法還可以通過一個開源的項目ifplugd來實現(xiàn)。

通過ifplugd工具監(jiān)聽網(wǎng)口熱插拔信息,然后執(zhí)行指定腳本,將配置命令存放在腳本中即可。

ifplugd的移植需要用到libdaemon庫,該庫主要提供守護(hù)進(jìn)程以及l(fā)og接口功能。

1. 移植步驟

1)準(zhǔn)備文件:
libdaemon-0.14.tar.gz
ifplugd-0.14.tar.gz

后臺回復(fù):eth,既可以獲取

沒有采用最新的libdaemon、ifplugd,會有版本兼容問題

本實例基于ndk編譯器編譯,

為了方便起見,我把libdaemon、ifplugd源文件全部拷貝到ndk實例工程下,libdaemon的頭文件,拷貝了2次,

方便c文件包含。

.....src-ifplugd$?tree?./
./
├──?Application.mk
├──?daemon.h
├──?dexec.c
├──?dexec.h
├──?dfork.c
├──?dfork.h
├──?dlog.c
├──?dlog.h
├──?dnonblock.c
├──?dnonblock.h
├──?dpid.c
├──?dpid.h
├──?dsignal.c
├──?dsignal.h
├──?ethtool-kernel.h
├──?ethtool-local.h
├──?ifplugd.c
├──?ifstatus.c
├──?include
├──?interface.c
├──?interface.h
├──?libdaemon
│???├──?daemon.h
│???├──?dexec.h
│???├──?dfork.h
│???├──?dlog.h
│???├──?dnonblock.h
│???├──?dpid.h
│???└──?dsignal.h
├──?svn-revision.h
└──?YROS.mk

2?directories,?29?files

2)修改配置文件

編譯描述信息位于文件YROS.mk中,

【讀者根據(jù)自己工程,文件會有所不同】

YROS.mk修改如下:

LOCAL_PATH:=?$(call?my-dir)

include?$(CLEAR_VARS)
LOCAL_SRC_FILES:=?
?ifplugd.c??interface.cdexec.c?dfork.c?dlog.c?dnonblock.c??dpid.c?dsignal.c???
?

LOCAL_SHARED_LIBRARIES?:=?

LOCAL_MODULE_TAGS?:=?optional
LOCAL_CLANG?:=?true

LOCAL_MODULE:=?ethcheckd

include?$(BUILD_EXECUTABLE)
3)編譯
    編譯錯誤1
λ?build.bat?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
ndk-build.cmd???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
[armeabi-v7a]?Compile?thumb??:?ifplugd?<=?ifplugd.c?????????????????????????????????????????????????????????????????????????????????
src/ifplugd.c:66:13:?error:?use?of?undeclared?identifier?'SYSCONFDIR'???????????????????????????????????????????????????????????????
char?*run?=?SYSCONFDIR"/ifplugd/ifplugd.action";????????????????????????????????????????????????????????????????????????????????????
????????????^???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
src/ifplugd.c:66:23:?error:?expected?';'?after?top?level?declarator?????????????????????????????????????????????????????????????????
char?*run?=?SYSCONFDIR"/ifplugd/ifplugd.action";????????????????????????????????????????????????????????????????????????????????????
??????????????????????^?????????????????????????????????????????????????????????????????????????????????????????????????????????????
??????????????????????;?????????????????????????????????????????????????????????????????????????????????????????????????????????????
src/ifplugd.c:155:18:?warning:?multiple?unsequenced?modifications?to?'sigfd'?[-Wunsequenced]????????????????????????????????????????
????FD_SET(sigfd?=?daemon_signal_fd(),?&rfds);??????????????????????????????????????????????????????????????????????????????????????
?????????????????^??????????????????????????????????????????????????????????????????????????????????????????????????????????????????
H:/yros-ndk-windows/build//../sysroot/usr/includesys/select.h:75:50:?note:?expanded?from?macro?'FD_SET'????????????????????????????
#define?FD_SET(fd,?set)?(__FDS_BITS(set)[__FDELT(fd)]?|=?__FDMASK(fd))??????????????????????????????????????????????????????????????
?????????????????????????????????????????????????^????????????????~~????????????????????????????????????????????????????????????????
H:/yros-ndk-windows/build//../sysroot/usr/includesys/select.h:48:23:?note:?expanded?from?macro?'__FDELT'???????????????????????????
#define?__FDELT(fd)?((fd)?/?NFDBITS)????????????????????????????????????????????????????????????????????????????????????????????????
??????????????????????^?????????????????????????????????????????????????????????????????????????????????????????????????????????????
src/ifplugd.c:374:36:?error:?expected?')'???????????????????????????????????????????????????????????????????????????????????????????
????daemon_log(LOG_INFO,?"ifplugd?"VERSION"?successfully?initialized,?link?beat?%sdetected.",?status?==?IFSTATUS_UP???""?:?"not?");?
???????????????????????????????????^????????????????????????????????????????????????????????????????????????????????????????????????
src/ifplugd.c:374:15:?note:?to?match?this?'('???????????????????????????????????????????????????????????????????????????????????????
????daemon_log(LOG_INFO,?"ifplugd?"VERSION"?successfully?initialized,?link?beat?%sdetected.",?status?==?IFSTATUS_UP???""?:?"not?");?
??????????????^?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
src/ifplugd.c:388:18:?warning:?multiple?unsequenced?modifications?to?'sigfd'?[-Wunsequenced]????????????????????????????????????????
????FD_SET(sigfd?=?daemon_signal_fd(),?&rfds);??????????????????????????????????????????????????????????????????????????????????????
?????????????????^??????????????????????????????????????????????????????????????????????????????????????????????????????????????????
H:/yros-ndk-windows/build//../sysroot/usr/includesys/select.h:75:50:?note:?expanded?from?macro?'FD_SET'????????????????????????????
#define?FD_SET(fd,?set)?(__FDS_BITS(set)[__FDELT(fd)]?|=?__FDMASK(fd))??????????????????????????????????????????????????????????????
?????????????????????????????????????????????????^????????????????~~????????????????????????????????????????????????????????????????
H:/yros-ndk-windows/build//../sysroot/usr/includesys/select.h:48:23:?note:?expanded?from?macro?'__FDELT'???????????????????????????
#define?__FDELT(fd)?((fd)?/?NFDBITS)????????????????????????????????????????????????????????????????????????????????????????????????
??????????????????????^?????????????????????????????????????????????????????????????????????????????????????????????????????????????
src/ifplugd.c:704:26:?error:?expected?')'???????????????????????????????????????????????????????????????????????????????????????????
????????printf("ifplugd?"VERSION"?(SVN:?"SVN_REVISION")n");????????????????????????????????????????????????????????????????????????
?????????????????????????^??????????????????????????????????????????????????????????????????????????????????????????????????????????
src/ifplugd.c:704:15:?note:?to?match?this?'('???????????????????????????????????????????????????????????????????????????????????????
????????printf("ifplugd?"VERSION"?(SVN:?"SVN_REVISION")n");????????????????????????????????????????????????????????????????????????
??????????????^?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
2?warnings?and?4?errors?generated.??????????????????????????????????????????????????????????????????????????????????????????????????
make:?***?[obj/local/armeabi-v7a/objs/ifplugd/ifplugd.o]?Error?1????????????????????????????????????????????????????????????????????

修改文件ifplugd.c

59??#define?VARRUN?"/system"
63??#define?SYSCONFDIR?""
64??#define?VERSION?"yikoulinux"
    編譯錯誤2
λ?build.bat

ndk-build.cmd
[armeabi-v7a]?Compile?thumb??:?ifplugd?<=?dexec.c
[armeabi-v7a]?Compile?thumb??:?ifplugd?<=?dfork.c
[armeabi-v7a]?Compile?thumb??:?ifplugd?<=?dlog.c
[armeabi-v7a]?Compile?thumb??:?ifplugd?<=?dnonblock.c
[armeabi-v7a]?Compile?thumb??:?ifplugd?<=?dpid.c
src/dpid.c:63:43:?error:?use?of?undeclared?identifier?'LOCALSTATEDIR'
????snprintf(fn,?sizeof(fn),?"%s/%s.pid",?VARRUN,?daemon_pid_file_ident???daemon_pid_file_ident?:?"unknown");
??????????????????????????????????????????^
src/dpid.c:51:16:?note:?expanded?from?macro?'VARRUN'
#define?VARRUN?LOCALSTATEDIR?"/run"
???????????????^
1?error?generated.
make:?***?[obj/local/armeabi-v7a/objs/ifplugd/dpid.o]?Error?1

修改文件dpid.c

50?#define?LOCALSTATEDIR
4) 編譯成功

編譯成功log如下:

H:compileforandroid?????????????????????????????????????????????????????????????????????????????????????????????????????
λ?build.bat??????????????????????????????????????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
ndk-build.cmd????????????????????????????????????????????????????????????????????????????????????????????????????????????
[armeabi-v7a]?Compile?thumb??:?ifplugd?<=?ifplugd.c??????????????????????????????????????????????????????????????????????
src/ifplugd.c:148:53:?warning:?missing?sentinel?in?function?call?[-Wsentinel]????????????????????????????????????????????
????????execl(run,?run,?interface,?arg,?extra_arg,?0);???????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????^????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????,?NULL???????????????????????????????????????????????????????????????
H:/yros-ndk-windows/build//../sysroot/usr/includeunistd.h:105:5:?note:?function?has?been?explicitly?marked?sentinel?here
int?execl(const?char*?__path,?const?char*?__arg0,?...)?__attribute__((__sentinel__));????????????????????????????????????
????^????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
src/ifplugd.c:157:18:?warning:?multiple?unsequenced?modifications?to?'sigfd'?[-Wunsequenced]?????????????????????????????
????FD_SET(sigfd?=?daemon_signal_fd(),?&rfds);???????????????????????????????????????????????????????????????????????????
?????????????????^???????????????????????????????????????????????????????????????????????????????????????????????????????
H:/yros-ndk-windows/build//../sysroot/usr/includesys/select.h:75:50:?note:?expanded?from?macro?'FD_SET'?????????????????
#define?FD_SET(fd,?set)?(__FDS_BITS(set)[__FDELT(fd)]?|=?__FDMASK(fd))???????????????????????????????????????????????????
?????????????????????????????????????????????????^????????????????~~?????????????????????????????????????????????????????
H:/yros-ndk-windows/build//../sysroot/usr/includesys/select.h:48:23:?note:?expanded?from?macro?'__FDELT'????????????????
#define?__FDELT(fd)?((fd)?/?NFDBITS)?????????????????????????????????????????????????????????????????????????????????????
??????????????????????^??????????????????????????????????????????????????????????????????????????????????????????????????
src/ifplugd.c:390:18:?warning:?multiple?unsequenced?modifications?to?'sigfd'?[-Wunsequenced]?????????????????????????????
????FD_SET(sigfd?=?daemon_signal_fd(),?&rfds);???????????????????????????????????????????????????????????????????????????
?????????????????^???????????????????????????????????????????????????????????????????????????????????????????????????????
H:/yros-ndk-windows/build//../sysroot/usr/includesys/select.h:75:50:?note:?expanded?from?macro?'FD_SET'?????????????????
#define?FD_SET(fd,?set)?(__FDS_BITS(set)[__FDELT(fd)]?|=?__FDMASK(fd))???????????????????????????????????????????????????
?????????????????????????????????????????????????^????????????????~~?????????????????????????????????????????????????????
H:/yros-ndk-windows/build//../sysroot/usr/includesys/select.h:48:23:?note:?expanded?from?macro?'__FDELT'????????????????
#define?__FDELT(fd)?((fd)?/?NFDBITS)?????????????????????????????????????????????????????????????????????????????????????
??????????????????????^??????????????????????????????????????????????????????????????????????????????????????????????????
3?warnings?generated.????????????????????????????????????????????????????????????????????????????????????????????????????
[armeabi-v7a]?Compile?thumb??:?ifplugd?<=?interface.c????????????????????????????????????????????????????????????????????
[armeabi-v7a]?Compile?thumb??:?ifplugd?<=?dexec.c????????????????????????????????????????????????????????????????????????
[armeabi-v7a]?Compile?thumb??:?ifplugd?<=?dfork.c????????????????????????????????????????????????????????????????????????
[armeabi-v7a]?Compile?thumb??:?ifplugd?<=?dlog.c?????????????????????????????????????????????????????????????????????????
[armeabi-v7a]?Compile?thumb??:?ifplugd?<=?dnonblock.c????????????????????????????????????????????????????????????????????
[armeabi-v7a]?Compile?thumb??:?ifplugd?<=?dpid.c?????????????????????????????????????????????????????????????????????????
[armeabi-v7a]?Compile?thumb??:?ifplugd?<=?dsignal.c??????????????????????????????????????????????????????????????????????
[armeabi-v7a]?Executable?????:?ifplugd???????????????????????????????????????????????????????????????????????????????????
[armeabi-v7a]?Install????????:?ifplugd?=>?libs/armeabi-v7a/ifplugd???????????????????????????????????????????????????????

程序位置如下:

libsarmeabi-v7aifplugd

測試

1. 查看ifplugd參數(shù)
ifplugd?-h
rk3568_r:/?#?ifplugd?-h
ifplugd?[options]
???-a?--no-auto??????????????Do?not?enable?interface?automatically?(off)
???-n?--no-daemon????????????Do?not?daemonize?(for?debugging)?(off)
???-s?--no-syslog????????????Do?not?use?syslog,?use?stderr?instead?(for?debugging)?(off)
???-b?--no-beep??????????????Do?not?beep?(off)
???-f?--ignore-fail??????????Ignore?detection?failure,?retry?instead?(failure?is?treated?as?DOWN)?(off)
???-F?--ignore-fail-positive?Ignore?detection?failure,?retry?instead?(failure?is?treated?as?UP)?(off)
???-i?--iface=IFACE??????????Specify?ethernet?interface?(eth0)
???-r?--run=EXEC?????????????Specify?program?to?execute?(/ifplugd/ifplugd.action)
???-I?--ignore-retval????????Don't?exit?on?nonzero?return?value?of?program?executed?(off)
???-t?--poll-time=SECS???????Specify?poll?time?in?seconds?(1)
???-u?--delay-up=SECS????????Specify?delay?for?configuring?interface?(0)
???-d?--delay-down=SECS??????Specify?delay?for?deconfiguring?interface?(5)
???-m?--api-mode=MODE????????Force?API?mode?(mii,?priv,?ethtool,?wlan,?auto)?(auto)
???-q?--no-shutdown??????????Don't?run?script?on?daemon?quit?(off)
???-w?--wait-on-fork?????????Wait?until?daemon?fork?finished?(off)
???-x?--extra-arg????????????Specify?an?extra?argument?for?action?script
???-h?--help?????????????????Show?this?help
???-k?--kill?????????????????Kill?a?running?daemon
???-c?--check-running????????Check?if?a?daemon?is?currently?running
???-v?--version??????????????Show?version
???-S?--suspend??????????????Suspend?running?daemon
???-R?--resume???????????????Resume?running?daemon
???-z?--info?????????????????Write?status?of?running?daemon?to?syslog
2. 增加腳本if.sh

當(dāng)網(wǎng)口eth1 up后,ifplugd會執(zhí)行如下命令【下面動作由ifplugd自動執(zhí)行】:

/system/if.sh?eth1?up

根據(jù)參數(shù)順序,編寫腳本if.sh如下:

#!/bin/bash

IPADDR=192.168.40.8
ETHPORT=eth1
echo?"daniel?peng?set"?$ETHPORT?$IPADDR
echo?$#
echo?$0
echo?$1
echo?$2
if?[?$#?-eq?2?];then
?if?[?$1?=?$ETHPORT?];then?
?echo?$ETHPORT
?if?[?$2?=?"up"?];then
?ifconfig?$ETHPORT?$IPADDR
?sleep?1
?ip?rule?add?from?all?lookup?main?pref?9000?
?sleep?1
?echo?1?>?/proc/sys/net/ipv4/ip_forward?
?iptables?-F
?echo?"set"?$ETHPORT?"done"
?elif?[?$2?=?"down"?];then
?echo?"down"
?elif?[?$2?=?"disable"?];then
?echo?"disable"
?elif?[?$2?=?"error"?];then
?echo?"error"
?fi
?fi
fi

功能:

網(wǎng)口eth1 up后,設(shè)置該網(wǎng)口地址為IPADDR,即:192.168.40.8

讀者可以根據(jù)自己的需要編寫相應(yīng)的腳本。

3. 運(yùn)行ifplugd

ifplugd監(jiān)聽網(wǎng)口eth1并且執(zhí)行后面的腳本文件

在板子上輸入以下命令:

ifplugd?-i?eth1?-r?"sh?/system/if.sh"

查看該守護(hù)進(jìn)程:

H:compileforandroid
λ?adb?shell
rk3568_r:/?#?ifplugd?-i?eth1?-r?"sh?/system/if.sh"
rk3568_r:/?#?ps?-ef?|?grep?if
wifi????????????280??????1?0?09:58:52???????00:00:00?android.hardware.wifi@1.0-service
wifi????????????385??????1?0?09:58:53???????00:00:00?wificond
root???????????1826??????1?0?10:18:06???????00:00:00?ifplugd?-i?eth1?-r?sh?/system/if.sh
root???????????1834???1819?2?10:18:17?pts/0?00:00:00?grep?if

一旦網(wǎng)口插入網(wǎng)線后,地址就會被自動設(shè)置。

要實現(xiàn)開機(jī)就自動運(yùn)行ifplugd,可以參考下面文章

《安卓如何設(shè)置開機(jī)自動啟動某個程序?ramdisk + init.rc給你搞定》

補(bǔ)充

ifplugd的確可以實現(xiàn)監(jiān)測網(wǎng)卡的狀態(tài),并執(zhí)行相應(yīng)腳本,

但是有個前提,就是網(wǎng)口已經(jīng)注冊到系統(tǒng)中,即用ifconfig -a能查看到

如何是usb網(wǎng)口這種設(shè)備,在插入usb口之后網(wǎng)口設(shè)備才會注冊,

那么這種情況下,要想設(shè)置usb網(wǎng)卡,那么就就需要修改ifplugd程序。

下文,給大家講解如何自己實現(xiàn)一個簡單的網(wǎng)口檢測并設(shè)置ip的小程序

完整代碼,公眾號【一口Linux】后臺回復(fù):eth

瑞芯微電子

瑞芯微電子

瑞芯微專注于移動互聯(lián)網(wǎng)、數(shù)字多媒體芯片設(shè)計,是專業(yè)的個人移動信息終端SOC解決方案供應(yīng)商。瑞芯微在移動互聯(lián)網(wǎng)領(lǐng)域有多個較完整的自主創(chuàng)新的知識產(chǎn)權(quán)群,為中國電子業(yè)發(fā)展做出積極努力。目前產(chǎn)品涵蓋Android平板電腦、Android電視機(jī)頂盒(智能電視)、電子書、WIFI/藍(lán)牙音頻解決方案等。

瑞芯微專注于移動互聯(lián)網(wǎng)、數(shù)字多媒體芯片設(shè)計,是專業(yè)的個人移動信息終端SOC解決方案供應(yīng)商。瑞芯微在移動互聯(lián)網(wǎng)領(lǐng)域有多個較完整的自主創(chuàng)新的知識產(chǎn)權(quán)群,為中國電子業(yè)發(fā)展做出積極努力。目前產(chǎn)品涵蓋Android平板電腦、Android電視機(jī)頂盒(智能電視)、電子書、WIFI/藍(lán)牙音頻解決方案等。收起

查看更多

相關(guān)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設(shè)計資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄

公眾號『一口Linux』號主彭老師,擁有15年嵌入式開發(fā)經(jīng)驗和培訓(xùn)經(jīng)驗。曾任職ZTE,某研究所,華清遠(yuǎn)見教學(xué)總監(jiān)。擁有多篇網(wǎng)絡(luò)協(xié)議相關(guān)專利和軟件著作。精通計算機(jī)網(wǎng)絡(luò)、Linux系統(tǒng)編程、ARM、Linux驅(qū)動、龍芯、物聯(lián)網(wǎng)。原創(chuàng)內(nèi)容基本從實際項目出發(fā),保持原理+實踐風(fēng)格,適合Linux驅(qū)動新手入門和技術(shù)進(jìn)階。