導航:首頁 > 程序命令 > linux使用mdio命令

linux使用mdio命令

發布時間:2022-06-18 22:55:58

⑴ 如何調bcm 晶元sdk初始化

SDK初始化前,需要對SDK的架構有所了解,具體如下圖;可以看出SDK的代碼結構是一個層次化分明的架構,這里對各層的作用和詳細工作機制不闡述了,具體可以參見SDK的介紹文檔。

SDK代碼的結構圖

SDK根據上述架構,BCM模式啟動的時候進行的初始化包括以下幾個步驟:

1. 根據操作系統(linux、vxworks或unix等)不同調用sal_core_init()和sal_appl_init()兩個函數的對應版本,分別對Core SAL和Appl SAL兩部分進行初始化;linux系統下的sal_core_init()函數的主要工作時調用了函數sal_dpc_init()創建DPC(Deferred Procere Call)的信號量和線程;sal_appl_init()函數的linux版本則直接返回,沒有做任何工作;這兩個函數雖然意義很大,但是值得我們研究的內容不多。

2. 然後調用sal_thread_create創建一個運行BCM模式的線程,並調用diag_shell()函數完成對BCM模式的數據進行初始化、命令行進行注冊、設備探測和掛載、晶元初始化、客戶命令注冊、重啟動和BCM模式退出等操作,主要通過調用diag_init()函數、sysconf_init()函數、diag_rc_set()函數、sysconf_probe()函數、sysconf_attach()函數、bcm_init()函數、custom_cmd()和sal_reboot()等函數實現,下面詳細介紹下該函數的執行流程;

a. diag_init()調用cmdlist_init()函數、init_symtab()函數、sal_srand()函數、gvar_init()函數和sh_bg_init()函數等來完成命令行注冊、晶元的寄存器和表項軟體數據內存分配、隨機數種子獲取、全局變數初始化和所有設備可執行任務的內存分配(最多10條)和記錄等工作;

b. sysconf_init()函數除了初始化管理介面的調式函數外還調用soc_cm_init()函數來完成SOC的配置的管理介面的初始化;

c. sysconf_probe()函數調用bde_create()函數和sysconf_chip_override()函數完成探測已經掛載的設備並建立對應的配置管理項,包括為每個設備的分配id等工作;

d. 然後對每個unit調用sysconf_attach()函數來對soc_cm_device_init ()初始的管理介面的設備掛載一些中斷處理函數,注冊PCI讀寫函數等,用管理介面的結構體的指針函數成員形式保存,以便可以刪除和添加這些處理函數,並調用soc_cm_device_init()函數通過在裡面再調用soc_attach()函數來對每一個unit建立並初始化晶元的soc_control_t structure信息及對其訪問的互斥體;soc_attach()函數調用soc_feature_init函數、soc_intr_disable()函、soc_cmic_uc_msg_start函數、soc_info_config()函數(這個函數下面會繼續調用)、soc_dcb_unit_init()函數和soc_counter_verify()函數分別進行支持特性賦值、關閉中斷、開啟對設備的CMIC的UC信息、soc信息初始化、CPU收發包緩存DCB初始化和各種counter寄存器軟體記錄特定初始化,並對SOC_CONTROL(unit)和SOC_PERSIST(unit)兩個保存晶元設備信息的結構體一些成員進行賦值;

e. 調用diag_rc_set()函數來設置對每個晶元初始化配置的腳本文件名稱和熱啟動的初始化配置腳本名稱,如果沒有指定全部用默認的配置;然後解析腳本中的配置項,運用腳本進行配置初始化(包括MMU的配置);

f. 然後對每個晶元調用bcm_init()函數開始晶元的初始化工作,其首先調用bcm_attach()函數對BCM_CONTROL(unit)信息的部分成員進行賦值,包括設備類型、設備名稱和unit號等;然後調用_bcm_api_xlate_port_init()函數建立lport和bcm port的映射關系;並調用晶元各功能模塊的初始化函數(trident是bcm_esw_init ()函數)來對各模塊進行初始化;

g. 然後調用custom_cmd()函數載入BCM模式下用戶配置的命令載入進去;

h. 這樣整個SDK就初始化完畢,BCM模式就會提示BCM>等來等待用戶輸入命令;然後進入一個死循環一直調用sh_process()函數解析用戶配置的命令,然後調用對應的SDK介面下發到驅動;

i. 如果用戶輸入退出命令,會調用sh_exit函數來處理,包括可選的是否回收已經分配的資源等任務;

j. 如果用戶輸入重啟的命令則調用sal_reboot()函數linux版本是通過exit(0)實現。

另外,SDK為上層的初始化提供了調用介面system_init()函數對BCM交換晶元進行初始化,這部分是咱們應該重點關注的部分,當然該介面在BCM模式下用init命令也是可以被調用到的。下面詳細講解下:

a. 首先調用soc_reset_init()函數,ESW晶元里這個函數調用soc_do_init()函數來完事情;soc_do_init()函數會根據是否是重啟動設備進行的配置不一樣;

(1) 如果是熱啟動的設備則先調用soc_dma_abort()關閉所有DMA並調用soc_linkscan_config()函數設置CMIC(CPU Management InterfaceController)查詢埠link狀態,如果設置項為空則表示關閉埠link狀態掃描;然後如果是初始化soc有失敗標記的話調用soc_dma_abort()函數、soc_counter_stop()函數、soc_mem_scan_stop函數、soc_i2c_detach()函數和soc_l2x_stop()函數(有些其他晶元還調用soc_cmic_uc_msg_stop函數等)分別禁止所有的中斷、禁止計數行為、禁止內存掃描動作、釋放I2C
驅動內存、結束L2X(應該是用於mac地址學習和老化對CPU進行中斷通知)相關線程和停止等;然後調用soc_info_config()函數來初始化晶元埠的各種信息,包括晶元型號、各種類型埠的點陣圖、晶元稱號、mod數目、埠數目、hg口的位置、堆疊口位置、CPU口隊列數目、用於時間同步埠數目、埠最大支持速率、meter pools、入埠QOS支持的隊列數目等信息,另外對trident晶元支持QOS三級調度,所以還會調用soc_trident_num_cosq_init()對各個埠支持的隊列數做特殊初始化,最後調用soc_esw_dport_init()函數對User
to physical port map的映射及對user port的逆映射;總之soc_reset_init()函數偏重於對晶元信息、埠屬性和QOS隊列屬性等初始化;然後調用soc_feature_init()函數和soc_dcb_unit_init()函數完成晶元特性支持添加和CPU收發包緩存DCB的初始化工作;然後調用soc_dma_attach()函數和soc_dma_init()函數對中斷進行重新初始化,然後對通過PCI設置CMIC_CONFIG使能高級的DMA模式,包括Scatter/gather,
reload, annaligned transfers(這里具體含義不太明白),然後開啟一些中斷;然後是對MAC_CTRL寄存器讀寫配置一些MAC層的收發使能;然後是設置MAC表項、MPLS表項、vlan和egress vlan、 L3表項的一些hash沖突的級別,接著使能MAC地址學習和老化通知、 重新獲取L3轉發表項的長度和表項大小信息即可完成整個熱啟動的過程;

(2) 在不是熱啟動的情況下,會首先調用調用soc_info_config()函數、soc_feature_init()函數和soc_dcb_unit_init()函數來完成信么MMU、晶元特性支持和DCB初始化工作;然後調用soc_endian_config() 函數和soc_pci_burst_enable()函數來完成硬體大小端和支持PCI讀寫突發情形的使能;然後是調用soc_reset()函數來完成對晶元的一些配置,包括埠的phy配置和mac配置(比如寄存器有XLPORT_XMAC_CONTROL),及還會調用相應晶元的soc_reset_bcm56840_a0()函數完成對CPU口和出入方向屬性的一些配置,如CMIC_XGXS1_PLL_CONTROL_*、CMIC_MISC_CONTROL、CMIC_SOFT_RESET_REG、ING_CONFIG_2、EGR_CONFIG_2、ING_Q_BEGIN和EGR_Q_BEGIN等寄存器;然後和熱啟動一樣,通過PCI設置CMIC_CONFIG使能高級的DMA模式,對MAC_CTRL寄存器讀寫配置一些MAC層的收發使能就退出了soc_do_init()函數;

b. 然後調用soc_misc_init()函數對晶元的初始化信息進行核實判斷,最終根據函數指針調用晶元相應的函數,trident調用的則是_soc_trident_misc_init()函數;_soc_trident_misc_init()函數首先_soc_trident_ser_init()函數對IFP、EFP、VFP和UDF等tcam表項的表項大小、起始地址等信息進行軟體獲取並記錄,然後調用_soc_trident_clear_all_memory函數對CPU_COS_MAP_ONLY、FP_GLOBAL_MASK_TCAM、FP_GM_FIELDS、FP_TCAM、FP_UDF_TCAM、L2_USER_ENTRY_ONLY、L3_DEFIP_128_ONLY、L3_DEFIP_ONLY、L3_TUNNEL、MY_STATION_TCAM_ENTRY_ONLY、VFP_TCAM、VLAN_SUBNET_ONLY、EFP_TCAM、FP_GLOBAL_MASK_TCAM_Xm、FP_GLOBAL_MASK_TCAM_Ym、L3_ECMP_XM、L3_ECMP_YM、EGR_IPMC_CFG2、EGR_VLAN_CONTROL_1、_XLPORT_MIB_RESET等表項進行清空;然後_soc_trident_misc_init()函數繼續對CPU_PBM、CPU_PBM_2m、ISBS_PORT_TO_PIPE_MAPPINGm、EGR_ING_PORTm、XLPORT_CONFIGr、XLPORT_MODE_REG、IARB_MAIN_TDMm、EGR_PERQ_XMT_COUNTERS_BASE_ADDR、MISCCONFIG、ING_BYPASS_CTRL、EGR_BYPASS_CTRL、EGR_ENABLE、EPC_LINK_BMAP、ING_CONFIG_64、EGR_CONFIG_1、EGR_VLAN_CONTROL_1、ING_EN_EFILTER_BITMAP、SW2_FP_DST_ACTION_CONTROL、RTAG7_FLOW_BASED_HASH、RTAG7_HASH_ECMP、CMIC_I2C_STAT、CMIC_RATE_ADJUST_I2C、CMIC_RATE_ADJUST_INT_MDIO等寄存器或表項進行初始化賦值操作,並調用_trident_lep_init對埠進行點燈操作,還調用_soc_trident_fcoe_config_init對晶元的FCOE功能進行初始化;

c. 然後調用soc_mmu_init()函數對MMU進行初始化,和soc_misc_init()函數一樣,也是根據不同的晶元掛載不同的函數指針,這里會調用_soc_trident_mmu_init()函數對trident晶元的MMU進行初始化;包括GH、PG、SSP、SP、Port Min、PORT_MAX_SHARED_CELL、Queue Min等的劃分,MMU port到phy port的映,及MCQ_CONFIG、OP_THR_CONFIG、OP_VOQ_PORT_CONFIG、OVQ_DROP_THRESHOLD0、OVQ_DROP_THRESHOLD_RESET_LIMIT、OVQ_FLOWCONTROL_THRESHOLD、OVQ_MCQ_CREDITS、MCQ_FIFO_BASE_REG、PORT_PAUSE_ENABLE0_64、INPUT_PORT_RX_ENABLE0_64、S3_CONFIG、S2_CONFIG、S2_S3_ROUTING等voq和Qos相關功能的MMU相關寄存器初始化;

