Информация
Настройка
Новости
Контакты
Новинка
Распродажа
Оплата
Доставка
Загрузки
  • Прошивки
    • RouterOS
    • WinBox
  • Changelogs
  • Архив
  • RouterOS
Форум
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
    info@mikrotik.moscow
    +7 495 320-55-52
    Заказать звонок
    Mikrotik.moscow
    Каталог
    • Акции
      Акции
    • Маршрутизаторы
      Маршрутизаторы
    • Коммутаторы
      Коммутаторы
    • Радиомосты и уличные точки доступа
      Радиомосты и уличные точки доступа
    • Wi-Fi для дома и офиса
      Wi-Fi для дома и офиса
    • LTE/5G
      LTE/5G
    • Powerline адаптеры
      Powerline адаптеры
    • IoT устройства
      IoT устройства
    • Оборудование 60 ГГц
      Оборудование 60 ГГц
    • Материнские платы RouterBOARD
      Материнские платы RouterBOARD
    • Корпуса
      Корпуса
    • Интерфейсы
      Интерфейсы
    • SFP/QSFP трансиверы
      SFP/QSFP трансиверы
    • Аксессуары
      Аксессуары
    • Антенны
      Антенны
    • Архив
      Архив
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Скачать WinBox Скачать Прошивки Форум > RouterOS Форум > SwOS Форум > Железо
    Mikrotik.moscow
    Каталог
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Mikrotik.moscow
    Телефоны
    +7 495 320-55-52
    Заказать звонок
    0
    0
    0
    Mikrotik.moscow
    • +7 495 320-55-52
      • Назад
      • Телефоны
      • +7 495 320-55-52
      • Заказать звонок
    • info@mikrotik.moscow
    • г. Москва, ул. Бакунинская, 84
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной


    • Кабинет
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    Аппаратное обеспечение
    Доступ к информации о железе на OpenWRT

    Доступ к информации о железе на OpenWRT

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    Ответить
    RSS
    Доступ к информации о железе на OpenWRT, Аппаратное обеспечение
     
    VFXCode
    Guest
    #1
    0
    30.05.2012 14:26:00
    Есть ли какой-то способ получить информацию о плате (конкретно серийный номер платы) через OpenWRT? Очевидно, что RouterOS как-то это делает. Я нашёл только один способ, но он не на 100% надёжный и не работает на платах без последовательного порта. Формат флеша через RooterBOOT: cat /proc/mtd должен выводить что-то вроде

    root@OpenWrt:/tmp# cat /proc/mtd  
    dev:    size   erasesize  name  
    mtd0: 0000b000 00001000 "routerboot"  
    mtd1: 00001000 00001000 "hard_config"  
    mtd2: 00002000 00001000 "bios"  
    mtd3: 00001000 00001000 "soft_config"  
    mtd4: 00040000 00004000 "booter"  
    mtd5: 005c0000 00004000 "kernel"  
    mtd6: 03a00000 00004000 "rootfs"

    Ищите серийный номер в /dev/mtdblock1. При условии, что у вас такая же плата и такая же версия RooterBOOT, серийник должен находиться в том же смещении.
     
       Цитировать   Имя
     
    vldtoma
    Guest
    #2
    0
    17.12.2018 15:26:00
    Ты нашёл способ узнать серийный номер?
     
    Цитировать   Имя
     
    idahorazor
    Guest
    #3
    0
    05.02.2019 23:31:00
    Это патч, который я придумал для OpenWRT. Сохрани следующий патч под именем 951-MIPS-ath79-add-mikrotik-serial.patch. Затем скопируй этот файл в target/linux/ar71xx/patches-4.14/951-MIPS-ath79-add-mikrotik-serial.patch и скомпилируй OpenWRT.

    --- a/arch/mips/ath79/mach-rbspi.c  
    +++ b/arch/mips/ath79/mach-rbspi.c  
    @@ -690,6 +690,12 @@ static __init const struct rb_info *rbsp  
    if (!info)  
    return NULL;  
     
    + /* Устанавливаем серийный номер Mikrotik */  
    + if (info->board_serial) {  
    + mips_set_machine_serial(info->board_serial);  
    + } else  
    + pr_err("Серийный номер Mikrotik не найден\n");  
    +  
    if (info->board_name) {  
    str = "RouterBOARD ";  
    if (strncmp(info->board_name, str, strlen(str))) {
     
    --- a/arch/mips/include/asm/prom.h  
    +++ b/arch/mips/include/asm/prom.h  
    @@ -30,5 +30,7 @@ static inline void device_tree_init(void  
     
    extern char *mips_get_machine_name(void);  
    extern void mips_set_machine_name(const char *name);  
    + extern char *mips_get_machine_serial(void);  
    + extern void mips_set_machine_serial(char *serial);  
     
    #endif /* __ASM_PROM_H */  
     
    --- a/arch/mips/kernel/proc.c  
    +++ b/arch/mips/kernel/proc.c  
    @@ -55,6 +55,11 @@ static int show_cpuinfo(struct seq_file  
    if (mips_get_machine_name())  
    seq_printf(m, "machine\t\t\t: %s\n",  
      mips_get_machine_name());  
    +  
    + /* Показать серийный номер производителя */  
    + if (mips_get_machine_serial())  
    + seq_printf(m, "serial number\t\t: %s\n",  
    + mips_get_machine_serial());  
    }  
     
    seq_printf(m, "processor\t\t: %ld\n", n);  
     
    --- a/arch/mips/kernel/prom.c  
    +++ b/arch/mips/kernel/prom.c  
    @@ -23,6 +23,7 @@  
    #include <asm/prom.h>  
     
    static char mips_machine_name[64] = "Unknown";
    +char *mips_machine_serial = "None";  
     
    __init void mips_set_machine_name(const char *name)  
    {  
    @@ -38,6 +39,19 @@ char *mips_get_machine_name(void)  
    return mips_machine_name;  
    }  
     
    +__init void mips_set_machine_serial(char *serial)  
    +{  
    + if (serial == NULL)  
    + return;  
    +  
    + mips_machine_serial = serial;  
    +}  
    +  
    +char *mips_get_machine_serial(void)  
    +{  
    + return mips_machine_serial;  
    +}  
    +  
    #ifdef CONFIG_USE_OF  
    void __init early_init_dt_add_memory_arch(u64 base, u64 size)  
    {  
    --- a/arch/mips/ath79/routerboot.h  
    +++ b/arch/mips/ath79/routerboot.h  
    @@ -18,6 +18,7 @@ struct rb_info {  
    unsigned int soft_cfg_offs;  
     
    const char *board_name;  
    + char *board_serial;  
    u32 hw_options;  
    };  
     
    --- a/arch/mips/ath79/routerboot.c  
    +++ b/arch/mips/ath79/routerboot.c  
    @@ -164,6 +164,20 @@ rb_get_board_name(void)  
    return tag;  
    }  
     
    +__init char *  
    +rb_get_board_serial(void)  
    +{  
    + u16 tag_len;  
    + u8 *tag;  
    + int err;  
    +  
    + err = rb_find_hard_cfg_tag(RB_ID_SERIAL_NUMBER, &tag, &tag_len);  
    + if (err)  
    + return NULL;  
    +  
    + return tag;  
    +}  
    +  
    __init u32  
    rb_get_hw_options(void)  
    {  
    @@ -295,6 +309,7 @@ rb_init_info(void *data, unsigned int si  
    return NULL;  
     
    rb_info.board_name = rb_get_board_name();  
    + rb_info.board_serial = rb_get_board_serial();  
    rb_info.hw_options = rb_get_hw_options();  
     
    return &rb_info;  

    Этот патч добавит вывод серийного номера в /proc/cpuinfo

    root@OpenWRT:/# cat /proc/cpuinfo  
    system type             : Qualcomm Atheros QCA9558 ver 1 rev 0  
    machine                 : MikroTik RouterBOARD 962UiGS-5HacT2HnT  
    serial number           : 6DEC05469E1F  
    processor               : 0  
    cpu model               : MIPS 74Kc V5.0  
    BogoMIPS                : 358.80  
    wait instruction        : yes  
    microsecond timers      : yes  
    tlb_entries             : 32  
    extra interrupt vector  : yes  
    hardware watchpoint     : yes, count: 4, address/irw mask: [0x0ffc, 0x0ffc, 0x0ffb, 0x0ffb]
    isa                     : mips1 mips2 mips32r1 mips32r2  
    ASEs implemented        : mips16 dsp dsp2  
    Options implemented     : tlb 4kex 4k_cache prefetch mcheck ejtag llsc dc_aliases perf_cntr_intr_bit cdmm nan_legacy nan_2008 contextconfig perf  
    shadow register sets    : 1  
    kscratch registers      : 0  
    package                 : 0  
    core                    : 0  
    VCED exceptions         : not available  
    VCEI exceptions         : not available  

    Надеюсь, это поможет!
     
    Цитировать   Имя
     
    vldtoma
    Guest
    #4
    0
    06.02.2019 12:04:00
    Я использовал ваш патч, но он не работает. В файле /proc/cpuinfo есть поле с серийным номером, но там написано None:

    system type : Atheros AR9344 rev 3  
    machine : MikroTik RouterBOARD 951Ui-2HnD  
    serial number : None  
    processor : 0  
    cpu model : MIPS 74Kc V4.12  
    BogoMIPS : 299.82  
    wait instruction : yes  
    microsecond timers : yes  
    tlb_entries : 32  
    extra interrupt vector : yes  
    hardware watchpoint : yes, count: 4, address/irw mask: [0x0ffc, 0x0ffc, 0x0ffb, 0x0ffb]
    isa : mips1 mips2 mips32r1 mips32r2  
    ASEs implemented : mips16 dsp dsp2  
    shadow register sets : 1  
    kscratch registers : 0  
    package : 0  
    core : 0  
    VCED exceptions : not available  
    VCEI exceptions : not available  

    Есть какие-нибудь советы? Спасибо.
     
    Цитировать   Имя
     
    idahorazor
    Guest
    #5
    0
    06.02.2019 21:50:00
    У тебя стоит Mikrotik RouterBOARD 951 (mach-rb95x.c), а я патчил только (mach-rbspi.c), потому что использую серию rb-hap. Тебе нужно добавить следующий кусок кода в файл mach-rb95x.c внутри функции rb95x_setup(void):

    /* Установка серийного номера Mikrotik */
    if (info->board_serial) {
       mips_set_machine_serial(info->board_serial);
    } else
       pr_err("Серийный номер Mikrotik не найден\n");

    Это должно выглядеть примерно так:

    static int __init rb95x_setup(void)
    {
       const struct rb_info *info;

       info = rb_init_info((void *)(KSEG1ADDR(AR71XX_SPI_BASE)), 0x10000);
       if (!info)
           return -EINVAL;

       /* Установка серийного номера Mikrotik */
       if (info->board_serial) {
           mips_set_machine_serial(info->board_serial);
       } else
           pr_err("Серийный номер Mikrotik не найден\n");

       rb95x_nand_init();

       return 0;
    }
     
    Цитировать   Имя
     
    vldtoma
    Guest
    #6
    0
    18.02.2019 09:28:00
    Спасибо за помощь, я отредактировал патч, который вы прислали, и он работает — серийный номер теперь доступен в cpuinfo.

    --- a/arch/mips/ath79/mach-rb95x.c  
    +++ b/arch/mips/ath79/mach-rb95x.c  
    @@ -11,7 +11,7 @@  
     */

    #define pr_fmt(fmt) "rb95x: " fmt  
    -  
    +#include <asm/prom.h>  
    #include <linux/version.h>  
    #include <linux/phy.h>  
    #include <linux/delay.h>  
    @@ -251,11 +251,17 @@ static int __init rb95x_setup(void)  
    {  
    const struct rb_info *info;

    info = rb_init_info((void *)(KSEG1ADDR(AR71XX_SPI_BASE)), 0x10000);  
    if (!info)  
    return -EINVAL;  
    + /* Устанавливаем серийный номер Mikrotik */  
    + if (info->board_serial) {  
    + mips_set_machine_serial(info->board_serial);  
    + } else  
    + pr_err("Серийный номер Mikrotik не найден\n");  
    +  
    rb95x_nand_init();

    return 0;  
    }  
    --- a/arch/mips/include/asm/prom.h  
    +++ b/arch/mips/include/asm/prom.h  
    @@ -30,5 +30,7 @@ static inline void device_tree_init(void  

    extern char *mips_get_machine_name(void);  
    extern void mips_set_machine_name(const char *name);  
    +extern char *mips_get_machine_serial(void);  
    +extern void mips_set_machine_serial(char *serial);  

    #endif /* __ASM_PROM_H */  
    --- a/arch/mips/kernel/proc.c  
    +++ b/arch/mips/kernel/proc.c  
    @@ -55,6 +55,11 @@ static int show_cpuinfo(struct seq_file  
    if (mips_get_machine_name())  
    seq_printf(m, "machine\t\t\t: %s\n",  
      mips_get_machine_name());  
    +  
    + /* Показываем серийный номер производителя */  
    + if (mips_get_machine_serial())  
    + seq_printf(m, "serial number\t\t: %s\n",  
    + mips_get_machine_serial());  
    }  

    seq_printf(m, "processor\t\t: %ld\n", n);  
    --- a/arch/mips/kernel/prom.c  
    +++ b/arch/mips/kernel/prom.c  
    @@ -23,6 +23,7 @@  
    #include <asm/prom.h>  

    static char mips_machine_name[64] = "Unknown";
    +char *mips_machine_serial = "None";  

    __init void mips_set_machine_name(const char *name)  
    {  
    @@ -38,6 +39,19 @@ char *mips_get_machine_name(void)  
    return mips_machine_name;  
    }  

    +__init void mips_set_machine_serial(char *serial)  
    +{  
    + if (serial == NULL)  
    + return;  
    +  
    + mips_machine_serial = serial;  
    +}  
    +  
    +char *mips_get_machine_serial(void)  
    +{  
    + return mips_machine_serial;  
    +}  
    +  
    #ifdef CONFIG_USE_OF  
    void __init early_init_dt_add_memory_arch(u64 base, u64 size)  
    {  
    --- a/arch/mips/ath79/routerboot.h  
    +++ b/arch/mips/ath79/routerboot.h  
    @@ -18,6 +18,7 @@ struct rb_info {  
    unsigned int soft_cfg_offs;

    const char *board_name;  
    + char *board_serial;  
    u32 hw_options;  
    };  

    --- a/arch/mips/ath79/routerboot.c  
    +++ b/arch/mips/ath79/routerboot.c  
    @@ -164,6 +164,20 @@ rb_get_board_name(void)  
    return tag;  
    }  

    +__init char *  
    +rb_get_board_serial(void)  
    +{  
    +        u16 tag_len;  
    +        u8 *tag;  
    +        int err;  
    +  
    +        err = rb_find_hard_cfg_tag(RB_ID_SERIAL_NUMBER, &tag, &tag_len);  
    +        if (err)  
    +                return NULL;  
    +  
    +        return tag;  
    +}  
    +  
    __init u32  
    rb_get_hw_options(void)  
    {  
    @@ -295,6 +309,7 @@ rb_init_info(void *data, unsigned int si  
    return NULL;  

    rb_info.board_name = rb_get_board_name();  
    + rb_info.board_serial = rb_get_board_serial();  
    rb_info.hw_options = rb_get_hw_options();  

    return &rb_info;
     
    Цитировать   Имя
     
    Страницы: 1
    Ответить
    Читают тему
    BBCode   Правила
    Форма ответов
    Текст сообщения*
    Перетащите файлы
    Ничего не найдено
    Файл
    Загрузить картинки
    #name# #size#
     
    #name#
    Файлы:
    Перетащите один или несколько файлов в эту область
    или выберите файл на компьютере
    Файлы:
    Загрузить файлы
     
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2025 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры