ru:toh:tp-link:tl-mr3420:deep.mmc.hack

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Previous revision
ru:toh:tp-link:tl-mr3420:deep.mmc.hack [2013/01/19 06:00]
ru:toh:tp-link:tl-mr3420:deep.mmc.hack [2014/10/12 10:40] (current)
dioptimizer some cosmetic changes
Line 1: Line 1:
-===== Расширенный моддинг MMC =====+====== Расширенный моддинг MMC ======
  
-^ Internal CS ^ AR724X ^ AR933X ^ +===== Способ подключения ===== 
-| CS1 | QSS LED (GPIO0) | UART In (GPIO9) | +| {{http://​www.mal4x.ru/​download/​file.php?​id=409&​mode=view&​1g1.png?nolink|Способ подключения}} | 
-| CS2 | SYS LED (GPIO1) | UART Out (GPIO10) | +| {{http://​oi62.tinypic.com/2qitue0.jpg?nolink|Способ ​подключения}} |
-На устройствах AR724X: Для того, чтобы использовать внутренний CS1 - необходимо [[#переключение.gpio0.qss.led.в.cs1.на.ar724xтключить QSS LED]] или как алтьернатива, использовать [[#​вариант.gpio.как.cs1вободный GPIO пин]].+
  
-На устройствах AR933X: Для того, чтобы использовать внутренний CS1 - необходимо [[#отключение.uart.и.переключение.gpio.9.rx.в.cs1.на.ar933x|отключить UART]] или как алтьернатива,​ использовать [[#вариант.gpio.как.cs1|свободный GPIO пин]].+//Схема подключения успешно опробована на шине питания GPIO = 2.6V//
  
-==== Способ ​подключения ​==== +Существует два способа модификации с использованием разных GPIO для CS1, а также два варианта установки необходимого ПО для непосредственного использования карточки памяти ​подключенной к устройству.\\ 
-{{http://​dioptimizer.narod.ru/​files/​images/​mmc_spi0.1.GIF?​nolink|Способ подключения}}+**Примечание:​** Эта модификация, как и модификация [[:​doc:​howto:​mmc_over_gpio|mmc_over_gpio]] - не поддерживает [[wp>​ru:​Secure_Digital#​SDHC|SDHC]] карточки памяти на уровне драйвера.\\
  
-//​Схема подключения успешно ​опробована на шине питания GPIO = 2.6V//+===== Подключение ​MMC/SD карты памяти к шине spi0.1 ===== 
 + 
 +==== Основные изменения в прошивке ==== 
 + 
 +<​HTML><​p style="​border:​2px dashed red;">​Первый способ.</​p></​HTML>​ 
 +=== Вариант GPIO как CS1 === 
 +В качестве CS для MMC/SD карты памяти, предпочтительнее использовать любой свободный GPIO пин. 
 + 
 +== Использование ​GPIO 7 - как CS1 для общей шины: == 
 +<code diff> 
 +Index: target/​linux/​ar71xx/​files/​arch/​mips/​ath79/​dev-m25p80.c 
 +=================================================================== 
 +--- target/​linux/​ar71xx/​files/​arch/​mips/​ath79/​dev-m25p80.c (revision 34914) 
 ++++ target/​linux/​ar71xx/​files/​arch/​mips/​ath79/​dev-m25p80.c (working copy) 
 +@@ -50,7 +50,7 @@ 
 + void __init ath79_register_m25p80(struct flash_platform_data *pdata) 
 + { 
 + ​ ath79_spi_data.bus_num = 0; 
 +- ath79_spi_data.num_chipselect = 1; 
 ++ ath79_spi_data.num_chipselect ​= 2
 + ​ ath79_spi0_cdata.is_flash = true; 
 + ​ ath79_spi_info[0].platform_data = pdata; 
 + ​ ath79_register_spi(&​ath79_spi_data,​ ath79_spi_info,​ 1); 
 +Index: target/linux/ar71xx/​files/​arch/​mips/​ath79/​mach-tl-mr3x20.c 
 +=================================================================== 
 +--- target/​linux/​ar71xx/​files/​arch/​mips/​ath79/​mach-tl-mr3x20.c (revision 34914) 
 ++++ target/​linux/​ar71xx/​files/​arch/​mips/​ath79/​mach-tl-mr3x20.c (working copy) 
 +@@ -9,6 +9,9 @@ 
 +  */ 
 +  
 + #​include <​linux/​gpio.h>​ 
 ++#include <​linux/​mmc/​host.h>​ 
 ++#include <​linux/​spi/​spi.h>​ 
 ++#include <​linux/​spi/​mmc_spi.h>​ 
 +  
 + #​include <​asm/​mach-ath79/​ath79.h>​ 
 +  
 +@@ -16,12 +19,14 @@ 
 + #​include "​dev-ap9x-pci.h"​ 
 + #​include "​dev-gpio-buttons.h"​ 
 + #​include "​dev-leds-gpio.h"​ 
 ++#include "​dev-spi.h"​ 
 + #​include "​dev-m25p80.h"​ 
 + #​include "​dev-usb.h"​ 
 + #​include "​machtypes.h"​ 
 +  
 + #​define TL_MR3X20_GPIO_LED_QSS 0 
 + #​define TL_MR3X20_GPIO_LED_SYSTEM 1 
 ++#define TL_MR3X20_GPIO_CS1_MMC 7 
 + #​define TL_MR3X20_GPIO_LED_3G 8 
 +  
 + #​define TL_MR3X20_GPIO_BTN_RESET 11 
 +@@ -32,6 +37,26 @@ 
 + #​define TL_MR3X20_KEYS_POLL_INTERVAL 20 /​* msecs */ 
 + #​define TL_MR3X20_KEYS_DEBOUNCE_INTERVAL (3 * TL_MR3X20_KEYS_POLL_INTERVAL) 
 +  
 ++static struct mmc_spi_platform_data ath79_mmc_data = { 
 ++       ​.get_ro = NULL, 
 ++       ​.get_cd = NULL, 
 ++       ​.detect_delay = 100, /* msecs */  
 ++ .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,​ 
 ++}; 
 +
 ++static struct ath79_spi_controller_data ath79_spi1_cdata = { 
 ++ .cs_type = ATH79_SPI_CS_TYPE_GPIO,​ 
 ++ .cs_line = TL_MR3X20_GPIO_CS1_MMC,​ 
 ++}; 
 +
 ++static struct spi_board_info ath79_spi_info[] = { 
 ++ { 
 ++ .bus_num = 0, 
 ++ .chip_select = 1, 
 ++ .max_speed_hz = 25000000, 
 ++ .modalias = "​mmc_spi",​ 
 ++ .platform_data = &​ath79_mmc_data,​ 
 ++ .controller_data = &​ath79_spi1_cdata,​ 
 ++ } 
 ++}; 
 +
 + ​static const char *tl_mr3x20_part_probes[] = { 
 + ​ "​tp-link",​ 
 + ​ NULL,​ 
 +@@ -97,6 +122,9 @@ 
 + ​ ath79_register_eth(0);​ 
 +  
 + ​ ap91_pci_init(ee,​ mac); 
 +
 ++ spi_register_board_info(ath79_spi_info,​ 
 ++ ARRAY_SIZE(ath79_spi_info));​ 
 + } 
 +  
 + ​static void __init tl_mr3x20_usb_setup(void) 
 +</​code>​ 
 + 
 +<​HTML><​p style="​border:​2px dashed red;">​Второй способ.</​p></​HTML>​ 
 +=== Вариант Internal CS1 === 
 + 
 +^ Internal CS ^ AR724X ^ AR933X ^ 
 +| CS1 | QSS LED (GPIO0) | UART In (GPIO9) | 
 +| CS2 | SYS LED (GPIO1) | UART Out (GPIO10) | 
 +На устройствах AR724X: Для того, чтобы использовать внутренний CS1 - необходимо [[#​переключение.gpio0.qss.led.в.cs1.на.ar724x|отключить QSS LED]].
  
-==== Патчинг прошивки ​====+На устройствах AR933X: Для того, ​чтобы ​использовать внутренний CS1 - необходимо [[#​отключение.uart.и.переключение.gpio.9.rx.в.cs1.на.ar933x|отключить UART]].
  
-=== Вариант Int. CS1 === 
 <code diff> <code diff>
 Index: target/​linux/​ar71xx/​files/​arch/​mips/​ath79/​dev-m25p80.c Index: target/​linux/​ar71xx/​files/​arch/​mips/​ath79/​dev-m25p80.c
Line 115: Line 213:
  /* Disable UART, enabling GPIO 9 and GPIO 10 */  /* Disable UART, enabling GPIO 9 and GPIO 10 */
  ath79_gpio_function_disable(AR933X_GPIO_FUNC_UART_EN);​  ath79_gpio_function_disable(AR933X_GPIO_FUNC_UART_EN);​
- /* Enabling CS1, disable GPIO 9 */+ /* Enabling ​internal ​CS1, disable GPIO 9 */
  ath79_gpio_function_enable(AR933X_GPIO_FUNC_SPI_CS_EN1);​  ath79_gpio_function_enable(AR933X_GPIO_FUNC_SPI_CS_EN1);​
 </​code>​ </​code>​
 +\\
 +=== Реализация подключение/​извлечение SD-карточки памяти ===
 +{{http://​gumstix.8.x6.nabble.com/​attachment/​640947/​0/​moz-screenshot-4.png?​nolink|Способ подключения (схема)}}
  
-=== Вариант GPIO как ​CS1 === +//​Используется SD Socket/SD card holder/SD Memory Card Connector с дополнительными соответствующими ​контактами/​кнопками CD (Card Detect) и WP (Write Protect)// 
-== Использование GPIO 7 как ​CS1 для ​общей шины==+ 
 +Всего используем два свободных GPIO7->CS1, GPIO18->​CD. 
 +Создаем дополнительную кнопку по примеру:
 <code diff> <code diff>
-Index: ​target/​linux/​ar71xx/​files/​arch/​mips/​ath79/​dev-m25p80.c +diff --git a/​target/​linux/​ar71xx/​files/​arch/​mips/​ath79/​dev-m25p80.c b/target/​linux/​ar71xx/​files/​arch/​mips/​ath79/​dev-m25p80.c 
-=================================================================== +index 9323b31..2c51142 100644 
---- target/​linux/​ar71xx/​files/​arch/​mips/​ath79/​dev-m25p80.c (revision 34914) +--- a/target/​linux/​ar71xx/​files/​arch/​mips/​ath79/​dev-m25p80.c 
-+++ target/​linux/​ar71xx/​files/​arch/​mips/​ath79/​dev-m25p80.c (working copy) ++++ b/target/​linux/​ar71xx/​files/​arch/​mips/​ath79/​dev-m25p80.c 
-@@ -50,7 +50,7 @@+@@ -50,7 +50,7 @@ static struct ath79_spi_platform_data ath79_spi_data;​
  void __init ath79_register_m25p80(struct flash_platform_data *pdata)  void __init ath79_register_m25p80(struct flash_platform_data *pdata)
  {  {
Line 135: Line 238:
  ​ ath79_spi_info[0].platform_data = pdata;  ​ ath79_spi_info[0].platform_data = pdata;
  ​ ath79_register_spi(&​ath79_spi_data,​ ath79_spi_info,​ 1);  ​ ath79_register_spi(&​ath79_spi_data,​ ath79_spi_info,​ 1);
-Index: ​target/​linux/​ar71xx/​files/​arch/​mips/​ath79/​mach-tl-mr3x20.c +diff --git a/​target/​linux/​ar71xx/​files/​arch/​mips/​ath79/​mach-tl-mr3x20.c b/target/​linux/​ar71xx/​files/​arch/​mips/​ath79/​mach-tl-mr3x20.c 
-=================================================================== +index 5924ac5..892d66f 100644 
---- target/​linux/​ar71xx/​files/​arch/​mips/​ath79/​mach-tl-mr3x20.c (revision 34914) +--- a/target/​linux/​ar71xx/​files/​arch/​mips/​ath79/​mach-tl-mr3x20.c 
-+++ target/​linux/​ar71xx/​files/​arch/​mips/​ath79/​mach-tl-mr3x20.c (working copy)++++ b/target/​linux/​ar71xx/​files/​arch/​mips/​ath79/​mach-tl-mr3x20.c
 @@ -9,6 +9,9 @@ @@ -9,6 +9,9 @@
   */   */
Line 149: Line 252:
  #​include <​asm/​mach-ath79/​ath79.h>​  #​include <​asm/​mach-ath79/​ath79.h>​
    
-@@ -16,12 +19,14 @@ +@@ -17,21 +20,45 @@
- #​include "​dev-ap9x-pci.h"​+
  #​include "​dev-gpio-buttons.h"​  #​include "​dev-gpio-buttons.h"​
  #​include "​dev-leds-gpio.h"​  #​include "​dev-leds-gpio.h"​
-+#include "​dev-spi.h"​ 
  #​include "​dev-m25p80.h"​  #​include "​dev-m25p80.h"​
 ++#include "​dev-spi.h"​
  #​include "​dev-usb.h"​  #​include "​dev-usb.h"​
  #​include "​machtypes.h"​  #​include "​machtypes.h"​
Line 164: Line 266:
    
  #​define TL_MR3X20_GPIO_BTN_RESET 11  #​define TL_MR3X20_GPIO_BTN_RESET 11
-@@ -32,6 +37,26 @@+ #​define TL_MR3X20_GPIO_BTN_QSS 12 
 ++#define TL_MR3X20_GPIO_BTN_MMC 18 
 +  
 + #​define TL_MR3X20_GPIO_USB_POWER 6 
 + 
  #​define TL_MR3X20_KEYS_POLL_INTERVAL 20 /​* msecs */  #​define TL_MR3X20_KEYS_POLL_INTERVAL 20 /​* msecs */
  #​define TL_MR3X20_KEYS_DEBOUNCE_INTERVAL (3 * TL_MR3X20_KEYS_POLL_INTERVAL)  #​define TL_MR3X20_KEYS_DEBOUNCE_INTERVAL (3 * TL_MR3X20_KEYS_POLL_INTERVAL)
    
-+static struct mmc_spi_platform_data ​ath79_mmc_data ​= {++static struct mmc_spi_platform_data ​ath79_mmc_pdata ​= { 
 ++ .detect_delay = 250, /* card detection delay in msec */
 + .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,​ + .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,​
 +}; +};
Line 175: Line 282:
 + .cs_type = ATH79_SPI_CS_TYPE_GPIO,​ + .cs_type = ATH79_SPI_CS_TYPE_GPIO,​
 + .cs_line = TL_MR3X20_GPIO_CS1_MMC,​ + .cs_line = TL_MR3X20_GPIO_CS1_MMC,​
-+};++}; 
 + +
-+static struct spi_board_info ath79_spi_info[] = {++static struct spi_board_info ath79_spi_info[] ​__initdata ​= {
 + { + {
 + .bus_num = 0, + .bus_num = 0,
Line 183: Line 290:
 + .max_speed_hz = 25000000, + .max_speed_hz = 25000000,
 + .modalias = "​mmc_spi",​ + .modalias = "​mmc_spi",​
-+ .platform_data = &ath79_mmc_data,++ .platform_data = &ath79_mmc_pdata,
 + .controller_data = &​ath79_spi1_cdata,​ + .controller_data = &​ath79_spi1_cdata,​
 + } + }
Line 191: Line 298:
  ​ "​tp-link",​  ​ "​tp-link",​
  ​ NULL,​  ​ NULL,​
-@@ -97,6 +122,9 @@+@@ -72,6 +99,13 @@ static struct gpio_keys_button tl_mr3x20_gpio_keys[] __initdata = { 
 + ​ .debounce_interval = TL_MR3X20_KEYS_DEBOUNCE_INTERVAL,​ 
 + ​ .gpio = TL_MR3X20_GPIO_BTN_QSS,​ 
 + ​ .active_low = 1, 
 ++ }, { 
 ++ .desc = "​mmc",​ 
 ++ .type = EV_KEY, 
 ++ .code = KEY_MMC_BUTTON,​ 
 ++ .debounce_interval = TL_MR3X20_KEYS_DEBOUNCE_INTERVAL,​ 
 ++ .gpio = TL_MR3X20_GPIO_BTN_MMC,​ 
 ++ .active_low = 1, 
 +  } 
 + }; 
 +  
 +@@ -97,6 +131,9 @@ static void __init tl_ap99_setup(void)
  ​ ath79_register_eth(0);​  ​ ath79_register_eth(0);​
    
Line 203: Line 324:
 </​code>​ </​code>​
  
-=== Зависимость === +После компиляции, ​создана дополнительная кнопка GPIO18->​mmc. 
-Данный мод зависит от пакетов ''​kmod-mmc''​ и ''​kmod-mmc-spi'',​ их можно включить при компиляции через ''​make menuconfig''​ или ​установить позже.+Далее, необходимо создать [[:​doc:​howto:​hardware.button#​using.atheros.00-button.uci|конфигурацию для кнопки]]:​ 
 +<code bash> 
 +uci add system button 
 +uci set system.@button[-1].button=mmc 
 +uci set system.@button[-1].action=pressed 
 +uci set system.@button[-1].handler='echo "​spi0.1"​ > /​sys/​bus/​spi/​drivers/​mmc_spi/​bind'​ 
 +uci add system button 
 +uci set system.@button[-1].button=mmc 
 +uci set system.@button[-1].action=released 
 +uci set system.@button[-1].handler='​echo "​spi0.1"​ > /​sys/​bus/​spi/​drivers/​mmc_spi/​unbind'​ 
 +uci commit system 
 +</​code>​ 
 + 
 +**Примечание:** До извлечения SD-карты памяти, рекомендуется использовать команды **sync** и **unmount** **''<​раздел>''​** - для правильного размонтирования разделов SD-карты памяти,​ т.к. при извлечении карты памяти (после записи на нее), ​ некоторые данные могут остаться в буфере. 
 + 
 +== Подключение/​извлечение SD карты памяти:​ == 
 +<​HTML>​ 
 +<pre class="​code">​ 
 +... 
 +[ 1968.380000] mmc_spi spi0.1: SD/MMC host mmc0, no DMA, no WP, no poweroff 
 +[ 1968.550000] mmc0: SD Status: Invalid Allocation Unit size. 
 +[ 1968.560000] mmc0: host does not support reading read-only switch. assuming write-enable. 
 +[ 1968.570000] mmc0: new SD card on SPI 
 +[ 1968.570000] mmcblk0: mmc0:0000 00000 1.90 GiB  
 +[ 1968.580000] ​ mmcblk0: p1 
 +<​b><​font size=4>[ 1980.340000] mmc0: SPI card removed</​font></​b>​ 
 +[ 2008.900000] mmc_spi spi0.1: SD/MMC host mmc0, no DMA, no WP, no poweroff 
 +[ 2009.070000] mmc0: SD Status: Invalid Allocation Unit size. 
 +[ 2009.080000] mmc0: host does not support reading read-only switch. assuming write-enable. 
 +[ 2009.090000] mmc0: new SD card on SPI 
 +[ 2009.090000] mmcblk0: mmc0:0000 00000 1.90 GiB 
 +[ 2009.100000] ​ mmcblk0: p1 
 +... 
 +</​pre>​ 
 +</​HTML>​ 
 + 
 +\\ 
 +=== Модули === 
 +<​HTML><​p style="​border:​2px dashed red;">​Первый вариант.</​p></​HTML>​ 
 +{{:​meta:​icons:​tango:​48px-emblem-important.svg.png?​nolink |Важно!}}Использование внешних модулей ​''​kmod-mmc''​ и ''​kmod-mmc-spi'' ​- пока не позволяет корректно смонтировать ''<​color magenta>/​overlay</​color>''​ или ''<​color blue>/</​color>''​ разделы через [[doc:​howto:​extroot]]данная ошибка описана в [[https://​dev.openwrt.org/​ticket/​7768]]. Это даже с учетом того, что использование этих модулей, позволяет полноценно использовать ​карточку памяти и монтировать ее в другие точки монтирования (кроме [[doc:​howto:​extroot]]). 
 + 
 +**Обновление:​** Проблема сохранилась по состоянию ​ревизии прошивки **r37142**.\\ 
 +Для [[doc:​howto:​extroot]],​ используйте Второй вариант.\\ 
 +\\ 
 +<​HTML><​p style="​border:​2px dashed red;">​Второй вариант.</​p></​HTML>​ 
 +== На уровне ядра (kernel): == 
 +<code diff> 
 +Index: target/​linux/​ar71xx/​config-3.7 
 +=================================================================== 
 +--- target/​linux/​ar71xx/​config-3.7 (revision 35363) 
 ++++ target/​linux/​ar71xx/​config-3.7 (working copy) 
 +@@ -240,6 +240,10 @@ 
 + # CONFIG_SPI_RB4XX is not set 
 + # CONFIG_SPI_RB4XX_CPLD is not set 
 + # CONFIG_SPI_VSC7385 is not set 
 ++CONFIG_EXT4_FS=y 
 ++CONFIG_MMC=y 
 ++CONFIG_MMC_SPI=y 
 ++CONFIG_MMC_BLOCK=y 
 + ​CONFIG_SWCONFIG=y 
 + ​CONFIG_SWCONFIG_LEDS=y 
 + ​CONFIG_SYS_HAS_CPU_MIPS32_R2=y 
 +</​code>​ 
 +//Помимо MMC модулей,​ здесь дополнительно включена возможность использовать EXT4 файловую систему на уровне ​ядра.\\ 
 +Также следует учесть,​ что Linux-ядро регулярно обновляется,​ а этот конфигурационный файл в названии носит версию ядра.\\  
 +В конечном счете, если ядро Trank'​а обновилось,​ необходимо найти этот же конфиг. файл (но уже новый, например: ​''​config-3.8''​и изменить его в соответствии с представленными здесь изменениями.//​ 
 + 
 +Интеграция ​необходимых модулей ​в ядро, позволяет ​использовать обнаруженную карточку ​памяти на ровне с флеш-памятью.\\ 
 +При этом, можно использовать карточку памяти в качестве расширенной файловой системы - [[doc:​howto:​extroot]].\\  
 +\\
  
 ==== Измерения ==== ==== Измерения ====
Line 233: Line 423:
  
 == Нагрузка на CPU во время чтения/​записи:​ == == Нагрузка на CPU во время чтения/​записи:​ ==
-<​code>​+<HTML> 
 +<pre class="​code">
 root@OpenWrt:​~#​ top root@OpenWrt:​~#​ top
 Mem: 28224K used, 1120K free, 0K shrd, 5784K buff, 5592K cached Mem: 28224K used, 1120K free, 0K shrd, 5784K buff, 5592K cached
-CPU:   0% usr  99% sys   0% nic   0% idle   0% io   0% irq   0% sirq+CPU:   0% usr  ​<font color="​red">​99% sys</​font> ​  0% nic   0% idle   0% io   0% irq   0% sirq
 Load average: 1.21 0.88 0.60 2/60 28540 Load average: 1.21 0.88 0.60 2/60 28540
   PID  PPID USER     ​STAT ​  VSZ %VSZ %CPU COMMAND   PID  PPID USER     ​STAT ​  VSZ %VSZ %CPU COMMAND
Line 243: Line 434:
   559     2 root     ​RW ​      ​0 ​  ​0% ​  6% [mmcqd/0]   559     2 root     ​RW ​      ​0 ​  ​0% ​  6% [mmcqd/0]
 ... ...
-</code>+</pre> 
 +</HTML>
  
 +**Итог:​** Скорость чтения/​записи по шине SPI, прямо зависит от частоты процессора,​ т.к. используется [[wp>​ru:​Bit-banging|Bit-banging]].
  
 == Тест одновременного использования spi0.0 и spi0.1: == == Тест одновременного использования spi0.0 и spi0.1: ==
 Здесь стоит уточнить способ выполнения теста. \\ Здесь стоит уточнить способ выполнения теста. \\
-Используется две параллельные консоли на одном устройстве и практически одновременное выполнение команд в ручном режиме при этом на флеш-памяти ограниченное место. ​\+Посылается две параллельные команды чтение\запись с разделительным command ​оператором ​"''&''"​ (запуск команды в фоне). \\
-По скорости ​записи, флеш-память конечно же уступает карте памяти, при этомпо скорости чтения - карта памяти проигрывает: +
-<​code>​ +
-root@OpenWrt:​~#​ /usr/bin/dd count=3904 bs=1K if=/​dev/​mtd5ro of=/​dev/​null +
-3904+0 records in +
-3904+0 records out +
-3997696 bytes (4.0 MBcopied, 1.71708 s, 2.3 MB/s +
-root@OpenWrt:​~#​ /usr/bin/dd count=600 bs=1K if=/​dev/​zero of=/​usr/​123.bin +
-600+0 records in +
-600+0 records out +
-614400 bytes (614 kB) copied, 14.599 s, 42.1 kB/s +
-root@OpenWrt:​~#​ +
-</​code>​+
  
 Результат следующий: ​ при одновременном чтении или записи spi0.0 и spi0.1 (процесс не имеет значения),​ предпочтение дается шине spi0.1, т.е. пока не закончится операция чтении/​записи блока на шине spi0.1 - на шине spi0.0 не начнется запрашиваемая операция,​ выполнение происходит в приоритетном порядке и не является ошибкой. Результат следующий: ​ при одновременном чтении или записи spi0.0 и spi0.1 (процесс не имеет значения),​ предпочтение дается шине spi0.1, т.е. пока не закончится операция чтении/​записи блока на шине spi0.1 - на шине spi0.0 не начнется запрашиваемая операция,​ выполнение происходит в приоритетном порядке и не является ошибкой.
Line 276: Line 457:
 <pre class="​code">​ <pre class="​code">​
 ... ...
-<​b>​[ ​   0.730000] ath79-spi ath79-spi: master is unqueued, this is deprecated</​b>​+<b><​font size=4>[    0.730000] ath79-spi ath79-spi: master is unqueued, this is deprecated</​font>​</b>
 [    0.740000] m25p80 spi0.0: found en25f32, expected m25p80 [    0.740000] m25p80 spi0.0: found en25f32, expected m25p80
-[    0.740000] m25p80 spi0.0: en25f32 (4096 Kbytes)+[    0.750000] m25p80 spi0.0: en25f32 (4096 Kbytes)
 [    0.750000] 5 tp-link partitions found on MTD device spi0.0 [    0.750000] 5 tp-link partitions found on MTD device spi0.0
-[    0.750000] Creating 5 MTD partitions on "​spi0.0":​+[    0.760000] Creating 5 MTD partitions on "​spi0.0":​
 [    0.760000] 0x000000000000-0x000000020000 : "​u-boot"​ [    0.760000] 0x000000000000-0x000000020000 : "​u-boot"​
-[    0.770000] 0x000000020000-0x0000000fdc00 ​: "​kernel"​+[    0.770000] 0x000000020000-0x00000013de00 ​: "​kernel"​
 [    0.770000] mtd: partition "​kernel"​ must either start or end on erase block boundary or be smaller than an erase block -- forcing read-only [    0.770000] mtd: partition "​kernel"​ must either start or end on erase block boundary or be smaller than an erase block -- forcing read-only
-[    0.790000] ​0x0000000fdc00-0x0000003f0000 : "​rootfs"​+[    0.790000] ​0x00000013de00-0x0000003f0000 : "​rootfs"​
 [    0.790000] mtd: partition "​rootfs"​ must either start or end on erase block boundary or be smaller than an erase block -- forcing read-only [    0.790000] mtd: partition "​rootfs"​ must either start or end on erase block boundary or be smaller than an erase block -- forcing read-only
 [    0.810000] mtd: partition "​rootfs"​ set to be root filesystem [    0.810000] mtd: partition "​rootfs"​ set to be root filesystem
-[    0.810000] mtd: partition "​rootfs_data"​ created automatically,​ ofs=2E0000, len=110000 +[    0.810000] mtd: partition "​rootfs_data"​ created automatically,​ ofs=370000, len=80000 
-[    0.820000] ​0x0000002e0000-0x0000003f0000 : "​rootfs_data"​+[    0.820000] ​0x000000370000-0x0000003f0000 : "​rootfs_data"​
 [    0.830000] 0x0000003f0000-0x000000400000 : "​art"​ [    0.830000] 0x0000003f0000-0x000000400000 : "​art"​
-[    0.830000] 0x000000020000-0x0000003f0000 : "​firmware"​+[    0.840000] 0x000000020000-0x0000003f0000 : "​firmware"​
 [    0.860000] libphy: ag71xx_mdio:​ probed [    0.860000] libphy: ag71xx_mdio:​ probed
 +[    0.860000] eth0: Atheros AG71xx at 0xba000000, irq 5, mode:GMII
 +[    1.420000] eth0: Found an AR7240/​AR9330 built-in switch
 +[    2.450000] eth1: Atheros AG71xx at 0xb9000000, irq 4, mode:MII
 +[    3.000000] ag71xx ag71xx.0 eth1: connected to PHY at ag71xx-mdio.1:​04 [uid=004dd041,​ driver=Generic PHY]
 +<​b><​font size=4>​[ ​   3.050000] mmc_spi spi0.1: SD/MMC host mmc0, no DMA, no WP, no poweroff</​font></​b>​
 +[    3.060000] TCP: cubic registered
 +[    3.060000] NET: Registered protocol family 17
 +[    3.070000] 8021q: 802.1Q VLAN Support v1.8
 +[    3.080000] VFS: Mounted root (squashfs filesystem) readonly on device 31:2.
 +[    3.090000] Freeing unused kernel memory: 268k freed
 +<​b><​font size=4>​[ ​   3.310000] mmc0: host does not support reading read-only switch. assuming write-enable.
 +[    3.320000] mmc0: new SD card on SPI
 +[    3.480000] mmcblk0: mmc0:0000 00000 1.90 GiB
 +[    3.490000] ​ mmcblk0: p1</​font></​b>​
 ... ...
-... 
-[   ​13.280000] hub 1-0:1.0: USB hub found 
-[   ​13.290000] hub 1-0:1.0: 1 port detected 
-[   ​13.310000] nf_conntrack version 0.5.0 (458 buckets, 1832 max) 
-[   ​13.660000] ohci_hcd: USB 1.1 '​Open'​ Host Controller (OHCI) Driver 
-[   ​13.810000] usbcore: registered new interface driver usbserial 
-[   ​13.810000] usbcore: registered new interface driver usbserial_generic 
-[   ​13.820000] USB Serial support registered for generic 
-[   ​13.820000] usbserial: USB Serial Driver core 
-[   ​13.950000] usbcore: registered new interface driver cp210x 
-[   ​13.950000] USB Serial support registered for cp210x 
-<​b>​[ ​  ​14.240000] mmc_spi spi0.1: SD/MMC host mmc0, no DMA, no WP, no poweroff 
-[   ​14.420000] mmc0: SD Status: Invalid Allocation Unit size. 
-[   ​14.430000] mmc0: host does not support reading read-only switch. assuming write-enable. 
-[   ​14.440000] mmc0: new SD card on SPI 
-[   ​14.440000] mmcblk0: mmc0:0000 S016B 14.2 MiB 
-[   ​14.450000] ​ mmcblk0: p1</​b>​ 
-[   ​19.990000] device eth0 entered promiscuous mode 
-[   ​21.090000] eth0: link up (1000Mbps/​Full duplex) 
-[   ​21.090000] br-lan: port 1(eth0) entered forwarding state 
-[   ​21.100000] br-lan: port 1(eth0) entered forwarding state 
-[   ​23.100000] br-lan: port 1(eth0) entered forwarding state 
-[   ​33.680000] jffs2_scan_eraseblock():​ End of filesystem marker found at 0x0 
-[   ​33.700000] jffs2_build_filesystem():​ unlocking the mtd device... done. 
-[   ​33.700000] jffs2_build_filesystem():​ erasing all blocks after the end marker... done. 
-[   ​41.170000] jffs2: notice: (1139) jffs2_build_xattr_subsystem:​ complete building xattr subsystem, 0 of xdatum (0 unchecked, 0 orphan) and 0 of xref (0 dead, 0 orphan) found. 
-root@OpenWrt:/#​ 
 </​pre>​ </​pre>​
 </​HTML>​ </​HTML>​
  
-== Вид ошибки в случае НЕ обнаружения карточки памяти:​ ==+== Вид ошибки в случае НЕ обнаружения карточки памяти ​на уровне ядра: ==
 <​code>​ <​code>​
 ... ...
-  17.390000] mmc_spi spi0.1: SD/MMC host mmc0, no DMA, no WP, no poweroff +   6.070000] mmc_spi spi0.1: SD/MMC host mmc0, no DMA, no WP, no poweroff 
-[   17.400000] mmc0: host doesn'​t support card's voltages +... 
-[   17.400000] mmc0: error -22 whilst initialising SDIO card +   8.710000] mmc0: error -145 whilst initialising SD card 
-[   17.410000] mmc0: host doesn'​t support card's voltages +... 
-  17.420000] mmc0: error -22 whilst initialising SD card +[   10.710000] mmc0: error -145 whilst initialising MMC card
-[   17.430000] mmc0: host doesn'​t support card's voltages +
-[   17.430000] mmc0: error -22 whilst initialising MMC card+
 ... ...
 </​code>​ </​code>​
  
  
-== Обнаруженные разделы ​выделены жирным: ==+== Обнаруженные разделы:​ ==
 <​HTML>​ <​HTML>​
 <pre class="​code">​ <pre class="​code">​
-root@OpenWrt:​~#​ ls /dev/ +root@OpenWrt:​~#​ ls /dev/mmc* 
-bus                 ​mtd1 ​               mtdblock1 ​          pts +<font color="​magenta"​>/dev/mmcblk0 ​   /dev/​mmcblk0p1</​font>
-console ​            ​mtd1ro ​             mtdblock2 ​          ​random +
-cpu_dma_latency ​    ​mtd2 ​               mtdblock3 ​          shm +
-full                mtd2ro ​             mtdblock4 ​          tty +
-kmsg                mtd3                mtdblock5 ​          ​ttyS0 +
-log                 ​mtd3ro ​             network_latency ​    ​urandom +
-mem                 ​mtd4 ​               network_throughput ​ watchdog +
-<b>mmcblk0</b>             ​mtd4ro ​             null                zero +
-<b>mmcblk0p1</​b          mtd5                port +
-mtd0                mtd5ro ​             ppp +
-mtd0ro ​             mtdblock0 ​          ptmx+
 root@OpenWrt:​~#​ root@OpenWrt:​~#​
 </​pre>​ </​pre>​
Line 366: Line 522:
 bus width: ​     0 (1 bits) bus width: ​     0 (1 bits)
 timing spec:    0 (legacy) timing spec:    0 (legacy)
 +signal voltage: 1 (3.30 V)
 root@OpenWrt:​~#​ root@OpenWrt:​~#​
 </​code>​ </​code>​
 +
ru/toh/tp-link/tl-mr3420/deep.mmc.hack.1358571605.txt.bz2 · Last modified: 2013/01/19 06:00 (external edit)