d. 然後調用soc_l2x_start函數開啟對MAC地址學習和老化的信息通知功能,主要是創建一個線程;

e. 然後調用bcm_init()函數對晶元進一步初始化,實際對trident晶元調用的是bcm_esw_init()函數,該函數再調用_bcm_esw_init()函數,該函數主要的是分別調用bcm_esw_linkscan_enable_set()函數、_bcm_moles_init()函數和bcm_esw_rcpu_init()函數,來實現關閉埠狀態掃描、初始化晶元各個模塊、初始化RCPU機制的主控模塊:然後_bcm_esw_init()函數調用_bcm_esw_switch_init()函數來實現對CPU隊列的初始化和對晶元的一些特殊控制信息,主要是通過調用bcm_esw_switch_rcpu_encap_priority_map_set()函數和bcm_esw_switch_control_set()函數來設置的。其中的_bcm_moles_init()函數調用晶元轉發流程的各個模塊的初始化函數,具體如下圖:

此處內容較多但是非常重要,希望感興趣的同學能查看對應代碼實際學習下相關內容,只提一點,bcm_esw_l2_init函數會調用_bcm_l2_bp_init函數對l2_user_etry表項設置BPDU報文上CPU的規則;

f. 然後對unit的每個埠調用bcm_port_stp_set()函數、bcm_port_autoneg_set()函數和bcm_stat_clear()函數分別設置埠的STP的狀態為轉發、是否自動協商和清楚埠統計;

g. 然後調用bcm_linkscan_enable_set函數來定期查詢埠的link狀態;

h. 部分晶元還會調用bcm_linkscan_register注冊trunk口的link狀態查詢回調函數;

⑵ linux內核編譯完成後重啟,出現mdio-gpio is already registered,怎麼辦

圖片好小...
不過依稀看到了是載入一個內核模塊(dm-region-hash)錯誤,這個模塊應該是和文件系統相關的,然後後面mount 文件系統的時候就找不到磁碟...
你更新了的內核出了問題...載入模塊的時候顯示這個模塊已經存在,所以就沒法insmod這個模塊,操作不成功了。大概是重復載入了...

然後給你搜索了下,這個問題好像比較常見,這裡面有人給出了解決方案:

地址:
把有用的給你貼出來吧...

insmod: error inserting '/lib/dm-region-hash.ko' : -1 File exists
這一句是說你把dm-region-hash編譯進內核,卻沒有生成dm-region-hash.ko文件,可能是有些需要的項沒選上,我也是遇到這種問題,一直沒解決 [/quote]

是因為重復載入了/lib/dm-region-hash.ko

可以解決的,步驟如下
1,解壓initrd文件
[root@bogon ~]# cp /boot/initrd-2.6.30.4.img /tmp
[root@bogon ~]# cd /tmp/
[root@bogon tmp]# ls
initrd-2.6.30.4.img
[root@bogon tmp]# mkdir newinitrd
[root@bogon tmp]# cd newinitrd/
[root@bogon newinitrd]# zcat ../initrd-2.6.30.4.img |cpio -i
11537 blocks
釋放之後看到如下內容
[root@bogon newinitrd]# ls
bin dev etc init lib proc sbin sys sysroot

2,ok,下邊就是編輯init,刪掉其中重復的四行中的兩行
echo "Loading dm-region-hash.ko mole"
insmod /lib/dm-region-hash.ko
echo "Loading dm-region-hash.ko mole"
insmod /lib/dm-region-hash.ko

3,重新打包initrd
[root@bogon newinitrd]# find .|cpio -c -o > ../initrd
11538 blocks
[root@bogon newinitrd]# cd ..
[root@bogon tmp]# gzip -9 < initrd > initrd.img
[root@bogon tmp]# ls
initrd-2.6.30.4.img initrd initrd.img newinitrd

