Jump to content

    

gormih

Свой
  • Content Count

    430
  • Joined

  • Last visited

Community Reputation

0 Обычный

About gormih

  • Rank
    nofb
  • Birthday 02/12/1978

Контакты

  • Сайт
    http://
  • ICQ
    178084550

Информация

  • Город
    Москва, Зеленоград

Recent Profile Visitors

1640 profile views
  1. Beaglebone black

    Цитата(AndrejM @ Jun 4 2014, 20:25) http://software-dl.ti.com/sitara_linux/esd.../index_FDS.html И что это? Демонстрация умения искать в гугле, и ориентироваться на сайте TI?
  2. Цитата(Мур @ Apr 19 2014, 20:44) Обращаюсь к гуру эмбеддед систем Малина незаметно уходит в историю. Появились новые вкусности http://otladka.com.ua/index.php?option=com...0&Itemid=71 Все что касается аппаратного развертывания системы, состава учебного компьютера и возможного расширения на основе рессурса на борту прошу писать сюда. Я со своей строны буду делиться достижениями (после того как куплю и соберу). Огрчило отсутствие JTAG, как способ более глубокого изучения. Прошу сообщить, какую среду лучше всего взять за основу. Заранее спасибо! JTAG нужен пригодится разве что для отладки загрузчика, такого как U-boot. После запуска ядра в 99% случаев для отладки вполне достаточно printk и debug level. Рабочую машину - рекомендую на базе ubuntu linux 12.04 64 bit. Чем мощнее процессор, тем лучше.
  3. Правка файла борды

    Цитата(TigerSHARC @ Apr 1 2014, 13:08) буду пробовать свои задумки на старом ядре. Оставлю в покое 3ю версию, пока разберусь в этом тёмном ящике (ядро Linux), уже глядишь и 4 выйдет с новыми фичами... а задачи надо решать сегодня. По опыту: Пока сам не напишешь пару драйверов на имеющееся в наличии рабочее ядро - о портировании новой версии ядра на свою борду думать рановато :-)
  4. BeagleBone Black + Android JB + Touch Screen

    Цитата(altair83 @ Apr 1 2014, 11:29) Всем добрый день. Возникла необходимость в подключении резистивного тачскрина к BeagleBone Black c ОС Android. Подключил я его к выводам AIN0...AIN3. Собрал и прошил Android в соответствии с этим руководством: http://processors.wiki.ti.com/index.php/TI..._DeveloperGuide Попутно проверил подключен ли драйвер ADC и Touchscreen с помощью этих руководств http://processors.wiki.ti.com/index.php/AM...river%27s_Guide и http://processors.wiki.ti.com/index.php/AM...river%27s_Guide Все настройки и содержимое файлов в данной сборке андроида, полностью соответствовали рекомендацим производителя. При запуске система запустилась нормально, но папка /sys/bus/iio/devices/ оказалась пустой. Т.е. ADC не заработал и тачскрин координаты нажатия которого, обрабатываются с помощью ADC, соответственно тоже. На все обращения, к производителю процессора, либо игнор, либо ответ что в данной сборке все настроено для корректной работы ADC. Попробовал собрать драйвера ADC и тачскрина в виде подгружаемых модулей. Судя по сообщениям в dmesg, модули загружаются успешно, но устройство ADC в /sys/bus/iio/devices/ не появляется. Я в данном деле новичок, подскажите пожалуйста в каком направлении копать. На одном форуме нашел предположение, что надо править Device Tree (am33xx.dtsi и am335x-bone-common.dtsi), но в исходниках ядра Android, таких файлов нет. Все нужные вам устройства описываются тут: arch/arm/mach-omap2/board-am335xevm.c Для подробного вывода логов нужно подшаманить конфигурацию ядра в части например printk level =7 , и некоторые внести некоторые изменения в самые интересные модули ядра типа #define DEBUG (обязательно до объявления всех .h файлов)
  5. ASoC ALSA

    Сам себе задал вопрос, сам и ответил. На beagleboneblack Android SDK 4.2.2 имеет следующие соответствия по i2c: В ядре i2c0, на борде i2c-1, i2c1 -> i2c-2 , i2c2-> i2c-3. При этом инициализация i2c-1 -> i2c2 изначально в ядре не прописана, если ваше устройство "висит" на этой шине - ее придется прописать.
  6. ASoC ALSA

    Дело оказалось в snd_soc_dai_link am335x_evm_dai Код static struct snd_soc_dai_link am335x_evm_dai = {      .name = "max98088",       .stream_name = "HiFi",       .cpu_dai_name ="davinci-mcasp.1",       .codec_dai_name = "max98088.1-10",       .platform_name = "davinci-pcm-audio",       .codec_name = "max98088.1-0010",       .dai_fmt = SND_SOC_DAIFMT_DSP_B | SND_SOC_DAIFMT_NB_NF |              SND_SOC_DAIFMT_CBM_CFM,       .ops = &am335x_evm_ops,   }; Ключевыми является .stream_name и .codec_dai_name. Теперь осталось понять, в каком месте разработчики борды напутали, и какой из трех i2c в ядре выведен на пины отмеченные как i2c-1
  7. Правка файла борды

    Цитата(TigerSHARC @ Mar 28 2014, 20:21) - где в ядре задаётся machine id? Вы не поверите - как правило в файле борды:-) Цитата(TigerSHARC @ Mar 28 2014, 20:21) пробовал менять его на тот который был в рабочем варианте - безрезультатно....((( Там все может быть сложнее завязано. Может, например вычислять по комбинации перемычек на выводах контроллера, и тому подобное...., Куча подводных камней. Если задача не стоит сделать универсальный файл борды под целый ряд девайсов - я лично блокирую все функции идентификации борды, дабы не тратить на них время. Единственное - нужно понимать, к каким последствиям это может привести например для подключаемых модулей ядра. Цитата(TigerSHARC @ Mar 28 2014, 20:21) P.S. чем больше углубляюсь в это , тем больше думаю: зачем выдуманы такие сложности? Это не сложности. Это стиль программирования Только по началу тяжело освоить, потом становится легче, когда знаешь минимум того, что должно быть описано... Со временем понимая всю "навороченность" ядра начинаешь наоборот восхищаться некоторым решениям. Писать драйвера под linux гораздо проще по сравнению например с windows именно благодаря богатой инфраструктуре того что нужно на уровне ядра, и хорошо продуманным описательным моделям самих драйверов. Я вот чистым временем около недели потратил на освоение того, как примерно работает ALSA на уровне ядра, и еще далек от завершения поставленной задачи. Из документации, на скорую руку слепленой жалким подобием doxygen мало что понятно. Но из того, что всплыло становится ясно, что при хорошей документации у меня ушло бы максимум 1 день на решение задачи.
  8. ASoC ALSA

    Вообщем имеем begleboneblack + max98089 EVKIT Висит кодек на i2c-1 Пишем драйвер для ALSA: Код#include <linux/clk.h>   #include <linux/platform_device.h>   #include <linux/module.h>   #include <sound/core.h>   #include <sound/pcm.h>   #include <sound/soc.h>      #include <asm/mach-types.h>   #include <mach/hardware.h>   #include <mach/gpio.h>   #include <plat/mcbsp.h>   #include <mach/board-am335xevm.h>   //#include "omap-mcbsp.h"   //#include "omap-pcm.h"   #include "davinci-pcm.h"   #include "davinci-i2s.h"   #include "davinci-mcasp.h"         #include "../codecs/max98088.h"      #define CODEC_CLOCK     12000000      static int am335x_evm_hw_params(struct snd_pcm_substream *substream,       struct snd_pcm_hw_params *params)   {       struct snd_soc_pcm_runtime *rtd = substream->private_data;       struct snd_soc_dai *codec_dai = rtd->codec_dai;       struct snd_soc_dai *cpu_dai = rtd->cpu_dai;       int ret;       unsigned sysclk = 12000000;          /* ASP1 on DM355 EVM is clocked by an external oscillator */       if (machine_is_davinci_dm355_evm() || machine_is_davinci_dm6467_evm() ||           machine_is_davinci_dm365_evm())           sysclk = 27000000;          /* ASP0 in DM6446 EVM is clocked by U55, as configured by        * board-dm644x-evm.c using GPIOs from U18.  There are six        * options; here we "know" we use a 48 KHz sample rate.        */       else if (machine_is_davinci_evm())           sysclk = 12288000;          else if (machine_is_davinci_da830_evm() ||                   machine_is_davinci_da850_evm())           sysclk = 24576000;       /* On AM335X, CODEC gets MCLK from external Xtal (12MHz). */       else if (machine_is_am335xevm())   #ifdef CONFIG_MACH_AM335XEVM           if (am335x_evm_get_id() == EVM_SK)               sysclk = 24000000;           else   #endif               sysclk = 12000000;          else           return -EINVAL;       pr_info("MAX98088 EVM snd_soc_dai_set_sysclk\n");       ret = snd_soc_dai_set_sysclk(codec_dai, 0,               CODEC_CLOCK, SND_SOC_CLOCK_IN);       if (ret < 0) {           printk(KERN_ERR "MAX98089 can't set codec system clock\n");           return ret;       }          ret = snd_soc_dai_set_sysclk(cpu_dai, sysclk, 0,                   SND_SOC_CLOCK_IN);       if (ret < 0) {           printk(KERN_ERR "MAX98089 can't set CPU system clock sysclk\n");           return ret;       }          snd_soc_dai_set_sysclk(cpu_dai, sysclk, 0,                   SND_SOC_CLOCK_IN);       if (ret < 0) {           printk(KERN_ERR "MAX98089  can't set CPU system clock sysclk (2)\n");           return ret;       }          return 0;   }      static struct snd_soc_ops am335x_evm_ops = {       .hw_params = am335x_evm_hw_params,   };      /* am335x_evm machine dapm widgets */   static const struct snd_soc_dapm_widget max98088_dapm_widgets[] = {       SND_SOC_DAPM_HP("Line Out", NULL),       SND_SOC_DAPM_LINE("Line In", NULL),       SND_SOC_DAPM_MIC("Mic In", NULL),   };      static const struct snd_soc_dapm_route audio_map[] = {       /* Line Out connected to LLOUT, RLOUT */       {"Line Out", NULL, "LOUT"},       {"Line Out", NULL, "ROUT"},          {"LLINEIN", NULL, "Line In"},       {"RLINEIN", NULL, "Line In"},          {"MICIN", NULL, "Mic In"},   };      /* Digital audio interface glue - connects codec <--> CPU */   static struct snd_soc_dai_link am335x_evm_dai = {       .name = "max98088",       .stream_name = "AIC23",       .cpu_dai_name ="davinci-mcasp.1",       .codec_dai_name = "max98088-hifi",       .platform_name = "davinci-pcm-audio",       .codec_name = "max98088.1-0010",       .dai_fmt = SND_SOC_DAIFMT_DSP_B | SND_SOC_DAIFMT_NB_NF |              SND_SOC_DAIFMT_CBM_CFM,   //    .init = &am335x_evm_soc_init,       .ops = &am335x_evm_ops,   };      /* Audio machine driver */   static struct snd_soc_card snd_soc_am335x_evm = {       .name = "max98088pd",       .dai_link = &am335x_evm_dai,       .num_links = 1,          .dapm_widgets = max98088_dapm_widgets,       .num_dapm_widgets = ARRAY_SIZE(max98088_dapm_widgets),       .dapm_routes = audio_map,       .num_dapm_routes = ARRAY_SIZE(audio_map),   };      static struct platform_device *am335x_evm_snd_device;      static int __init am335x_evm_soc_init(void)   {       int ret;      //    if (!machine_is_omapam335x_evm())   //        return -ENODEV;       pr_info("MAX98088 EVM SoC init\n");          am335x_evm_snd_device = platform_device_alloc("soc-audio", -1);       if (!am335x_evm_snd_device) {           printk(KERN_ERR "MAX98088 Platform device allocation failed\n");           return -ENOMEM;       }       pr_info("MAX98088 EVM platform_set_drvdata ... \n");       platform_set_drvdata(am335x_evm_snd_device, &snd_soc_am335x_evm);       pr_info("MAX98088 EVM platform_set_drvdata OK! \n");       ret = platform_device_add(am335x_evm_snd_device);       if (ret)           goto err1;          return 0;      err1:       printk(KERN_ERR "Unable to add MAX98088 platform device\n");       platform_device_put(am335x_evm_snd_device);          return ret;   }      static void __exit am335x_evm_soc_exit(void)   {       platform_device_unregister(am335x_evm_snd_device);   }      module_init(am335x_evm_soc_init);   module_exit(am335x_evm_soc_exit);      MODULE_AUTHOR("Anuj Aggarwal <anuj.aggarwal@ti.com>");   MODULE_DESCRIPTION("ALSA SoC OMAP3517 / AM3517 EVM");   MODULE_LICENSE("GPL v2"); На выходе имеем следующую фигню: по dmesg Цитата<7>[ 2.452697] i2c-core: driver [cs4271] registered <7>[ 2.452880] i2c-core: driver [da7210-codec] registered <7>[ 2.453063] max98088 1-0010: probe <7>[ 2.453063] max98088 1-0010: codec register 1-0010 <7>[ 2.453125] max98088 1-0010: dai register 1-0010 #2 <7>[ 2.453125] Registered DAI 'HiFi' <7>[ 2.453125] Registered DAI 'Aux' <7>[ 2.453155] Registered codec 'max98088.1-0010' <7>[ 2.453186] i2c-core: driver [max98088] registered и далее Цитата<6>[ 2.458251] MAX98088 EVM SoC init <6>[ 2.461791] MAX98088 EVM platform_set_drvdata ... <6>[ 2.466796] MAX98088 EVM platform_set_drvdata OK! <7>[ 2.472076] soc-audio soc-audio: binding max98088 at idx 0 <7>[ 2.472106] soc-audio soc-audio: CPU DAI davinci-mcasp.1 not registered <7>[ 2.472106] soc-audio soc-audio: CODEC DAI max98088-hifi not registered <7>[ 2.472137] soc-audio soc-audio: Registered card 'max98088pd' <6>[ 2.472167] ALSA device list: <6>[ 2.475250] No soundcards found. No soundcards found. Хотя бы подскажите, куда копать.. Еще не пойму одной вещи - у меня вроде .ops не вызываются, и кодек не пишет отладочных собщений, хотя #define DEBUG в нем поставил, уровень отладки kprint 7, и есть еще живительное CFLAGS_max98088.o = -DDEBUG в Makefile. После всего этого отладочных сообщений нету.. P.S.: Скрыть под спойлер код не удалось. Что то не работает на форуме, сори.
  9. LINUX или Android

    Цитата(Dron_Gus @ Mar 4 2014, 00:48) 3) vi (после освоения vim) Человек, который спрашивал о возможности применения Windows 100% воспримет Вашу рекомендацию как издёвку.
  10. Смешные вопросы новичка

    Цитата(Onic777 @ Mar 13 2014, 10:03) 3. Имеется ли в MSP430 файл проекта, в котором указывается какие файлы исходников включены в проект? 4. Где обычно находится первая вызываемая функция (например, Main) и как она называется? Какой вопрос, такой и ответ. MSP430 наплевать на файлы проекта, он тупо исполняет бинарный код. А вот файл проекта сильно зависит от среды, в которой проект разрабатывался. Если, например это gcc binutils + Eclipse, то вообще файл проекта не включает в себя список исходников. Если это Keil uVision или например CodeComposer - ситуация резко меняется. Вопрос о функции Main в данном случае сугубо риторический... с соответствующим ответом - "где то":-)
  11. Все правильно. Linux + OpenCV. Плат под это - только ленивый не найдет.
  12. Правка файла борды

    Цитата(TigerSHARC @ Mar 26 2014, 17:51) Вот толкьо diff тут не совсем мне подходит. так как файлы борды бывают разбитыми на несколкьо фйлов (для моей платы по умолчанию конфигурация борды задаётся в dboard_da850_evm.c и в board_da850_sdi.c) Если что, то - diff -u ./kernel-3.14.1/ ./kernel-2.6.36/ >kernel-from-2636-to-3141.patch Сделает патч на все ядро целиком. Это для справки. Аналогичный патч можно сделать например на всю директорию arch/arm/plat-omap и sound/soc/omap - именно там основные отличия в части исходников интересных по Вашей теме. Цитата(TigerSHARC @ Mar 26 2014, 17:51) Сейчас удалось собрать ядро новой версии с исправленым файлом борды, то u-boot пишет : Uncompressing Linux... done, booting the kernel. и тишина..... Конфигурацию u-boot не меняли? Такое бывает еще, когда например в u-boot не задана ttys, а в ядре по умолчанию не прописана, либо прописана но не правильно. И на всякий случай дайте вывод file ./uImage
  13. Правка файла борды

    З.Ы.: Ядро линукс проще и удобней все таки собирать под линуксом. Особо легче, если при этом знаешь что такое ls, grep, diff, patch, modprobe и прочее :-)
  14. Beaglebone black

    Кто нибудь цеплял max98088/9 к этому счастью на андроид? Если да - поделитесь опытом
  15. Правка файла борды

    Цитата(TigerSHARC @ Mar 25 2014, 17:09) в новом SDK под мою плату файла нет, так как мою плату делал стороний разработчик и делал файл борды из файла для board_da850_evm.c Как вариант: 1) Находим любую борду под omap, которая есть в старой и новой версии SDK 2) Делаем diff 3) По примеру патча делаем патч/исправление под свою борду.