好了,initrd.img就是重新打包的initrd了,然後把initrd.img拷貝到/boot,更改grub.conf里邊的initrd-2.6.30.4.img為initrd.img就可以了,
這樣「insmod: error inserting '/lib/dm-region-hash.ko' : -1 File exists」 就不會有了

其實將init文件的第二行「setquiet」 去掉,你就知道initrd文件到底在做什麼了

⑶ 如何使BeagleBone SD卡啟動時不再分區

bbb板子上自帶2G eMMC, 但是對很多應用來說, 容量還是遠遠不夠, 於是我想用sd卡擴展空間, 但是發現一插入sd卡, 板子就啟動不了啦, 去google了一下原因, 原來bbb的原生系統所帶的uboot啟動的時候如果發現有sd卡, 則sd卡會變成mmc0, eMMC則變成mmc1, 導致啟動失敗, 於是搜了很多資料, 努力了一個晚上終於搞定這個問題....

首先你需要一張microSD卡, 一個讀卡器, 我用的是筆記本自帶的, 啟動ubuntu(或者別的linux系統, windows不行), 把sd卡插進讀卡器里, 輸入

fdisk -l

查看一下當前sd卡設備的名稱, 我的是mmcblk0, 於是

fdisk /dev/mmcblk0

進行分區, 使用命令 d 刪除sd卡上目前存在的所有分區, 使用n 命令分別創建2個分區, 第一個小一點的, 大概幾十m就可以了, 用作啟動區, 第二個分區就是剩下的所有空間, 最後輸入w命令寫入分區表, 如果不熟悉fdisk命令的話可以去找網路看一下.

接下來使用mkfs命令分別格式化兩個分區:
mkfs -t vfat -F 16 -n boot /dev/mmcblk0p1

mkfs -V -t ext4 -j -L data /dev/mmcblk0p2

兩個分區命名為boot 跟 data, 第一個是fat16格式的, 第二個是ext4格式的, 接下來掛載第一個分區到根目錄下, 並在上面創建一個文件uEnv.txt , 將下面幾行內容寫進去:
mmcdev=1
bootpart=1:2
mmcroot=/dev/mmcblk1p2 ro
optargs=quiet

保存後umount, 把sd卡拿出來, 插到BBB板子上, 最後上電, 啟動成功!!

我剛開始的時候只是google到uEnv.txt以及它的內容, 沒有注意使用fdisk以及mkfs製作啟動sd卡, 插進BBB板子後啟動失敗, 看串口調試信息顯示:
Bad partition specification mmc 1:2
於是查了半天終於發現是sd卡的分區不對, 用以上方法製作成功後, 串口觀察啟動過程:

U-Boot SPL 2013.04-dirty (Jun 19 2013 - 09:57:14)
musb-hdrc: ConfigData=0xde (UTMI-8, dyn FIFOs, HB-ISO Rx, HB-ISO Tx, SoftConn)
musb-hdrc: MHDRC RTL version 2.0
musb-hdrc: setup fifo_mode 4
musb-hdrc: 28/31 max ep, 16384/16384 memory
USB Peripheral mode controller at 47401000 using PIO, IRQ 0
musb-hdrc: ConfigData=0xde (UTMI-8, dyn FIFOs, HB-ISO Rx, HB-ISO Tx, SoftConn)
musb-hdrc: MHDRC RTL version 2.0
musb-hdrc: setup fifo_mode 4
musb-hdrc: 28/31 max ep, 16384/16384 memory
USB Host mode controller at 47401800 using PIO, IRQ 0
OMAP SD/MMC: 0
mmc_send_cmd : timeout: No status update
reading u-boot.img
reading u-boot.img

U-Boot 2013.04-dirty (Jun 19 2013 - 09:57:14)

I2C: ready
DRAM: 512 MiB
WARNING: Caches not enabled
NAND: No NAND device found!!!
0 MiB
MMC: OMAP SD/MMC: 0, OMAP SD/MMC: 1
*** Warning - readenv() failed, using default environment

musb-hdrc: ConfigData=0xde (UTMI-8, dyn FIFOs, HB-ISO Rx, HB-ISO Tx, SoftConn)
musb-hdrc: MHDRC RTL version 2.0
musb-hdrc: setup fifo_mode 4
musb-hdrc: 28/31 max ep, 16384/16384 memory
USB Peripheral mode controller at 47401000 using PIO, IRQ 0
musb-hdrc: ConfigData=0xde (UTMI-8, dyn FIFOs, HB-ISO Rx, HB-ISO Tx, SoftConn)
musb-hdrc: MHDRC RTL version 2.0
musb-hdrc: setup fifo_mode 4
musb-hdrc: 28/31 max ep, 16384/16384 memory
USB Host mode controller at 47401800 using PIO, IRQ 0
Net: <ethaddr> not set. Validating first E-fuse MAC
cpsw, usb_ether
Hit any key to stop autoboot: 1  0
gpio: pin 53 (gpio 53) value is 1
mmc0 is current device
micro SD card found
mmc0 is current device
gpio: pin 54 (gpio 54) value is 1
SD/MMC found on device 0
reading uEnv.txt
62 bytes read in 2 ms (30.3 KiB/s)
Loaded environment from uEnv.txt
Importing environment from mmc ...
gpio: pin 55 (gpio 55) value is 1
mmc_send_cmd : timeout: No status update
4270840 bytes read in 746 ms (5.5 MiB/s)
gpio: pin 56 (gpio 56) value is 1
24129 bytes read in 51 ms (461.9 KiB/s)
Booting from mmc ...
## Booting kernel from Legacy Image at 80007fc0 ...
Image Name: Angstrom/3.8.13/beaglebone
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 4270776 Bytes = 4.1 MiB
Load Address: 80008000
Entry Point: 80008000
Verifying Checksum ... OK
## Flattened Device Tree blob at 80f80000
Booting using the fdt blob at 0x80f80000
XIP Kernel Image ... OK
OK
Using Device Tree in place at 80f80000, end 80f88e40

Starting kernel ...

Uncompressing Linux... done, booting the kernel.
[ 0.194032] omap2_mbox_probe: platform not supported
[ 0.204621] tps65217-bl tps65217-bl: no platform data provided
[ 0.281250] bone-capemgr bone_capemgr.8: slot #0: No cape found
[ 0.318357] bone-capemgr bone_capemgr.8: slot #1: No cape found
[ 0.355465] bone-capemgr bone_capemgr.8: slot #2: No cape found
[ 0.392574] bone-capemgr bone_capemgr.8: slot #3: No cape found
[ 0.412614] bone-capemgr bone_capemgr.8: slot #6: BB-BONELT-HDMIN conflict P8.45 (#5:BB-BONELT-HDMI)
[ 0.422237] bone-capemgr bone_capemgr.8: slot #6: Failed verification
[ 0.429015] bone-capemgr bone_capemgr.8: loader: failed to load slot-6 BB-BONELT-HDMIN:00A0 (prio 2)
[ 0.451672] omap_hsmmc mmc.4: of_parse_phandle_with_args of 'reset' failed
[ 0.516043] pinctrl-single 44e10800.pinmux: pin 44e10854 already requested by 44e10800.pinmux; cannot claim for gpio-leds.7
[ 0.527764] pinctrl-single 44e10800.pinmux: pin-21 (gpio-leds.7) status -22
[ 0.535082] pinctrl-single 44e10800.pinmux: could not request pin 21 on device pinctrl-single
[ 6.375621] libphy: PHY 4a101000.mdio:01 not found
[ 6.380726] net eth0: phy 4a101000.mdio:01 not found on slave 1
systemd-fsck[85]: Angstrom: clean, 50623/112672 files, 325594/449820 blocks

.---O---.
| | .-. o o
| | |-----.-----.-----.| | .----..-----.-----.
| | | __ | ---'| '--.| .-'| | |
| | | | | |--- || --'| | | ' | | | |
'---'---'--'--'--. |-----''----''--' '-----'-'-'-'
-' |
'---'

The Angstrom Distribution beaglebone ttyO0

Angstrom v2012.12 - Kernel 3.8.13

beaglebone login:

紅字就是讀sd卡配置環境文件uEnv.txt的過程, 因為插入sd卡後設備號有變動, 因此實際上這個方法是把root重新定義了回去, 使得系統能正確找到zImage的位置.

⑷ linux網路連接問題。因為寫不下所以我刪掉了一些,只留下了一些覺得重要的東西。

這里介紹學習Linux的一些建議。
一、從基礎開始: 常常有些朋友在Linux論壇問一些問題,不過,其中大多數的問題都是很基礎的。例如:為什麼我使用一個命令的時候,系統告訴我找不到該目錄,我要如何限制使用者的許可權等問題,這些問題其實都不是很難的,只要了解了 Linux 的基礎之後,應該就可以很輕易的解決掉這方面的問題。而有些朋友們常常一接觸Linux 就是希望構架網站,根本沒有想到要先了解一下Linux 的基礎。這是相當困難的。
二、Linux命令是必須學習 雖然Linux桌面應用發展很快,但是命令在Linux中依然有很強的生命力。Linux是一個命令行組成的操作系統,精髓在命令行,無論圖形界面發展到什麼水平這個原理是不會變的,Linux命令有許多強大的功能:從簡單的磁碟操作、文件存取、到進行復雜的多媒體圖象和流媒體文件的製作。舉一個例子:Linux的常用命令find,察看man文檔,初學者一定會覺得太復雜而不原意用,但是你一旦學會就愛不釋手.它的功能實在太強了,在配合exec參數或者通過管道重定向到xargs命令和grep命令,可以完成非常復雜的操作,如果同樣的操作用圖形界面的工具來完成,恐怕要多花十幾陪的時間. 不同版本的Linux命令數量不一樣,這里筆者把它們中比較重要的和使用頻率最多的命令,按照它們在系統中的作用分成幾個部分介紹給大家,通過這些基礎命令的學習我們可以進一步理解Linux系統: 安裝和登錄命令:login、 shutdown、 halt、 reboot 、mount、umount 、chsh 文件處理命令:file、 mkdir、 grep、dd、 find、 mv 、ls 、diff、 cat、 ln 系統管理相關命令: df、 top、 free、 quota 、at、 lp、 adser、 groupadd kill、 crontab、 tar、 unzip、 gunzip 、last 網路操作命令:ifconfig、 ip 、ping 、 netstat 、telnet、 ftp、 route、 rlogin rcp 、finger 、mail 、nslookup 系統安全相關命令: passwd 、su、 umask 、chgrp、 chmod、chown、chattr、sudo、 pswho
三、選擇一本好的工具書 工具書對於學習者而言是相當重要的。一本錯誤觀念的工具書卻會讓新手整個誤入歧途。目前國內關於Linux的書籍有很多不過精品的不多,筆者強烈建議閱讀影印本的「O'Reilly原版Linux圖書 」,而且出版社還提供了一個非常好的路線圖:。
四、選擇一個適合你的Linux發行版本 目前全球有超過1百多個Linux發行版本,在國內也能找到十幾個常見版本。如何選擇請根據你的需求和能力,Redhat Linux 和Debian Linux是網路管理員的理想選擇。對於英語不是很好的讀者紅旗Linux、中標Linux這些中文版本比較適合。現在一些Linux網站有一些Linux版本的免費下載,這里要說的是並不適合Linux初學者。
五、 養成在命令行下工作: 一定要養成在命令行下工作的習慣,要知道X-window只是運行在命令行模式下的一個應用程序。在命令行下學習雖然一開始進度較慢,但是熟悉後,您未來的學習之路將是以指數增加的方式增長的。從網管員來說,命令行實際上就是規則,它總是有效的,同時也是靈活的。即使是通過一條緩慢的數據機線路,它也能操縱幾千公里以外地遠程系統。
六、 選擇一個適合你的Linux社區; 隨著Linux應用的擴展,出現了不少Linux社區。其中有一些非常優秀的社區:(國內最高水平GNU站點)、 (中國最大的Unix技術社區),但是這幾個論壇往往是Linux高手的舞台,如果在探討高級技巧的論壇張貼非常初級的問題經常會沒有結果。
七、勤於實踐: 要增加自己Linux 的技能,只有通過實踐來實現了。所以,趕快找一部計算機,趕快安裝一個 Linux 發行版本,然後進入精彩的Linux世界。相信對於你自己的 Linux 能力必然大有斬獲。此外,人腦不像計算機的硬碟一樣,除非硬碟壞掉了或者是資料被你抹掉了,否則儲存的資料將永遠而且立刻的記憶在硬碟中。在人類記憶的曲線中,你必須要不斷的重復練習才會將一件事情記得比較熟。同樣的,學習 Linux 也一樣,如果你無法經常學習的話,學了後面的,前面的忘了。你對Linux命令熟悉後你可以開始搭建一個小的Linux網路,這是最好的實踐方法。Linux是網路的代名詞,Linux網路服務功能非常強大,不論是郵件伺服器、Web伺服器、DNS伺服器等都非常完善。當然你不需搭建所有服務,可以慢慢來。需要說明的是這個Linux網路對於初學者有兩三台計算機即可,其中一台計算機最好安裝Windows系統。自己多動手,不要非要等著別人幫你解決問題。

⑸ linux driver mdio-gpio is already registered

mdio-gpio 已經注冊了,可以你卻還要注冊啊,注冊重復啦。

⑹ 雄邁板子,3535晶元,網路晶元是AR8035,kernel驅動怎麼弄

海思網路部分物理上看一般是MAC連接PHY(就是8035)再連接網路變壓器再到RJ45

從數據通路上看, MAC是海思晶元內部的模塊,通過MDIO來設置PHY(讀寫PHY的寄存器), 通過MII/RMII/RGMII介面(3535都支持)來和PHY交換網路數據

通常情況下, 海思的linux網路驅動基本都是好的,要修改的一般就是PHY地址和使用MII/RMII/RGMII介面中的哪一種,這個在linux config時應該都可以選

另外, 要注意一下管腳復用, 一般uboot配網路時應該都把復用關系改好了,只要後面不要再改變就好了

3535有兩個MAC, 兩套PHY介面, 一套MDIO介面(有點像I2C, 可以讀寫多個PHY)

閱讀全文

與linux使用mdio命令相關的資料

熱點內容
安卓微信版本過低不升級怎麼登錄微信 瀏覽:937
程序員專科生長期目標 瀏覽:685
以太坊交易確認演算法 瀏覽:814
文件夾變成hjm打不開怎麼辦 瀏覽:571
分頁演算法視頻 瀏覽:102
python3標准庫pdf 瀏覽:600
杭州雲伺服器銷售 瀏覽:535
pdf密碼移除 瀏覽:148
雲迅智創FIL伺服器 瀏覽:940
中間件pdf 瀏覽:277
輸入伺服器上的ip地址怎麼辦啊 瀏覽:296
app道客巴巴如何登錄 瀏覽:87
初中物理課本pdf 瀏覽:340
原神安裝包解壓失敗 瀏覽:349
分期車有不需要解壓的嗎 瀏覽:765
程序員高效軟體 瀏覽:471
十年後程序員的工資還會這么高嗎 瀏覽:404
用氣球解壓玩具教程 瀏覽:327
命令與征服3漢化補丁 瀏覽:941
kali解壓口令 瀏覽:649